VBA Word : comment synchroniser 2 listes déroulantes

Fermé
Yersi - 9 mars 2023 à 11:50
 Yersi - 10 mars 2023 à 10:05

Bonjour,

Mon postulat de départ est que je dois, sur un document word, créer un formulaire avec des listes déroulantes utilisant du content control (ni Active X ni hérités).

Dans ce formulaire j'ai

- une liste déroulante "Civilité" avec les choix "Monsieur" et 'Madame"

- une liste déroulante "agee" avec les choix "agé" et "agée"

Le but étant que lorsque "Monsieur" est choisi dans la liste "Civilité", automatiquement "agé" soit choisi dans la liste "agee"

J'ai commencé à regarder du côté de VBA et en tripatouillant des bouts de code trouvés ça et là, le plus proche que j'ai pu obtenir est ceci mais ça me renvoie une "erreur d'execution 438"

Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)

Dim choix As String

choix = CC.Range.Text

If CC.Title = "Civilité" Then

Select Case choix
Case "Monsieur"
 ActiveDocument.CC.Title("Agee").DropDown.Value = 1
Case "Madame"
 ActiveDocument.CC.Title("Agee").DropDown.Value = 2
 
End Select

End If
End Sub

Je ne suis pas compétant sur ce langage et je n'ai malheureusement pas le temps de pousser les recherches plus loin, est-ce que l'un ou l'une de vous aurait une idée ?

Merci par avance


Windows / Firefox 110.0

A voir également:

2 réponses

thev Messages postés 1855 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 13 mai 2024 683
Modifié le 9 mars 2023 à 21:12

Bonsoir,

ci-dessous code :

Private Sub Document_ContentControlOnExit(ByVal CC As ContentControl, Cancel As Boolean)
    Dim ctrl As ContentControl
    Dim valeur As ContentControlListEntry
    Dim i As Integer
    
    If CC.Title = "Civilité" Then
        
        For Each ctrl In ActiveDocument.ContentControls
            
            If ctrl.Title = "agee" Then
                For Each valeur In CC.DropdownListEntries
                    i = valeur.Index
                    If valeur = CC.Range.Text Then Exit For
                Next valeur
                ctrl.Range.Text = ctrl.DropdownListEntries(i)
            End If
        
        Next ctrl
    
    End If

End Sub

0

Ah oui, j'en étais beaucoup plus loin que je pensais. Merci du coup, ça fonctionne niquel

0