Cellule avec menu déroulant 2

Bonjour,

j'ai une question par rapport à ce code que vbMBHB m'a expliqué:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    ' si cellule vide alors on force un "Undo" de l'application
    If Target.Value = "" Then
        Application.Undo
        Exit Sub
    End If
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Dim Cel_Trouvée As Range, Plage_de_Recherche As Range, Référence As Integer
        Set Plage_de_Recherche = [Test]
        Set Cel_Trouvée = Plage_de_Recherche.Cells.Find(what:=Target.Value, LookAt:=xlWhole)
        Référence = Cel_Trouvée.Offset(, 1).Value
        Select Case Référence
            Case 1
                ActiveSheet.Rows("60:131").Hidden = True
                ActiveSheet.Rows("132:149").Hidden = False
            Case 2
                ActiveSheet.Rows("60:131").Hidden = False
                ActiveSheet.Rows("132:149").Hidden = True
            Case Else
                ActiveSheet.Rows("60:131").Hidden = False
                ActiveSheet.Rows("132:149").Hidden = False
        End Select
    End If
End Sub

si je veux faire la même vérification pour une autre cellule dans la même feuille, comment dois-je procéder?

merci de votre retour.

Bonjour,

il y a un truc qui me "chiffonne" sur le code :

    If Target.Value = "" Then
        Application.Undo
        Exit Sub
    End If

En fait ici, quelque soit la cellule qui "a changé", si le résultat de "change" est égal à rien "" alors on fait un UNDO....

Ne serait-ce pas la cellule A1 qui est surveillée ?

Du coup avec votre nouvelle question cela pourrait donner :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    ' si cellule vide alors on force un "Undo" de l'application
    If Not Intersect(Target, Range("A1;D5")) Is Nothing Then
        If Target.Value = "" Then
            Application.Undo
            Exit Sub
        End If
        Dim Cel_Trouvée As Range, Plage_de_Recherche As Range, Référence As Integer
        Set Plage_de_Recherche = [Test]
        Set Cel_Trouvée = Plage_de_Recherche.Cells.Find(what:=Target.Value, LookAt:=xlWhole)
        Référence = Cel_Trouvée.Offset(, 1).Value
        Select Case Référence
            Case 1
                ActiveSheet.Rows("60:131").Hidden = True
                ActiveSheet.Rows("132:149").Hidden = False
            Case 2
                ActiveSheet.Rows("60:131").Hidden = False
                ActiveSheet.Rows("132:149").Hidden = True
            Case Else
                ActiveSheet.Rows("60:131").Hidden = False
                ActiveSheet.Rows("132:149").Hidden = False
        End Select
    End If
End Sub

où D5 est une deuxième cellule "à surveiller"...

Reste à savoir si pour chaque cellule surveillée il faut faire le même code ou pas...

Sinon il faudra faire des "If" séparés avec un code différent en fonction des cellules...

@ bientôt

LouReeD

Bonjour,

il y a un truc qui me "chiffonne" sur le code :

    If Target.Value = "" Then
        Application.Undo
        Exit Sub
    End If

En fait ici, quelque soit la cellule qui "a changé", si le résultat de "change" est égal à rien "" alors on fait un UNDO....

Ne serait-ce pas la cellule A1 qui est surveillée ?

Du coup avec votre nouvelle question cela pourrait donner :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    ' si cellule vide alors on force un "Undo" de l'application
    If Not Intersect(Target, Range("A1;D5")) Is Nothing Then
        If Target.Value = "" Then
            Application.Undo
            Exit Sub
        End If
        Dim Cel_Trouvée As Range, Plage_de_Recherche As Range, Référence As Integer
        Set Plage_de_Recherche = [Test]
        Set Cel_Trouvée = Plage_de_Recherche.Cells.Find(what:=Target.Value, LookAt:=xlWhole)
        Référence = Cel_Trouvée.Offset(, 1).Value
        Select Case Référence
            Case 1
                ActiveSheet.Rows("60:131").Hidden = True
                ActiveSheet.Rows("132:149").Hidden = False
            Case 2
                ActiveSheet.Rows("60:131").Hidden = False
                ActiveSheet.Rows("132:149").Hidden = True
            Case Else
                ActiveSheet.Rows("60:131").Hidden = False
                ActiveSheet.Rows("132:149").Hidden = False
        End Select
    End If
End Sub

où D5 est une deuxième cellule "à surveiller"...

Reste à savoir si pour chaque cellule surveillée il faut faire le même code ou pas...

Sinon il faudra faire des "If" séparés avec un code différent en fonction des cellules...

@ bientôt

LouReeD

Merci de votre retour,

en effet au début c’était la cellule A1 qui fallait surveiller, on exécute ensuite le code.

mais j'ai besoin de surveiller une autre cellule en exécutant tout un autre code. Du coup je ne vois comment dois-je utiliser le If.

Merci de votre aide.

