Word créer une liste déroulante permettant d'afficher/masquer un paragraphe
sam092
-
cs_Le Pivert Messages postés 8437 Statut Contributeur -
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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
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:
- Modifier une liste déroulante word
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Word 2013 - Télécharger - Traitement de texte
- Modifier dns - Guide
- Supprimer une page word - Guide
4 réponses
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
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,
J'ai avancé sur ma problématique.
J'ai fait le code suivant :
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.
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.
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!
https://heureuxoli.developpez.com/office/word/formulaires/#L2-E
Sur ce point je ne peux pas t'aider!
J'ai essayé mais sans succès.
J'avais mis
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?
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?
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 :-)
C'est une idée :-)
Tu peux t’intéresser aux événements du doc pour déclencher une macro en regardant ceci:
http://faqword.com/evenements/evenements.pdf
@+
http://faqword.com/evenements/evenements.pdf
@+
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.
Bon courage
@+