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