Macro qui rend visible invisible

Fermé
nadin - 8 mai 2008 à 16:38
 Nessie - 2 déc. 2014 à 12:21
Bonjour à tous,
Dans un formulaire Word, j'ai une liste deroulante avec 3 choix (liste1). Si le choix 2 est sélectionné, je veux faire apparaitre un champ de type texte (texte1) pour pouvoir préciser une information.
Dans les autres cas (choix 1 ou choix 3) et également lors de l'ouverture du formulaire, le champ texte doit etre invisible.
Question : Comment écrire une macro qui réalise ceci automatiquement en fonction du choix réalisé dans la liste déroulante, c'est à dire recupéré l'information de sortie de la liste, l'analyser, et en déduire la commande de la visibilité du champ texte?

PS : je ne connais rien à la programmation ou au macro ! Merci de préciser si on doit déclarer des variables ou les initialiser ?

Merci de votre aide
A voir également:

4 réponses

Bonjour,
si ta liste déroulante s'appelle ListeDeroulante et ta zone de texte à faire apparaître/disparaître s'appelle ZoneTexte, affecte la procédure suivante à l'évènement Change de ListeDeroulante

Private Sub ListeDeroulante_Change()
if ListeDeroulante.value = "Choix2" then ZoneTexte.visible = true
End Sub

Pour que ZoneTexte soit invisible par défaut, affecte lui la propriété Visible = False
A+
0
Bonjour,

Es-tu sur que la propriété .Visible existe pour une Textbox en Word?
Moi, je ne l'ai pas trouvée, du moins pour VBA Word 2003.

Pour résoudre le problème d' Amnesic, il falloir ruser.

A+.
0
Bonjour,
et tout d'abord, merci pour cette réponse.
Cependant, je rappelle que je travaille avec word (word 2000) en mode formulaire, et la seule chose que je peu faire est d'affecter une macro à la liste déroulante. Cette macro sera executée après action sur le choix de la liste (en sortie).
Personnellement, exécuter une macro, je comprend mais je ne sais pas comment l'écrire. Affecter une procédure à l'événement change, je ne vois pas ce que ça veut dire ?
Un petit exemple avec un fichier me parlerai plus mais ce n'est pas forcément facile.
en tous les cas, merci de votre aide pour tenter de résoudre ce problème.

A+
0
Re,

Quand tu parles de mode formulaire, tu veux dire UserForm ou bien un document avec des zones de texte, car c'est un peu different.

Dans un UserForm tu peux effectivement donner la propriété Visible = false à une TetxBox, par contre dans le document les TextBox ou zones de texte ne peuvent pas être invisibles mais uniquement être désactivées.

Alors que veux tu faire exactement?

A+.
0
Re,

J'utilise une page Word normale pour créer un formulaire (afichage -barre d'outils-formulaire). Je passe en mode formulaire pour y intégrer des listes, des cases à coher, et des zones de textes (défini par word comme des champ).
Par exemple, après avoir mis une liste déroulante, clic droit dessus pour avoir le menu propriété.
La on rempli les lignes de la liste, et ensuite on peut y insérer une commande d'appel d'une macro.
Cette commande s'exécutera soit quand on clic pour choisir (mode entree) soit quand on relache aprés le choix (mode sortie). C'est cela que je souhaite utiliser.
En mode sortie, en fonction du choix de l'utilisateur, je veux modifier le champ suivant (le rendre visible) qui est une zone de texte.
En théorie, cela doit marcher, mais je ne sais pas écrire la macro !
Voila. Si cela permet de vous éclairer. Ma liste s'appelle LD1 et la zone texte Texte2
Voici le texte de la macro que j'ai essayé mais j'ai toujours une erreur

Sub Macro1()
'
If LD1.Value = "liste2" Then 'si le choix est liste2
Texte2.Visible = True 'on affiche la zone texte2
Else
Texte2.Visible = False
End If
End Sub

Merci et A+
0
Dans ma réponse (post1) je parlais d'un Userform créé dans l'éditeur VBA. Apparemment j'étais à côté de la plaque.
Nadin, ne tiens donc pas compte de mes indications.
Amigo, je te laisse répondre, je connais très mal les contrôles créés directement dans le document.
A.
0
Bonsoir,

Comme je le disais plus haut, une zone de texte insérée dans le document n'a pas la propriété Visible. C'est pourquoi ta macro génère une erreur.

Pour contourner le problème, il faut utiliser la propriété Enabled (Activé). Une zone de texte vide est déjà invisible (sauf si le fond est coloré). Si en plus cette zone de texte est désactivée (on ne peut pas la sélectionner), l'utilisateur ne verra rien.

Voici comment faire:

1) Ouvrir Visual Basic Editor (Alt F11)
Ouvrir un Module, s'il n'y a pas, en inserer un (menu Iserer -> Module)
Ouvrir le code du module et y coller cette macro:
Public Sub AutoOpen()
With ThisDocument.texte2
    .Value = ""
    .Enabled = False
End With
With ThisDocument.LD1
   .Clear
   .AddItem "liste1"
   .AddItem "liste2"
   .AddItem "liste3"
   .ListIndex = -1
End With
End Sub

Cette macro va s'exécuter automatiquement à chaque ouverture du document, elle initialise la zone de texte2 à blanc et la rend inactive. De plus elle initialise la liste déroulante LD1.

2) Toujours dans VB Editor, afficher le code de ThisDocument et y coller cette macro.
Private Sub LD1_Click()
If Me.LD1.ListIndex = 1 Then
With Me.Texte2
    .BorderStyle = fmBorderStyleSingle
    .Enabled = True
End With
Else
With Me.Texte2
   .BorderStyle = fmBorderStyleNone
   .Value = ""
   .Enabled = False
End With
End If
End Sub

Cette macro à pour effet d'activer Texte2 si la liste déroulante LD1 affiche le liste2. L'activation est signalée par une bordure autour de texte2. Si Un choix différent est fait, Texte2 est mis à blanc et la bordure est éffacée, l'utilisateur ne voit plus la zone de texte.

On pourrait aussi mémoriser dans une variable la valeur de Texte2 avant de le mettre à blanc, et réafficher ce texte si l'utilisateur choisit liste2. De même, on pourrait mettre un fond coloré pour signaler l'activation de texte2 au lieu de la bordure. J'attend tes remarques.

A+.
0
Bonjour,

Merci pour cette réponse précise et compléte.
Avec les macros fournies, j'arrive à réaliser ce que je voulais.
C'est un peu plus compliqué que ce que j'avais imaginé, mais maintenant mon formulaire est complet.

Encore merci et bon weekend.

Nadin
0
Bonjour Amigo ou tout autre,

En espérant que j'aurai une réponse...depuis 6 ans...
J'ai compris tout ce que tu as expliqué plus haut. Vraiment, on ne peut plus clair. Mais, ça ne marche pas chez moi.
Je précise que je ne parle pas d'userform mais de champs texte que j'ai insérés.
Dans mon doc (word version 2003), ma LD contient 2 choix. Et c'est seulement au choix 2 que je souhaite voir le champ texte apparaître et actif pour l'utilisateur de mon formulaire. J'ai copié-collé tes codes (en remplaçant les noms de signets comme il faut), j'ai activé "calcul à la sortie pour ma LD.

Je n'ai rien. En fait, ça bug au niveau du module "méthode ou données introuvable" qui concerne apparemment le nom de ma zone de texte ThisDocument.....

Pourrais-tu (pourriez-vous) m'aider ?
0