Afficher un userform selon des conditions spécifiques

Bonjour à tous

Je souhaite, lorsque l’on retrouve une condition en A13 :A27, qu’un userform s’affiche pour donner accès à d’autres formulaires. Dans mon exemple, il s’agit de Control-D. Donc, si je sélectionne Control-D dans la liste en A13, l’userform s’ouvre, et l’usager doit ouvrir un autre fichier pour compléter sa demande.

Le hic, c’est que si l’usager complète sa demande en ajoutant un autre service à la ligne A14 mais qui ne requiert pas un formulaire supplémentaire, l’useform des formulaires s’ouvre parce que Control-D est déjà inscrit en A13. Je souhaiterais que ce dernier ne s’ouvre pas à nouveau! Seulement quand la condition est respectée.

Comment compléter le code pour tenir compte de cette particularité?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   If Target.Address = "$A$2" Then
      Calendrier.Show
      Cancel = True
    End If

    If Not Application.Intersect(Target, Range("A13:A27")) Is Nothing Then
    Userform1.Show
    End If

        For i = 13 To 27

        If (Cells(i, "A")) = "Control-D" Then
        UserForm2.Show
        End If

        Next i
End Sub

merci

Bonsoir,

Suggestion :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$2" Then Calendrier.Show
    If Not Application.Intersect(Target, Range("A13:A27")) Is Nothing Then _
     Userform1.Show
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A13:A27")) Is Nothing _
     And Target.Count = 1 Then
        If Target.Value = "Control-D" Then UserForm2.Show
    End If
End Sub

Cordialement.

Bonjour MFerrand

malheureusement votre suggestion ne fonctionne pas.

le fait qu'il y ait 2 Private Sub, cela provoque une erreur de compilation, nom ambigu détecté!

Et si je ramène le tout sous un seul Private Sub, l'userform2 (choix de formulaires) ne s'affiche pas!

Merci quand même

Tu as certainement fait une fausse manoeuvre...

Bonjour MFerrand

Effectivement, j'ai dû mal intégrer votre solution.

Ça fonctionne parfaitement. Merci beaucoup.

Si je souhaite intégrer plusieurs conditions que me suggérez-vous?

Ai-je simplement besoin d'ajouter une ligne de code comme ceci:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A13:A27")) Is Nothing _
     And Target.Count = 1 Then
        If Target.Value = "Control-D" Then UserForm2.Show
        If Target.Value = "abc" Then UserForm2.Show
        If Target.Value = "def" Then UserForm2.Show
"
"
"
etc.
    End If
End Sub

Ou il y a une façon de simplifier?

merci encore

Oui, possible, puisqu'il de valeurs qui changentla même macro fera ce que tu lui demande dans chaque cas.

Tant qu'il s'agit d'ouvrir un Userform, pas de soin particulier, mais si tu as un commande visant à intervenir sur la feuille, il faut l'encadrer par 2 instructions : Application.EnableEvents = False (avant l'action) et True (après l'action) pour éviter que l'évènement ne soit rappelé en boucle.

Cordialement.

Bonjour

vous voulez dire comme ceci:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A13:A27")) Is Nothing _
     And Target.Count = 1 Then
        Application.EnableEvents = False
        If Target.Value = "Control-D" Then UserForm2.Show
        True
        Application.EnableEvents = False
        If Target.Value = "abc" Then UserForm2.Show
        True
        Application.EnableEvents = False
        If Target.Value = "def" Then UserForm2.Show
        True
"
"
"
etc.
    End If
End Sub

Non, comme cceci :

Application.EnableEvents = False 

[instructions modifiant des valeurs de cellules dans la feuille
 qui déclencheraient le même évènement]

Application.EnableEvents = True

Mais pas pour une instruction ouvrant un Userform, sans effet sur l'évènement Change de la feuille.

Cordialement.

Super, merci MFerrand!

Rechercher des sujets similaires à "afficher userform conditions specifiques"