Aide pour Commande VBA Excel

Résolu
Bonjour,
voila, étant plus que nul en VBA, mais sachant que c'est très utile, ma demande est :

quand je clique sur un bouton (que j'ai inséré au préalable)
il ouvre un fichier .Doc
recherche dans ce fichier doc, la même valeur que dans une cellule d'excel précise
et m'amene à cette endroit.

Merci beaucoup pour votre, dites moi si je n'ai pas été assez clair.
Cordialement.

16 réponses

Résumé de la discussion

La discussion porte sur l'automatisation d'Excel pour ouvrir Word, rechercher une valeur d'une cellule et s'y rendre dans le document Word et accéder rapidement à l'emplacement. Plusieurs approches proposées impliquent une macro Excel qui lit une cellule, ouvre Word via l'objet Word.Application et appelle une macro Word effectuant une recherche avec les paramètres Find. Des conseils ajoutent d'activer la bibliothèque d'objets Word dans l'éditeur VBA et précisent où placer les codes (Excel ou Word) pour éviter les erreurs d'exécution liées à des références de feuille. En cas de souci, la piste clé consiste à corriger les références de feuille et de cellule (par exemple Feuil1 et A1) et à adapter la ligne lisant valeur pour correspondre au classeur utilisé.

Bobot (l’IA à votre service)
  1. Bonjour,
    Pour ouvrir un fichier Word :
    Sub ouvrir_word()
    
    Dim appWrd As Word.Application
    Dim DocWord As Word.Document
    Set appWrd = Nothing
    Set appWrd = CreateObject("Word.Application")
    appWrd.Visible = True
    appWrd.Documents.Open ("C:\Documents and Settings\user\Bureau\fichier.doc")
    Set appWrd = Nothing
    Set DocWord = Nothing
    
    End Sub

    Ensuite pour effectuer une recherche directement, peut-être dans une macro qui s'exécute à l'ouverture, avec :
    Private Sub Document_Open()
    'la code de la recherche ici
    End Sub

    Et la recherche qui va avec :
     Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "RECHERCHE ICI"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute

    Pour la recherche automatique, peut-être qu'en associant la valeur cherchée dans une variable globale sous Excel, on peut l'utiliser dans la macro de recherche Word, mais je ne connaît pas du tout les subtilités du VBA Word pour avancer plus loin ...
    0
    1. merci beaucoup de ta réponse ^^
      mais comme je l'expliquer je ne suis pas très doué, et je voulais savoir si les 2 derniers morceaux de code je devais les mettre dans Word ou excel ?

      merci encore
      0
      1. Les deux dernières parties de codes sont dans Word, mais je ne sais absolument pas si ça peut marcher ou comment est-ce que ça peut marcher :) c'est une idée pour te guider plus loin...
        0
        1. Merci encore, je test tout sa tout de suite.

          Encore merci.
          0
          1. je n'arrive pas a faire en sorte que la macro démarre quand le doc s'ouvre
            ou alors elle ne trouve rien ...
            faudrai t'il mettre la valeur de ma cellule dans une variable word et lui faire chercher cette variable .?

            si oui, comment la mettre en variable et comment et ou inscrire tout cela ?
            0
            1. A l'ouverture d'un fichier Word, ce code fonctionne pourtant :
              Private Sub Document_Open()
              MsgBox "test"
              End Sub

              Il faut bien le placer dans:
              Project (NOMDUDOC)>Microsoft Word Objects>ThisDocument
              0
              1. il y est bien, c'est qu'elle tourne dans le vide je crois bien.

                .Text = "RECHERCHE ICI"

                a la place de ce qu'il y a ci dessus j'ai "'C:\dossier\[classeur.xls]Feuil7'!$P$2"
                et je pense qu'il va pas voir la valeur de la cellule mais qu'il recherche textuellement le texte...

                comment faire .?
                Merci
                0
                1. Youhouu ça marche !
                  Ce code dans Word:
                  Private Sub Document_Open()
                  
                      Dim xlapp As Object, reponse As String
                      Set xlapp = CreateObject("Excel.application")
                  
                  xlapp.Visible = False
                  xlapp.Workbooks.Open "C:\Documents and Settings\user\Bureau\DocExcel.xls"
                  reponse = xlapp.ActiveWorkbook.Sheets("Feuil1").Range("a1").Value
                  
                  xlapp.Visible = True
                  xlapp.Quit
                  Set xlapp = Nothing
                  
                     ' MsgBox reponse
                      
                      Selection.Find.ClearFormatting
                      With Selection.Find
                          .Text = reponse
                          .Replacement.Text = ""
                          .Forward = True
                          .Wrap = wdFindContinue
                          .Format = False
                          .MatchCase = False
                          .MatchWholeWord = False
                          .MatchWildcards = False
                          .MatchSoundsLike = False
                          .MatchAllWordForms = False
                      End With
                      Selection.Find.Execute
                  End Sub
                  0
                  1. snif j'obtien une erreur moi, avec cette ligne :

                    reponse = xlapp.ActiveWorkbook.Sheets("Feuil1").Range("a1").Value

                    il me dit "erreur d'exécution '9': l'indice n'appartient pas à la sélection.

                    Mais quesque cela veut il bien vouloir dire .?
                    0
                    1. Bonjour !
                      ça veut dire que l'indice spécifié en paramètre dans cette ligne n'existe pas dans ton classeur...
                      A priori ça doit être la "feuil1".

                      Cette ligne permet mettre dans la variable "reponse" la valeur que tu cherches dans le doc Word :
                      reponse = xlapp.ActiveWorkbook.Sheets("Feuil1").Range("a1").Value 
                      Ici la cellule A1 de la feuille Feuil1
                      
                      Il faut adapter cette ligne à ton classeur.
                      0
                      1. eh bien j'obtien cette erreur après l'avoir adapté

                        reponse = xlapp.ActiveWorkbook.Sheets("Feuil6").Range("E4").Value

                        je sais vraiment pas comment corrigé se truc ...
                        merci beaucoup de ton aide
                        0
                        1. Quelle est l'erreur ? La même ? L'indice n'appartient toujours pas à la sélection ?
                          0
                        2. oui
                          0
                        3. et pourtant c'est sur et certain que dans ma feuil6 (j'ai pas précisé mais je l'ai renommé) j'ai bien dans ma cellule E4 ce que je veut rechercher dans mon word ( la valeur : 15209297)
                          0
                      2. Si on récapète :
                        Dans Excel, tu as inséré ce code, associé à un bouton :
                        Sub ouvrir_word()
                        
                        Dim appWrd As Word.Application
                        Dim DocWord As Word.Document
                        Set appWrd = Nothing
                        Set appWrd = CreateObject("Word.Application")
                        appWrd.Visible = True
                        appWrd.Documents.Open ("C:\Documents and Settings\user\Bureau\fichier.doc")
                        Set appWrd = Nothing
                        Set DocWord = Nothing
                        
                        End Sub


                        Puis dans Word, dans la feuille "ThisDocument" :
                        Private Sub Document_Open()
                        
                            Dim xlapp As Object, reponse As String
                            Set xlapp = CreateObject("Excel.application")
                        
                        xlapp.Visible = False
                        xlapp.Workbooks.Open ("C:\Documents and Settings\user\Bureau\DocExcel.xls")
                        reponse = xlapp.ActiveWorkbook.Sheets("Feuil1").Range("a1").Value
                        
                        xlapp.Visible = True
                        xlapp.Quit
                        Set xlapp = Nothing
                        
                            
                            Selection.Find.ClearFormatting
                            With Selection.Find
                                .Text = reponse
                                .Replacement.Text = ""
                                .Forward = True
                                .Wrap = wdFindContinue
                                .Format = False
                                .MatchCase = False
                                .MatchWholeWord = False
                                .MatchWildcards = False
                                .MatchSoundsLike = False
                                .MatchAllWordForms = False
                            End With
                            Selection.Find.Execute
                        End Sub

                        Les deux fichiers Excel et Word étant sur le bureau, tu peux changer le chemin d'accès sur ces lignes :
                        appWrd.Documents.Open ("C:\Documents and Settings\user\Bureau\fichier.doc")
                        xlapp.Workbooks.Open "(C:\Documents and Settings\user\Bureau\DocExcel.xls")


                        Fais moi savoir si tu as encore la même erreur après avoir vérifé tout ça ...
                        0
                        1. eh bien enfaite ... dans le 1° morceau de code, celui pour Excel, j'ai une erreur, il me dit : "Erreur de compilation : Type défini par l'utilisateur non défini"

                          donc ... j'ai enlevé ces 2 lignes et sa fonctionne

                          Dim appWrd As Word.Application
                          Dim DocWord As Word.Document

                          et pour conclure, toujours la meme erreur sur cette ligne

                          reponse = xlapp.ActiveWorkbook.Sheets("Feuil6").Range("e4").Value
                          0
                          1. Il ne faut pas enlever ces lignes !
                            Il faut permettre au VBA Excel d'utiliser des objets VBA Word. Pour cela : Dans l'éditeur VBA, menu Outils>Références et cocher "Microsoft Word 12.0 Object Library"
                            0
                          2. wouhou ^^ sa marche
                            bon j'avou j'ai merdouillé grave

                            mais y'aurai pas une case a cocher alors dans le VBA word ?
                            0
                          3. Une case à cocher ?
                            Je pensais qu'il fallait un bouton Excel, qui ouvre un Word et cherche automatiquement dans ce Word une valeur d'une cellule Excel...

                            Pourquoi une case à cocher ?
                            0
                          4. ah nn nn ^^ ne t'en fait pas tu pense bien ^^
                            je parle d'une case a cocher dans le menu référence pour plus avoir l'autre erreur
                            0
                          5. Aaah oui pardon je ne l'ai pas précisé, dans le VBE Word, même menu, "Microsoft Excel 12.0 Object Library" à cocher...
                            0
                        2. Boon j'ai fait moult recherches, moult tests, et définitivement, ça marche chez moi !

                          Alors on récapète encore une fois, depuis le début :
                          Dans Excel, on place ceci :
                          Sub Main() 
                          
                          valeur = CStr(ActiveWorkbook.ActiveSheet.Range("A1").Value) 
                          
                          Dim oWdApp As Word.Application 
                          Set oWdApp = CreateObject("Word.Application") 
                          
                          With oWdApp 
                          .Visible = True 
                          .Documents.Open ("C:\Documents and Settings\user\Bureau\TEST.doc") 
                          .Application.Run "recherche", valeur 
                          End With 
                          
                          Set oWdApp = Nothing 
                          
                          End Sub


                          Dans Word on place ceci :
                          Sub recherche(param As String) 
                              Selection.Find.ClearFormatting 
                              With Selection.Find 
                                  .Text = param 
                                  .Replacement.Text = "" 
                                  .Forward = True 
                                  .Wrap = wdFindContinue 
                                  .Format = False 
                                  .MatchCase = False 
                                  .MatchWholeWord = False 
                                  .MatchWildcards = False 
                                  .MatchSoundsLike = False 
                                  .MatchAllWordForms = False 
                              End With 
                              Selection.Find.Execute 
                          
                          End Sub

                          De cette manière, on peut ouvrir le Word sans forcément déclencher la recherche automatique à l'ouverture :)
                          On associe la macro Excel au bouton, et ça marche excellement bien chez moi :)

                          Je reste à dispo si tu as des problèmes ^^
                          -------------------
                          Cordialement,
                          Clément
                          1
                          1. tonnerre de Zeus, je vais pas te mentir mais je commencer a désépéré, mais là non di diou comment je suis content, excuse moi mais je te tutoye, mais tu est génial, t'es un pro ! merci merci merci c'est vraiment nickel.

                            merci infiniment.
                            0
                            1. Je t'excuses, je t'ai tutoyé tout le long aussi ;) Pis je suis pas très vieux alors permets-toi donc
                              0