Bonjour à tous
je souhaiterais venir écrire un fichier Excel (existant) depuis SW (avec une macro vba) pour y écrire le nom de ma pièce, le nom du client…
Mais je butte sur problème lorsque j’utilise cette méthode :
Dim xlApp As Excel.Application
Set xlApp = Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
With xlApp
.Visible = True
.Workbooks.Open ("mondoc.xlsm")
End With
Le problème est que ce code me crée une nouvelle instance de Excel
et cela me pose un problème notamment si le fichier mondoc est déjà ouvert dans une première instance, le fichier et en lecture seule
dans le cas où le fichier ne serait pas ouvert, cela fonctionne, je peux écrire, mais mon fichier mondoc contient lui-même des macros qui ne peuvent plus fonctionner avec les autres fichiers ouverts (du fait qu’ils ne soient pas tous dans la même instance de Excel).
Ma question
est-ce possible d’ouvrir via SW le fichier mondoc dans la même instance que celle déjà en cours sur mon poste
si oui comment faire ?
j’ai testé plusieurs choses, mais mon niveau vba n’est pas très élevé
merci pour le temps consacré.
Bonjour;
Pour vérifier si un fichier Excel est déjà ouvert:
Si oui, on utilise ce fichier.
Sinon on ouvre ce fichier:
Sub CheckAndOpenExcelFile()
Dim xlApp As Object
Dim xlWorkbook As Object
Dim filePath As String
Dim isFileOpen As Boolean
' Chemin du fichier Excel
filePath = "C:\Chemin\Vers\Votre\Fichier.xlsx"
' Vérifiez si Excel est déjà ouvert
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If xlApp Is Nothing Then
' Si Excel n'est pas ouvert, ouvrez une nouvelle instance
Set xlApp = CreateObject("Excel.Application")
End If
On Error GoTo 0
' Vérifiez si le fichier est déjà ouvert
isFileOpen = False
For Each xlWorkbook In xlApp.Workbooks
If xlWorkbook.FullName = filePath Then
isFileOpen = True
Set xlWorkbook = xlApp.Workbooks.Open(filePath)
Exit For
End If
Next xlWorkbook
' Si le fichier n'est pas ouvert, ouvrez-le
If Not isFileOpen Then
Set xlWorkbook = xlApp.Workbooks.Open(filePath)
End If
' Affichez Excel (facultatif)
xlApp.Visible = True
' Faites quelque chose avec le fichier Excel
' ...
' Nettoyez
Set xlWorkbook = Nothing
Set xlApp = Nothing
End Sub
En remplaçant le chemin indiqué dans « filepath » par l’emplacement de votre fichier Excel.
Nota: pensez à utiliser les balises </> quand vous postez une macro
… sinon celle-ci risque d’être traduite automatiquement en texte Français. ce qui ne facilite pas la lecture
Salut
mon code est presque terminé, mais j’ai encore un petit souci que je n’arrive pas à résoudre
lorsque le fichier Excel est ouvert, c’est ok (il s’affiche et je peux sélectionner ma ligne)
en revanche si le fichier Excel est fermé, le fichier s’ouvre bien, mais il reste en arrière-plan, je suis obligé de le sélectionner via la barre d’outils
y a-t-il la possibilité de forcer l’affichage en premier plan du fichier Excel ???
si oui comment faire ?
Merci
J’allais oublier, le fichier Excel est en ligne (office365) et il contient également des macros à l’ouverture.
Sub EXPDDC()
Set swApp = GetObject(, "SldWorks.Application") 'CreateObject("SldWorks.Application")
Set swmodel = swApp.ActiveDoc
If swmodel Is Nothing Then
Exit Sub
End If
If swmodel.GetType = 3 Then
Set swDraw = swmodel
Set swView = swDraw.GetFirstView
Set swView = swView.GetNextView
Set swParentModel = swView.ReferencedDocument
prop1 = swParentModel.GetTitle & "-" & swParentModel.CustomInfo2("", "REVISION")
If swParentModel.CustomInfo2("", "type") = "FAB" Then
prop2 = swParentModel.CustomInfo2("", "client")
ElseIf prop4 = "QUINCAI" Then
prop2 = ""
Else: MsgBox "MANQUE CODE FAMILLE"
End If
If swmodel.CustomInfo2("", "ETAT") = "VALIDE" And swParentModel.CustomInfo2("", "ETAT") = "VALIDE" Then prop3 = "etat ok"
Else
prop1 = swmodel.GetTitle & "-" & swmodel.CustomInfo2("", "REVISION")
If swmodel.CustomInfo2("", "type") = "FAB" Then
prop2 = swmodel.CustomInfo2("", "client")
ElseIf prop4 = "QUINCAI" Then
prop2 = ""
Else: MsgBox "MANQUE CODE FAMILLE"
End If
If swmodel.CustomInfo2("", "ETAT") = "VALIDE" Then prop3 = "etat ok"
End If
If prop3 <> "etat ok" Then
réponse = MsgBox("LES FICHIERS NE SONT PAS A L'ETAT " & Chr(34) & " VALIDÉ " & Chr(34) & vbCrLf & "SOUHAITEZ VOUS TOUS DE MÊME EXPORTER VERS" & vbCrLf & Chr(34) & " DEMANDE DE CHIFFRAGE " & Chr(34) & " ?", vbExclamation + vbYesNo + vbDefaultButton2, "ETAT FICHIER")
End If
If réponse = vbYes Or prop3 = "etat ok" Then
'traitement
Dim xlApp As Object
Dim xlWorkbook As Object
Dim filePath As String
Dim Selec As Range
' Chemin du fichier Excel
filePath = "chemin/monfichier.xlsm"
'Vérifiez si Excel est déjà ouvert
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If xlApp Is Nothing Then
' Si Excel n'est pas ouvert, ouvrez une nouvelle instance
Set xlApp = CreateObject("Excel.Application")
End If
On Error GoTo 0
Set xlWorkbook = xlApp.Workbooks.Open(filePath)
' Affichez Excel (facultatif)
xlApp.Visible = True
xlWorkbook.Sheets("feuil1").Activate
' Faites quelque chose avec le fichier Excel
On Error Resume Next 'au cas où on clique sur Annuler
Set Selec = xlApp.InputBox("CLIQUER SUR LA LIGNE DE DESTINATION", Type:=8)
On Error GoTo 0
If Not Selec Is Nothing Then
Ligne = Selec.Row
xlWorkbook.Sheets("feuil1").Cells(Ligne, 2) = prop1
xlWorkbook.Sheets("feuil1").Cells(Ligne, 4) = prop2
xlWorkbook.Save
Else
swApp.Visible = True
swApp.SendMsgToUser "EXPORT ANNULÉ!"
End If
' Nettoyez
Set xlWorkbook = Nothing
Set xlApp = Nothing
Else
MsgBox "VEUILLEZ MODIFIER L'ETAT DES FICHIERS" & vbCrLf & "( AUCUNE ACTION EFECTUEE !!! )"
End If
End Sub
saisissez ou collez du code ici
… Je suis perplexe, l’ensemble de la Macro ne devrait pas fonctionner avec Excel en version online (il faudrait ouvrir un navigateur web, s’identifier, valider l’ID ), de plus Solidworks n’est pas connu pour être super-compatibe avec office 365… et je je crois pas qu’il soit possible de le gérer en VBA…
En théorie pour afficher la fenêtre Excel au premier plan (pour un excel offline) la commande:
Pour la lisibilité de votre code, pensez à mettre vos déclarations de variables Les « Dim… » en haut… juste sous « Sub EXPDDC() »
…
en déplacez les lignes:
' Nettoyez
Set xlWorkbook = Nothing
Set xlApp = Nothing
A la fin de votre macro, juste au dessus du « end sub »
essayez le mode pas-a-pas (touche F8) et dites moi si excel est visible au premier plan, arrivé à la commande "xlWorkbook.Sheets("feuil1").Activate"
(ligne 68) .
Alors, j’ai mis un point d’arrêt sur la ligne précédente
et en mode pas à pas lorsque je passe la ligne
xlWorkbook.Sheets("feuil1").Activate
il ne se passe rien
(je ne peux pas faire tout le code en mode pas à pas, car lors de l’ouverture du fichier Excel qui contient lui-même des macros, je suis obligé de mettre le fichier au premier plan pour les exécuter en mode pas à pas)
Pourtant, la ligne fonctionne
j’ai testé en changent d’onglet
alors ça ne s’affiche pas, mais lorsque que je le mets au premier plan manuellement, je suis bien sûr l’onglet choisi