Word créer une liste déroulante permettant d'afficher/masquer un paragraphe

Fermé
sam092 - 8 sept. 2019 à 16:00
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 16 sept. 2019 à 08:28
Bonjour,

J'ai un formulaire word qui contient plusieurs paragraphes contenant eux mêmes de nombreux champs.
Ce formulaire est un courrier type qui n'est pas lié à un publipostage..
Je cherche a faire en sorte que lorsque l'on choisi l'objet du courrier qui est dans une liste déroulante avec 2 choix, un paragraphe différent s'affiche selon le choix.
J'ai trouvé pas mal de solutions en vba permettant d'afficher du texte selon le choix de la liste déroulant mais cela ne répond pas à mon problème. En effet, j'ai besoin que ces paragraphes contiennent des champs.
J'ai donc pensé à la possibilité de créer des signets au niveau des paragraphes et d'afficher ou masquer ces signets en fonction du choix de la liste déroulante.
Malheureusement débutant en vba, je n'arrive pas à trouver la solution.
D'autant plus qu'il faut pouvoir enlever la protection avec mot de passe et la remettre à la fin de l'exécution de la macro.
D'avance merci pour votre aide ou toute solution pouvant aboutir au résultat :-)

Sam
A voir également:

4 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 9 sept. 2019 à 11:28
Bonjour,

qu'entends-tu par Formulaire?

Un UserForm?

Il faudrait être plus précis!

Poster la macro qui a été faite

en attendant lire ceci, il y aura peut être une réponse à la question:

https://word.developpez.com/faq/?page=VBA


0
Bonjour,

Il s'agit bien d'un formulaire Word (et non un UserForm).
C'est un courrier avec des champs soit en liste déroulante (civilité) soit avec des zones à remplir (coordonnées).

J'ai commencé, avec les recherches web, ce code :

Sub MaMacro()

    If Not ActiveDocument.ProtectionType = wdNoProtection Then
        ActiveDocument.Unprotect "test"
    End If
    
    Select Case
ActiveDocument.FormFields("MaListeDeroulante").Result
    Case "Choix1"
    ActiveDocument.Bookmarks("Signet1").Range.Font.Hidden = True
    Case "Choix2"
    ActiveDocument.Bookmarks("Signet2").Range.Font.Hidden = True
    End Select
    ActiveDocument.Protect wdAllowOnlyFormFields 

End Sub

J'aimerai pouvoir compléter le code pour que lors d'un nouveau changement dans ma liste déroulante, le nouveau choix apparaisse et que l'ancien disparaisse.
De plus, à la fin de la macro, j'aimerai que la protection avec le mot de passe soit remise en place.

Merci pour votre aide.

Sam.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 10 sept. 2019 à 08:04
Je suis désolé, mais je ne peux pas t'aider. Je travaille sur des UserForm

Bon courage

@+
0
Bonjour,

J'ai avancé sur ma problématique.
J'ai fait le code suivant :


Sub MaMacro()

If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect "test"
End If

Select Case ActiveDocument.FormFields("MaListeDeroulante").Result
Case "choix1"
ActiveDocument.Bookmarks("signet1").Range.Font.Hidden = True
ActiveDocument.Bookmarks("signet2").Range.Font.Hidden = False
Case "choix2"
ActiveDocument.Bookmarks("signet2").Range.Font.Hidden = True
ActiveDocument.Bookmarks("signet1").Range.Font.Hidden = False
End Select

If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Protect wdAllowOnlyFormFields, noreset, "test"
End If

End Sub


Tout fonctionne bien, sauf le calcul en sortie de liste déroulante (j'ai mis la macro dans la liste déroulante avec calcul en sortie).
En effet, pour que les modifications sur les signets soient effectives, il faut absolument tabuler.
Hors, il peut arriver que quelqu'un sorte de la liste déroulante en cliquant à l'extérieur et dans ce cas le calcul en sortie ne se fait pas.

Pouvez-vous m'aider pour que le calcul en sortie s'effectue quelque soit la façon de quitter la liste déroulante?

D'avance merci.

Sam.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié le 12 sept. 2019 à 08:00
Avec une variable Booléenne qui se met à True lors du clic dans la liste déroulante. Cette variable est à False au début de la macro et remis à False à la fin.
Le calcul en sortie ne se fait que si ta variable est à True.

@+
0
sam092 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
12 sept. 2019 à 08:23
Bonjour,
Serait-il possible de me donner plus de précisions avec le code, je débute et je ne vois pas comment faire.
D’avance merci.
Sam.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
12 sept. 2019 à 08:26
j'ai mis la macro dans la liste déroulante avec calcul en sortie.

Voir cette macro et comment se déclenche-t-elle?
0
Bonjour,
J’ai créé une liste déroulante à partir des formulaires hérités.
Dans cette liste déroulante j’ai demandé à exécuter ma macro à la sortie.
Ma macro (voir ci-dessus) est dans un module et non dans ThisDocument.
Sam.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
12 sept. 2019 à 12:50
Voir ceci si cela peut te faire avancer:

https://heureuxoli.developpez.com/office/word/formulaires/#L2-E

Sur ce point je ne peux pas t'aider!
0
J'ai essayé mais sans succès.
J'avais mis
ActiveDocument.FormFields(4).CalculateOnExit = True
à la fin de mon code, juste avant la remise de la protection, mais ça ne change rien.
Faut-il intégrer cette mise à jour à ma macro, ou faut-il mettre cette macro à part?
Et dans ce cas comment la déclenche t'on?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
14 sept. 2019 à 18:39
D'après ce que je comprends tu fais une macro avec ce code et tu la mets en macro de sortie dans ta liste déroulante.
0
J'ai essayé aussi :-)
Mais pas de changement, si je clique à l'extérieur de ma liste déroulante sans tabuler, le "CalculateOnExit" ne s'effectue pas.
Mon soucis est de faire appliquer la macro par une sortie au clic de la liste déroulante.
0
Ne serait-il pas possible de créer une boucle qui dirait que tant que je suis dans la liste déroulante, j'exécute la macro?
C'est une idée :-)
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
16 sept. 2019 à 08:28
Tu peux t’intéresser aux événements du doc pour déclencher une macro en regardant ceci:

http://faqword.com/evenements/evenements.pdf

@+
0