Thomas a une macro qui exécute diverses fonctions à des intervalles de temps.

Certaines de ces fonctions ne doivent pas être exécutées si une boîte de dialogue est ouverte à l’écran, car essayer de les exécuter entraînera une erreur dans les fonctions. Il se demande s’il existe un moyen, dans la macro, de détecter si une boîte de dialogue – n’importe quelle boîte de dialogue – est actuellement ouverte. Thomas préfère détecter la boîte de dialogue ouverte plutôt que de traiter une erreur générée.

La seule façon d’essayer de le faire est peut-être d’utiliser FindWindow, qui fait en fait partie de l’API Windows. Son but est de récupérer un handle vers une fenêtre ouverte particulière. (Une boîte de dialogue n’est rien d’autre qu’une fenêtre ouverte, et chaque boîte de dialogue a un nom.) Cette approche ne vous dira pas si une boîte de dialogue any est ouverte, mais elle vous dira si une boîte de dialogue spécifique est ouverte.

Voici un exemple rapide pour montrer comment la fonction FindWindow peut être utilisée:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _   (ByVal wClassName As Any, ByVal wWindowName As String) As Long

Sub testDialogOpen()

Dim wHandle As Long     Dim wName As String

wName = "Find and Replace"

wHandle = FindWindow(0&, wName)

If wHandle = 0 Then         MsgBox "Dialog window is not open"

Else         MsgBox "Dialog window is open"

End If End Sub

Notez que la fonction FindWindow doit être déclarée en dehors de votre procédure VBA. Ensuite, dans la procédure, vous devez spécifier le nom de la boîte de dialogue que vous souhaitez connaître. Il s’agit du nom qui apparaît dans la barre de titre de la boîte de dialogue et la fonction FindWindow est insensible à la casse. La valeur de retour pour FindWindow sera un handle pour la boîte de dialogue, si elle est ouverte. S’il n’est pas ouvert, la fonction renvoie un 0.

Souvenez-vous également que les boîtes de dialogue peuvent être de deux types: modales et non modales. Si une boîte de dialogue particulière est modale, elle doit être fermée avant que toute autre action puisse être entreprise sur le système. Vous voudrez faire des tests approfondis avec les boîtes de dialogue à un moment donné, car vous pouvez obtenir des performances différentes de votre macro selon qu’une boîte de dialogue ouverte est modale ou non.

_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 (12356) 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-Detecting_an_Open_Dialog_Box [Détection d’une boîte de dialogue ouverte].