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+.