Eyal se demande s’il existe un moyen d’exécuter une macro automatiquement si un utilisateur tape un mot ou une phrase en particulier.

Malheureusement, il n’existe aucune procédure événementielle Word VBA qui détecte le moment où du texte est saisi dans un document. Toutefois, Word détecte en interne lorsqu’un mot complet est entré afin qu’il puisse effectuer des opérations telles que la vérification orthographique, la correction automatique et la mise à jour du nombre de mots. Cependant, vous ne pouvez pas utiliser cette méthode de détection interne.

La meilleure approche est probablement d’utiliser la capacité de minuterie de VBA pour vérifier si un mot a été entré. (N’oubliez pas: Word met à jour en interne le nombre de mots à chaque fois qu’un mot est terminé, afin que votre code de minuterie puisse surveiller le nombre de mots pour voir s’il a changé.) La méthode OnTime a un paramètre minimum d’une seconde, ce qui signifie que votre minuterie- le code basé ne peut s’exécuter qu’une fois par seconde. Il est possible pour une dactylo rapide de taper plus d’un mot par seconde, votre code doit donc vérifier les derniers mots saisis.

Voici le code que vous pouvez utiliser:

Dim wCount As Long Dim aRange As Range Dim tWords Dim inactiveSW As Boolean

Sub InitializeTimer()

tWords = Array("APPLE", "ORANGE", "PEAR")

wCount = ActiveDocument.Words.Count     Set aRange = Selection.Range     aRange.Start = ActiveDocument.Range.Start     inactiveSW = False     StartTimer End Sub
Public Sub StartTimer()

Application.OnTime When:=Now + TimeValue("00:00:01"), _     Name:="TestWords"

End Sub
Public Sub TestWords()

Dim testWord As String     Dim i As Long     Dim k As Long     Dim kw As Long     Dim xc As Long

If inactiveSW Then Exit Sub     With ActiveDocument         xc = .Range.Words.Count - wCount         If xc > 0 And xc < 5 Then             aRange.End = Selection.End             kw = aRange.Words.Count - 1             If kw > 0 Then                 For k = kw - xc + 1 To kw                     testWord = UCase(Trim(aRange.Words(k).Text))

For i = 0 To UBound(tWords)

If testWord = tWords(i) Then                             mysub (testWord)

Exit For                         End If                     Next i                 Next k             End If         End If         wCount = .Range.Words.Count     End With     StartTimer End Sub
Public Sub KillOnTime()

'cannot stop the timer so set inactive switch   inactiveSW = True End Sub
Sub mysub(s As String)

' this subroutine is executed when a special word is entered   MsgBox s End Sub

La première routine que vous devez exécuter est la macro InitializeTimer. Il configure les variables nécessaires avant de démarrer réellement la méthode OnTime. Il appelle ensuite la macro StartTimer qui définit en fait le minuteur qui exécute la macro TestWords.

TestWords vérifie si le nombre de mots a augmenté et, si c’est le cas, il vérifie les cinq derniers mots saisis pour voir s’ils correspondent à l’un de vos mots déclencheurs. (Les mots déclencheurs sont définis dans le tableau tWords, dans la macro InitializeTimer. Ils doivent être entrés dans le tableau tout en majuscules.) Si un mot déclencheur est détecté, alors votre code (mysub) est exécuté et le mot déclencheur est passé à votre code.

Il convient de noter qu’il est possible que le nombre de mots saute de plus de cinq, en particulier si du texte est collé dans le document. Si vous voulez que le code vérifie tous les mots qui peuvent être collés dans le document, vous devrez changer la ligne de code de vérification, qui est la suivante:

If xc > 0 And xc < 5 Then

Tout ce que vous avez à faire est de le changer en ceci:

If xc > 0 Then

Si vous souhaitez arrêter la vérification des mots, exécutez la macro KillOnTime, qui définit un indicateur qui empêche la vérification des mots. Pour redémarrer ultérieurement la vérification, exécutez simplement à nouveau InitializeTimer.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites WordTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / wordribbon-WordTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

WordTips est votre source pour une formation Microsoft Word rentable.

(Microsoft Word est le logiciel de traitement de texte le plus populaire au monde.) Cette astuce (12375) s’applique à Microsoft Word 2007, 2010, 2013, 2016, 2019 et Word dans Office 365. Vous pouvez trouver une version de cette astuce pour le ancienne interface de menu de Word ici:

link: / word-Running_Macros_Based_on_Keywords [Exécution de macros basées sur des mots clés].