Bonsoir,

    If Not Intersect(Target, Range("A1")) Is Nothing Then
        ' le code à faire si A1 est modifié
    ElseIf Not Intersect(Target, Range("D5")) Is Nothing Then
        ' le code à faire si D5 est modifié
    Else
        ' le code à faire si ce n'est pas ces deux cellule, mais ceci est facultatif vous pouvez simplement mettre "EndIf"
    End If

@ bientôt

LouReeD

Bonsoir,

    If Not Intersect(Target, Range("A1")) Is Nothing Then
        ' le code à faire si A1 est modifié
    ElseIf Not Intersect(Target, Range("D5")) Is Nothing Then
        ' le code à faire si D5 est modifié
    Else
        ' le code à faire si ce n'est pas ces deux cellule, mais ceci est facultatif vous pouvez simplement mettre "EndIf"
    End If

@ bientôt

LouReeD

Bonjour et merci de votre retour, j'ai donc essayé ce que vous m'avez proposé mais cela ne marche pas, voici la deuxième partie du code:

      ElseIf Not Intersect(Target, Range("D1")) Is Nothing Then

        Set Plage_de_Recherche = [Année]

        Select Case Référence

        Case 1

                    ActiveSheet.Rows("57").Hidden = True

        Case 2
                    ActiveSheet.Rows("57").Hidden = False

        Case Else
                    ActiveSheet.Rows("57").Hidden = False

        End Select

      End If
      

je ne sais pas si j'ai raté quelque chose, merci de votre aide.

Bonsoir,

c'est moi qui ai raté quelque chose :

à priori Intersect ne supporte pas d'être après un "Else If"

Donc voici la structure du code, à vous de modifier les "MsgBox" par votre code :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        MsgBox ("Cellule A1 modifiée")
    End If
    If Not Intersect(Target, Range("H3")) Is Nothing Then
        MsgBox ("Cellule H3 modifiée")
    End If
End Sub

@ bientôt

LouReeD

Bonsoir,

c'est moi qui ai raté quelque chose :

à priori Intersect ne supporte pas d'être après un "Else If"

Donc voici la structure du code, à vous de modifier les "MsgBox" par votre code :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        MsgBox ("Cellule A1 modifiée")
    End If
    If Not Intersect(Target, Range("H3")) Is Nothing Then
        MsgBox ("Cellule H3 modifiée")
    End If
End Sub

@ bientôt

LouReeD

Bonjour, et merci de votre aide,

J'ai une autre question, comment dois-je procéder pour tester le contenu de deux cellules (ayant un menu déroulant) avant d’exécuter mes cas?

Merci de votre aide.

Bonjour,

voici une proposition :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        If Target.Value = "intitulé 1 menu 1" Then
            ' action à faire dans ce cas
        Else If Target.Value = "intitulé 2 menu 1" then
            ' action à faire dans ce deuxième cas
        Else
            ' action à faire dans tous les autres cas pour la cellule A1 surveillée
        End If
    End If
    If Not Intersect(Target, Range("H3")) Is Nothing Then
        If Target.Value = "intitulé 1 menu 2" Then
            ' action à faire dans ce cas
        Else If Target.Value = "intitulé 2 menu 2" then
            ' action à faire dans ce deuxième cas
        Else
            ' action à faire dans tous les autres cas pour la cellule H3 surveillée
        End If
    End If
End Sub

Une fois qu'on a détecté le changement de valeur sur une des cellules surveillées, alors on test cette valeur afin de "déclencher" le code VBA adéquate.

@ bientôt

LouReeD

Bonjour,

voici une proposition :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        If Target.Value = "intitulé 1 menu 1" Then
            ' action à faire dans ce cas
        Else If Target.Value = "intitulé 2 menu 1" then
            ' action à faire dans ce deuxième cas
        Else
            ' action à faire dans tous les autres cas pour la cellule A1 surveillée
        End If
    End If
    If Not Intersect(Target, Range("H3")) Is Nothing Then
        If Target.Value = "intitulé 1 menu 2" Then
            ' action à faire dans ce cas
        Else If Target.Value = "intitulé 2 menu 2" then
            ' action à faire dans ce deuxième cas
        Else
            ' action à faire dans tous les autres cas pour la cellule H3 surveillée
        End If
    End If
End Sub

Une fois qu'on a détecté le changement de valeur sur une des cellules surveillées, alors on test cette valeur afin de "déclencher" le code VBA adéquate.

@ bientôt

LouReeD

Merci de votre retour,

je crois que j'ai mal exprimé mon problème, le code qu'on doit exécuter dépend de la combinaison de deux cellules différentes, exemple:

Si A1 ="a" et A2 = "b" alors faire le code 1.

Si A1 = "b" et A2 = "c" alors faire le code 2.

etc...

Merci de votre aide

Bonsoir,

avec tous les morceaux de codes vous devriez vous en sortir...

Si cellule modifiée = A1 alors on teste value de Target et A2

Si cellule modifiée = A2 alors on teste value de Target et A1

non ?

