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

- - Dernière réponse : cs_Le Pivert
Messages postés
6209
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2019
- 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
Afficher la suite 

4 réponses

Messages postés
6209
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2019
390
0
Merci
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


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.
cs_Le Pivert
Messages postés
6209
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2019
390 -
Je suis désolé, mais je ne peux pas t'aider. Je travaille sur des UserForm

Bon courage

@+
Commenter la réponse de cs_Le Pivert
0
Merci
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.
cs_Le Pivert
Messages postés
6209
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2019
390 -
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!
Bonjour,
J'ai regardé le lien, c'est très bien fait et très intéressant.
En revanche je n'ai pas trouvé la réponse à mon problème.
Je suis preneur de toute solution.
Merci.
Sam.
cs_Le Pivert
Messages postés
6209
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2019
390 -
Tu ne peux pas te servir de cette méthode?

CalculateOnExit

https://heureuxoli.developpez.com/office/word/formulaires/#L5-B

@+
cs_Le Pivert
Messages postés
6209
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2019
390 -
As-tu essayé cela:

EntryMacro et ExitMacro

https://heureuxoli.developpez.com/office/word/formulaires/#L5-B-5
Je viens d'essayer EntryMacro et ExitMacro sans succès :-(
Peut-être que je m'y prend mal ou peut-être que mon code au départ n'est pas bon.
En tout cas merci pour toutes ces pistes.
Commenter la réponse de sam092
0
Merci
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?
cs_Le Pivert
Messages postés
6209
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2019
390 -
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.
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.
Commenter la réponse de sam092
0
Merci
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 :-)
cs_Le Pivert
Messages postés
6209
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2019
390 -
Tu peux t’intéresser aux événements du doc pour déclencher une macro en regardant ceci:

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

@+
Commenter la réponse de sam092