Cacher du texte selon choix de liste déroulante

Nessie

XLDnaute Occasionnel
Bonjour,

J'ai 2 paragraphes (composés de textes écrits et de champs calculés) que je souhaite voir disparaître selon un critère sélectionné dans une liste déroulante. (cf doc DAB_exemple)

J'ai trouvé sur un autre forum quelque chose de similaire (fichier Toto) mais je ne comprends pas le code.

Aidez-moi s'il vous plait car je tourne en rond.

D'avance merci
 

Pièces jointes

  • DAB_exemple.docx
    16.5 KB · Affichages: 122
  • Toto1.zip
    9.1 KB · Affichages: 100
  • Toto1.zip
    9.1 KB · Affichages: 122
  • Toto1.zip
    9.1 KB · Affichages: 119
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Cacher du texte selon choix de liste déroulante

Bonjour Nessie, le forum,

Le fichier Toto1.doc contient en plus du code deux autres éléments qui permettent de répondre à la problématique :
  • Des signets (Bookmark en Anglais, et dans le VBA) qui permettent d’identifier les paragraphes à masquer ;
  • Un style personnalisé Monstyle qui semble être une copie du style Normal avec la police "masquée".

Ensuite, voici ce que fait le code :
VB:
Private Sub CheckBox1_Click()
'désactive la protection si le document est protégé
If Not ActiveDocument.ProtectionType = wdNoProtection Then
    ActiveDocument.Unprotect
End If

'sélectionne le signet "para1"
Selection.GoTo What:=wdGoToBookmark, Name:="para1"

'applique le style "Normal" si la checkbox est validée
If CheckBox1.Value = True Then
    ActiveDocument.Bookmarks("para1").Range.Style = wdStyleNormal

'sinon, applique le style "Monstyle"
Else
    ActiveDocument.Bookmarks("para1").Range.Style = "Monstyle"
End If

'protège le document
ActiveDocument.Protect wdAllowOnlyFormFields
End Sub

Le code modifie donc le style de tout le signet, ce qui peut être embêtant si le signet en question fait référence à une zone contenant plusieurs styles.

Une autre solution serait de se passer du style Monstyle et de modifier directement la police du signet (la mettre à "masquée" ou non) avec ce code :
VB:
Private Sub CheckBox1_Click()
    If Not ActiveDocument.ProtectionType = wdNoProtection Then ActiveDocument.Unprotect
    ThisDocument.Bookmarks("para1").Range.Font.Hidden = Not CheckBox1.Value
    ActiveDocument.Protect wdAllowOnlyFormFields
End Sub

Appliqué à ton cas, tu devras donc créer dans ton document un (ou des ?) signet pour identifier la zone à masquer en fonction des valeurs saisies dans ton formulaire.

Ensuite, il existe plusieurs types de contrôles dans Word pour faire les formulaires. Tu as choisi les moins simple à utiliser en VBA (les contrôles de formulaire hérités).

Il vaudrait mieux (si possible) utiliser les contrôles ActiveX qui permettraient de repérer le changement de valeur de ta liste déroulante (un peu comme dans l’exemple Toto1.doc).

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 333
Membres
103 188
dernier inscrit
evebar