Activer fichier excel - Transferer variable de macro Word à macro Excel

didieraucun Messages postés 29 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 2 janvier 2008 - 7 juil. 2007 à 11:04
didieraucun Messages postés 29 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 2 janvier 2008 - 8 juil. 2007 à 22:53
Bonsoir à tous, 
A partir d'un
document Word, je souhaites récupérer certaines valeurs d'un tableau
pour les transférer automatiquement dans un fichier Excel.

Avec votrre aide (merci jean-marc ), j'ai ce code :
<hr size= "2" width="100%" />Sub Test()
Dim a As String
Dim objExcel, objClasseur
Set objExcel = CreateObject("Excel.Application")

' Controle si le fichier Toto.xls est ouvert et l'ouvre si necessaireConst ForReading 1, ForWriting 2, ForAppending = 8Const TristateUseDefault -2, TristateTrue -1, TristateFalse = 0

Dim strExcelFile, objFso, objFile
strExcelFile = "D:\Mes Documents\Excel\Toto.xls"
Set objFso = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set objFile = objFso.OpenTextFile(strExcelFile, ForAppending, TristateFalse)

If Err.Number <> 0 Then
MsgBox "Le fichier est déjà ouvert" & vbCrLf & Err.Number & vbCrLf _
           & Err.Source & vbCrLf & Err.Description: Err.Clear
          ' Que mettre ici pour aciver le fichier "Toto.xls" déjà ouvert ?
          
 Else
   MsgBox "Le fichier n'est pas ouvert"
      objFile.Close
      Set objClasseur = objExcel.Workbooks.Open(strExcelFile)
   'objExcel.DisplayAlerts = False
   objExcel.Application.Visible = True 'False
   'MsgBox "fichier " & strExcelFile & " ouvert"
   'objExcel.Quit
  
End If

' Partie 2 : Récupérer les valeurs du tableau Word sans les 2 derniers caractères bizarres
Set objTable = ActiveDocument.Tables(1)
a1 = Len(Mid(objTable.Cell(1, 1), 7, 25)) - 2
a2 = Mid(objTable.Cell(1, 1), 7, a1)

' partie 3 : Lance la macro "Macro1" de Excel
objExcel.Run ("Macro1") 'lance la macro de Excel
' que mettre pour transferer la variable a2 dans la macro "Macro1" de Excel ?

'MsgBox a1 & " - " & a2

Set objExcel = Nothing
Set objClasseur = Nothing
Set objFile = Nothing
Set objFso = Nothing
End Sub
<hr size="2" width="100%" />Mais je n'arrive pas à trouver la solution pour :
1 - Activer le fichier "Toto.xls" si il est déjà ouvert ?
      Le fichier est ouvert et la suite du programme ne s'éxécute pas

2 - Pour transferer la variable a2 de la macro Word "Test" dans la macro "Macro1" de Excel ?

5 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
7 juil. 2007 à 19:59
1- tu envoies un message demandant de le fermer.

2- Pourquoi utiliser une macro ? copier les valeurs ne suffit pas ?
Si tu dois passer par une macro, est-ce qu'elle attend des paramètres ?
si non, essaie de passer les valeurs de a1 et a2 aux variables déjà incluses et déclarées Public dans le classeur... du genre
objExcel.Var1 = a1
objExcel.Var2 = a2
objExcel.Run ("Macro1")

MPi
0
didieraucun Messages postés 29 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 2 janvier 2008
7 juil. 2007 à 23:20
1 - Ca peut etre une solution.
Cependant, j'ai rajouté
Set ApplExcel = GetObject(, "Excel.Application")
ApplExcel.Application.Visible = True
Cela a pour effet d'activer Toto.xls mais la suite du code ne s'exécute pas

2 - Je souhite passer par une macro dans Excel car je souhaite faire d'autres choses comme avoir le choix de l'emplacement des cellules de destination pour coller mes valeurs.
0
didieraucun Messages postés 29 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 2 janvier 2008
7 juil. 2007 à 23:58
Si tu dois passer par une macro, est-ce qu'elle attend des paramètres ?
si non, essaie de passer les valeurs de a1 et a2 aux variables déjà incluses et déclarées Public dans le classeur... du genre
objExcel.Var1 = a1
objExcel.Var2 = a2
objExcel.Run ("Macro1")

Pour le code de Word, j'ecris quoi
<hr size="2" width="100%" />Public Sub Macro1(var2 As String)
'
   
End Sub
<hr size="2" width="100%" />
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
8 juil. 2007 à 16:49
objExcel pointe vers une nouvelle session d'Excel que tu crées par code.
toto.xls est ouvert dans une autre session qui n'a rien à voir avec celle que tu viens de créer.

D'où l'importance de demander la fermeture. Tu pourrais éventuellement détruire la session par code, j'imagine, mais ce ne serait pas souhaitable pour l'utilisateur et ça risquerait de corrompre le fichier...

Pour ce qui est de Word et de la méthode Run, je ne sais pas... Je n'utilise jamais ce genre de méthode.
Et oublie ce que je t'ai dit concernant le passage de variable. Je ne pense pas que ce soit possible, finalement...

Par contre, depuis Word, tu peux créer un fichier contenant les 2 valeurs à utiliser dans Excel
Au début de ta macro dans Excel, tu vérifies si Var1 et Var2 (tes 2 paramètres) sont vides,
Si oui, tu ouvres le fichier en question et tu leur affectes les valeurs lues.
Tu devrais donc pouvoir utiliser le fichier Excel en mode Automation ou en mode "stand-alone".

MPi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
didieraucun Messages postés 29 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 2 janvier 2008
8 juil. 2007 à 22:53
Voici un exemple pour transferer des varraibles d'une marco Word à une macro Excel :
<hr size="2" width="100%" />
Créer une macro dans Word :

Public Sub Test()

    Dim xls As Excel.Application

    Dim wkb As Excel.Workbook

     
    Set xls = New Excel.Application

    xls.Visible = True

     
    Set wkb = xls.Workbooks.Open("c:\toto.xls" )

    wkb.Application.Run "Macro1", "VBFRANCE"

    wkb.Activate

End Sub
<hr size="2" width="100%" />Et dans le fichier c:\toto.xls, créer la macro suivante :

 

Public Sub Macro1(val As String)

    Sheet1.Cells(1, 1) = val

    MsgBox (val)

End Sub
<hr size="2" width="100%" />
La macro Excel récupère la donnée "VBFRANCE" de la macro Word
0
Rejoignez-nous