Listes déroulantes égales

Fermé
Foreva - 4 juil. 2017 à 09:44
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 7 juil. 2017 à 15:25
Bonjour à toutes et à tous :)

J'aimerai avoir deux listes déroulantes qui ont les mêmes champs et qui se mettent à jour en cascade, c'est à dire lorsque j'en change un, les autres se changent de la même façon. Je n'ai rien trouvé sur le net susceptible de m'aider.

Merci ! ^^,

3 réponses

m@rina Messages postés 21080 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 15 novembre 2024 11 352
4 juil. 2017 à 13:14
Bonjour

Peux tu être plus précis ?
De quel type de liste déroulante parles tu ?
Quelle est ta version de Word ?
Tu veux changer le choix fait par l'utilisateur ou bien l'ensemble des items de la liste ?

m@rina
0
Bonjour m@rina et merci pour votre réponse ! Je suis sous Word 2010. J'ai des listes déroulantes de type "Contrôle de contenu de listes déroulantes" qui ont les mêmes valeurs à l'intérieur. Par exemple la liste A contient le nom des Villes, la liste B contient également le nom des villes. Je voudrai que, lorsque j'ajoute une ville dans la liste A, cette même ville sois également ajoutée dans la liste B. J'ai essayé de passer par Excel (extraire des données d'une colonne "ville" comme ça je n'aurai plus qu'à modifier le document Excel en question), mais je n'ai pas réussi. J'essaye donc d'avoir, directement dans le document Word, des listes qui ont les mêmes valeurs et qui se modifient en cascade.

Je ne veux donc pas changer le choix fait par les utilisateurs, mais bien les items de mes listes (pour ne pas avoir à les changer sur chacune de mes listes qui sont égales, et ce à chaque modification)

Ps : j'utilise ces listes là, mais je ne suis pas contre l'usage des zones de listes déroulantes (contrôle ActiveX).

J'ai essayé de par exemple leur donner le même nom mais ça ne fonctionne pas.

Si vous trouvez une solution ce serait carrément génial ^^,
0
m@rina Messages postés 21080 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 15 novembre 2024 11 352
6 juil. 2017 à 11:52
Bonjour,

Désolée, mais je n'ai pas de réponses car déjà les événements dans Word sont rares, donc il n'y en a pas pour ce genre de choses.

m@rina
0
D'accord :) je vais m'y prendre différemment ! En tout cas merci m@rina.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
6 juil. 2017 à 19:44
Bonjour,
salut m@rina, pas encore en vacances ? :-)

Une tentative.
Je ne connais pas vraiment vba word donc pas trop d'exigences svp... ;-)
J'ai choisi la liste déroulante 'héritée' car elle permet une gestion facile de sa mise à jour, et permet d'appeler une macro en sortie.
Par contre ce que je me suis aperçu à la fin (je ne connais pas word non plus :-)) c'est qu'il faut verrouiller le formulaire pour que les listes soient actives.
A partir de ce moment seuls les éléments du formulaire sont modifiables.
Pas sûr que ça t'ailles (?!?)
Les activeX perdent leur valeurs à la fermeture et obligerait à modifier la liste en dur dans le code. Pas terrible non plus...
Sub maj_Liste()
    Dim source As Object, liste() As String, ObjF As FormField
    Dim nom, nb As Long, i As Long
'Stop
    Set source = Selection.FormFields
    nom = Split(source(1).Name, "_")
    If LCase(Left(nom(0), 7)) = "listegr" And nom(1) = "1" Then
        'il s'agit de la liste 1 d'un groupe de listes
        nb = source(1).DropDown.ListEntries.Count ' nombre d'items de la liste maitre
        ' recup items de la liste 1
        ReDim liste(1 To nb)
        With source(1).DropDown
            For i = 1 To nb
                liste(i) = .ListEntries(i).Name
            Next i
        End With
        For Each ObjF In ActiveDocument.FormFields
            With ObjF.DropDown
                If LCase(Split(ObjF.Name, "_")(0)) = LCase(nom(0)) Then
                    ' même groupe de liste
                    .ListEntries.Clear ' vider la liste
                    ' on copie les items dans la liste
                    For i = 1 To nb
                        .ListEntries.Add Name:=liste(i)
                    Next i
                End If
            End With
        Next ObjF
    End If
End Sub


Explications dans le fichier.
https://mon-partage.fr/f/h734PS5X/
eric
0
m@rina Messages postés 21080 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 15 novembre 2024 11 352
7 juil. 2017 à 13:56
Hello Eriiic
Merci de prendre le relais ! Je suis déjà partie en vacances et déjà revenue (après un mois complet quand même) ! ;)
Voilà pourquoi j'ai le cerveau un peu embrouillé.
Effectivement les champs hérités permettent le lancement de macro à la sortie, mais c'est lourd, car il faut, comme tu le soulignes, protéger le document, et donc le déprotéger à chaque modification du champ.

Sinon, faut faire une macro qui modifie toutes les liste déroulantes, mais il faudra la lancer, ce ne sera pas sur événement.

m@rina
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
7 juil. 2017 à 15:25
Il me semble que le demandeur également soit parti en vacances... ;-)
0