vendredi 15 mars 2013

Ajouter une info bulle à toutes les occurrences d’un mot dans un document Word

Il y a quelques temps je publiais un article intitulé “Word : afficher une info-bulle contenant la définition d’un mot au survol de la souris en utilisant le champ AUTOTEXTLIST” dans cette article j’explique comment ajouter dans Word une info-bulle à un mot permettant de l’expliquer ou de le définir. Suite à cette article un Internaute m’a demandé de lui fournir une macro qui permettrait d’automatiser cette tâche.

Je vous présente donc “InfoBulle” une macro qui recherche l’occurrence d’un mot dans un document puis le remplace par un champ permettant d’afficher lorsque vous survolez le mot avec la souris une info-bulle qui contient un texte pouvant être utilisé pour définir ou expliquer le mot survolé. Cette macro a été fait sous Word version 2010.

La macro ‘Infobulle’

Sub InfoBulle()
'
' Macro Info-bulle, créée par Mehdi HAMMADI le 15/03/2012
' Suite à la requête d'un Internaute sur le site Office Users
' Objectif rechercher les différentes occurrences d'un mot dans un texte puis lui ajouter une infobulle.
' Merci à Circé pour la partie de code permettant de compté le nombre d'occurence d'un mot
’ (http://www.faqword.com/index.php/word/faq-word/vba-solutions/555-comment-compter-le-nombre-doccurences-contenues-dans-un-document)
   
    Dim strMotARecherche As String
    Dim strTexteInfoBulle As String
    Dim strTexteDuChamp As String
   
    strMotARechercher = InputBox("Saisissez le mot", "Mot à rechercher")
    strTexteInfoBulle = InputBox("Saisissez le texte de l'info-bulle", "Info-bulle")
   
    If IsNull(strMotARechercher) Or strMotARechercher = "" Or IsNull(strTexteInfoBulle) _
        Or strTexteInfoBulle = "" Then
        Exit Sub
    Else
        Selection.HomeKey Unit:=wdStory
        strTexteDuChamp = "AUTOTEXTLIST " & chr$(34) & strMotARechercher & chr$(34) & " \t " _
        & chr$(34) & strTexteInfoBulle & chr$(34)
        iCount = 0
        With ActiveDocument.Content.Find
            Do While .Execute(FindText:=strMotARechercher, Format:=False, _
                MatchCase:=False, MatchWholeWord:=True) = True
                iCount = iCount + 1
            Loop
        End With
       
        If iCount = 0 Then
            MsgBox ("pas de correspondance")
            Exit Sub
        End If
              
        Selection.HomeKey Unit:=wdStory
        With Selection.Find
            .Text = strMotARechercher
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = True
        End With
       
        For i = 1 To iCount
            Selection.Find.Execute
            ActiveWindow.View.ShowFieldCodes = True
            Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
            Text:=strTexteDuChamp, PreserveFormatting:=True
            ActiveWindow.View.ShowFieldCodes = False
        Next
    End If
End Sub

Mots clés Technorati : ,,,

10 commentaires:

  1. Je te remercie d'avoir fait ce boulot rien que pour moi ! Ca en aidera plus d'un ! :)
    Maintenant petit détail, mais pas trop dérangeant car le travail fournis est tout simplement ENORME. c'est que dans le champ "Tapez votre définition" de la macro, seul le premier mot est pris en compte, sinon, pour la définition, il_faut_la_noter_comme_ca_pour_que_tout_soit_pris_en_compte. Donc soit lier la définition en un bloque.
    Mais je vais pas être trop exigent, je te remercie beaucoup !! :)

    RépondreSupprimer
    Réponses
    1. Merci pour votre retour;
      Je viens de corriger ce bug, il faudra remplacer la ligne
      strTexteDuChamp = "AUTOTEXTLIST " & strMotARechercher & " \t " & strTexteInfoBulle
      par
      strTexteDuChamp = "AUTOTEXTLIST " & strMotARechercher & " \t " & Chr$(34) & strTexteInfoBulle & Chr$(34)
      Correction que je vais mettre à jour.
      Merci encore

      Supprimer
    2. Merci à toi d'intervenir à ma simple demande et être prêt a faire et même corrigé une macro qui va me changer la vie !
      Je connais que très peu de monde capable d'aider son prochain de la sorte ! Merci encore !

      Si je peux proposer une amélioration suite à l'utilisation de cette macro, il serait utile, d'avoir une seconde macro, celle ci de suppression de la définition de la première qui, en marquant le mot à définir, va supprimer toutes les infos bulles du mot.
      En effet, si on ajoute la définition du mot XYZ à son document, et que, quelque jour après, d'autre mots XYZ (sans infos bulles) sont rajouté au document, si on veux rajouter a nouveau la déf avec la macro, cela engendre un bug.

      Exemple : Si on écrit le mot "chien" avec une info-bulle, et qu'ensuite, d'autre mot chien intégré le document, si on réutilise la macro, les mots ayant l'info-bulle se voit en double. Soit "ChienChien" en infos bulle.

      J'espère avoir été assez clair, maintenant, comme je l'ai dis précédemment, j'en demande pas trop lol, ton travail est tout bonnement parfait et suffisant, mais il est vrai que une macro de suppression d'infos bulle selon le mot, ça serait top pour rajouter des mots à "infos-buller" ou

      Supprimer
    3. ...ou pour modifier la définition

      Bref, merci encore pour ton travail énorme et ta rapidité !

      Supprimer
    4. Après une utilisation intensive de cette macro, c'est tout simplement un petit bijou, rien a dire, elle marche nickel.
      Après voilà, pour l'améliorer, il serais vraiment parfait d'avoir une macro pour supprimer toutes les infos bulles d'une document, et une seconde pour supprimer toutes les infos bulles d'un mot spécifique du document.

      Supprimer
  2. Bonjour et merci de votre retour,

    Je tenterais une macro de désinstallation des que j'aurais un peu de temps.

    Encore merci

    RépondreSupprimer
    Réponses
    1. Merci à toi pour cette macro unique ! elle n'existe nulle part ailleurs, elle est pourtant si utile (pour les étudiants surtout), et je l'avais chercher durant des heures sur des sites US, mais je ne trouvais rien :)

      Supprimer
  3. Bonjour,
    Je viens de corriger un autre bug signalé par Manu et la macro prend maintenant en compte les mots composés comme mot à rechercher ainsi il est possible de définir des mots comme "epagneul breton".
    Voici le code d'origine :
    strTexteDuChamp = "AUTOTEXTLIST " & strMotARechercher & " \t " & Chr$(34) & strTexteInfoBulle & Chr$(34)
    à remplacer par :
    par
    strTexteDuChamp = "AUTOTEXTLIST " & Chr$(34) & strMotARechercher & Chr$(34) & " \t " & Chr$(34) & strTexteInfoBulle & Chr$(34)
    Correction faites dans le message initiale.

    RépondreSupprimer
  4. Bonjour,
    Merci pour votre travail et bravo, cette macro est très utile à beaucoup d’utilisateurs !

    Je souhaitais savoir s'il était possible de faire la même sous PowerPoint ? (et également si la mise en forme de l'info-bulle était possible, par exemple en l'affichant sur plusieurs lignes)

    Merci par avance de votre réponse

    RépondreSupprimer
  5. Bonsoir,
    Sous PowerPoint il n'est pas possible d'insérer de champs. Donc cette fonctionnalité n'est pas disponible. Toutefois, si vous souhaitez ajouter des infobulles dans PowerPoint, voici un lien vers un article qui d'écrit la procédure. Je l'ai testé avec la version 2013 est cela fonctionne. http://www.netfox2.net/modules/smartsection/item.php?itemid=559#.VLlRj3l0wkI
    Pour ce qui est de l'affichage de l'infobulle (sous Word) sur plusieurs lignes je n'ai pas de réponse et je ne trouve pas d'article sur le sujet.
    Bonne continuation

    RépondreSupprimer