Sinon voyez ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Modif_Menu As Boolean 'on définit une variable "intérupteur"
    If Not Intersect(Target, Range("A1")) Is Nothing Then ' si le menu cellule A1 est modifié
        Modif_Menu = True ' on passe la variable à VRAI
    End If
    If Not Intersect(Target, Range("H3")) Is Nothing Then ' si le menu cellule H3 est modifié
        Modif_Menu = True ' on passe la variable à VRAI
    End If
    If Modif_Menu = True Then ' si modif_menu est VRAI
        ' alors on fait les différents test de valeurs des différents menu pour exécuter le code correspondant
        If [A1] = "intitulé 1 menu 1" And [H3] = "intitulé 1 menu 2" Then
            ' action à faire dans ce cas
        ElseIf [A1] = "intitulé 2 menu 1" And [H3] = "intitulé 1 menu 2" Then
            ' action à faire dans ce deuxième cas
        ElseIf [A1] = "intitulé 1 menu 1" And [H3] = "intitulé 2 menu 2" Then
            ' action à faire dans ce troisième cas
        ElseIf [A1] = "intitulé 2 menu 1" And [H3] = "intitulé 2 menu 2" Then
            ' action à faire dans ce quatrième cas
        End If
    End If
End Sub

@ bientôt

LouReeD

merci de votre retour, je joint à ce message le fichier qui me pose problème.

je veut bloquer la cellule A1 si la la cellule A2 prend une certaine valeur et vice versa, sauf que si je saisi une valeur dans une autre cellule autre que A1 et A2, et bien ça les débloque, si A1 était bloquée, elle devient débloquée et vice versa, je ne sais pas comment m'y prendre.

Merci de votre aide.

10test-v2.xlsm (21.25 Ko)

Bonsoir,

si je comprend bien :

vous avez en A1 et A2 deux listes de choix;

votre feuille est protégée;

vous demandez à VBA d'exécuter un code en fonction de la paire valeur cellule A1 et valeur cellule A2;

ce que je ne comprend pas c'est le faite de supprimer la validation de données des cellules A1 et A2 dans votre code...

Pouvez vous faire une "listes" des étapes de ce que vous faites sur le fichier et de donner le résultat escompté étape par étape car je vous avoue être un peu perdu...

@ bientôt

LouReeD

Bonsoir,

si je comprend bien :

vous avez en A1 et A2 deux listes de choix;

votre feuille est protégée;

vous demandez à VBA d'exécuter un code en fonction de la paire valeur cellule A1 et valeur cellule A2;

ce que je ne comprend pas c'est le faite de supprimer la validation de données des cellules A1 et A2 dans votre code...

Pouvez vous faire une "listes" des étapes de ce que vous faites sur le fichier et de donner le résultat escompté étape par étape car je vous avoue être un peu perdu...

@ bientôt

LouReeD

Bonsoir,

merci de votre retour, ce que je veux c'est ceci:

Si A1(contenant un menu déroulant) prend la valeur V1 par exemple,

A2 (avec menu déroulant) sera bloquée, on ne pourra choisir aucune valeur, même en double cliquant dessus.

Le reste de le feuille restera accessible et la feuille ne sera pas protégée, car je souhaiterai la protéger, une fois fini avec un mot de passe.

merci de votre retour.

Ok , si A1 modifiée alors A2 "verrouillée",

mais alors pourquoi une liste en A2 ?

Et que se passe t il si A2 est modifiée ?

@ bientôt

LouReeD

Ok , si A1 modifiée alors A2 "verrouillée",

mais alors pourquoi une liste en A2 ?

Et que se passe t il si A2 est modifiée ?

@ bientôt

LouReeD

A2 ne sera accessible que dans le cas ou A1 prend une autre valeur, exemple:

Si A1 = non --> A2 verrouillée

Si A1 = oui --> A2 est accessible et pourrait choisir les valeurs dans son menu déroulant.

Merci de votre aide.

Bonsoir,

du coup là j'ai perdu le fil...

@ bientôt

LouReeD

Bonsoir,

du coup là j'ai perdu le fil...

@ bientôt

LouReeD

Bonjour,

que voulez vous comme renseignements complémentaires?

merci de votre retour.

Bonsoir,

qu'entendez vous par "bloquer" la cellule ?

De mon coté, j'ai fait un fichier où si A1 = NON alors A2 n'est plus modifiable mais la liste de choix reste visible.

Ensuite si A2 = 2016, alors on déverrouille A2, puis on bloque A1, mais du coup A1=NON et A2 se retrouve verrouillée, et paf le chien on ne peut plus rien modifier...

Donc l'idée c'est quoi ?

A1 = OUI => on met ce que l'on veut de la liste de choix de A2

A1 = NON => quelle est la valeur verrouillée de A2 ? Une valeur par défaut ou la valeur déjà inscrite?

Si A1 = OUI, alors on choisi 2016 en A2 => verrouillage de A1, question : quelle valeur reste en A1 ? une valeur par défaut ou le "OUI" ?

En gros il me faudrait le fonctionnement complet...

@ bientôt

LouReeD

Rechercher des sujets similaires à "menu deroulant"