Ajouter un second critère en VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

GuillaumA

XLDnaute Occasionnel
Bonjour à tous,
J'utilise cette macro afin de faire disparaître en feuil2 la ligne dans laquelle la valeur B s'affiche en colonne 15 (Q) lorsque je tape A dans la cellule M19 de la feuil1 et vis et versa.
Je voudrai rajouter le critère 0.
Ex: Lorsque j'affiche A en M19, la ligne de la feuil 2 dans laquelle B ou 0 s'affichent en colonne Q doit disparaître
Lorsque j'affiche B en M19, la ligne de la feuil 2 dans laquelle A ou 0 s'affichent en colonne Q doit disparaître

Comment rajouter "0" dans la fonction Var = ??

Private Sub Worksheet_Change(ByVal Target As Range) 'Modify list according to type (A, B)
If Intersect(Target, Range("M19")) Is Nothing Then Exit Sub
With Sheets("Feuil2")
.Rows.Hidden = False
Select Case Range("M19")
Case "A"
Var = "B"
Case "B"
Var = "A"
Case Else
Var = ""
End Select
For i = 5 To .Cells(Rows.Count, 15).End(xlUp).Row
.Rows(i).Hidden = .Cells(i, 15) = Var
Next i
End With
End Sub

Cordialement
Guillaume A.
 
Dernière édition:
Re : Ajouter un second critère en VBA

Bonjour GuillaumA,

Lorsque j'affiche A en M19, la ligne de la feuil 2 dans laquelle B ou 0 s'affichent en colonne Q doit disparaître
Lorsque j'affiche B en M19, la ligne de la feuil 2 dans laquelle A ou 0 s'affichent en colonne Q doit disparaître

Trop fort 😱
L'aspirine est offerte, j'espère 😉

Relis ces 2 phrases et dis-nous franchement si tu trouves ça compréhensible

Allez, un essai quand même :

Code:
For i = 5 To .Cells(Rows.Count, 15).End(xlUp).Row
.Rows(i).Hidden = (.Cells(i, 15) = Var or .Cells(i, 15) = 0)
Next i

Edit : Bonjour Pierrot 😉
 
Dernière édition:
Re : Ajouter un second critère en VBA

Bonsoir Guillaume,

pas tout compris, peut être ainsi :
Code:
Select Case Range("M19")
Case "A"[B][COLOR="Red"], 0[/COLOR][/B]
Var = "B"
Case "B"
Var = "A"
Case Else
Var = ""
End Select

bonne soirée
@+

Edition : bonsoir toto
 
Re : Ajouter un second critère en VBA

Oui je sais fin de journée oblige =)

J'ai essayé d'être le plus compréhensible possible, mais je pars tellement loin dans mes mixs de centaines de fonctions imbriqués les une dans les autres et toutes touchés par des macros que moi même je m'y perd...

Merci pour vos rep. Je test ça de suite et j'edit ce post si c'est Ok.

Cordialement,
Guillaume A.
 
Re : Ajouter un second critère en VBA

Et le plus près était.... toto !!!!
Bravo à ce dernier =). Désolé Pierrot, tu restes quand même un repère. Et puis j'avoue que la question était mal expliqué.
Merci à vous deux!

La solution
Private Sub Worksheet_Change(ByVal Target As Range) 'Modify list according to type (A, B)
If Intersect(Target, Range("M19")) Is Nothing Then Exit Sub
With Sheets("Feuil2")
.Rows.Hidden = False
Select Case Range("M19")
Case "A"
Var = "B"
Case "B"
Var = "A"
Case Else
Var = ""
End Select
For i = 5 To .Cells(Rows.Count, 15).End(xlUp).Row
.Rows(i).Hidden = (.Cells(i, 15) = Var Or .Cells(i, 15) = "0")
Next i
End With
End Sub

@++
Guillaume
 
Re : Ajouter un second critère en VBA

Re bonjour,
J'ai modifié ma macro pour qu'elle valide une seconde condition.

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("M19")) Is Nothing Then Exit Sub
With Sheets("Feuil2")
.Rows.Hidden = False
Select Case Range("M19")
Case "A"
Var = "B"
Case "B"
Var = "A"
End Select
For i = 5 To .Cells(Rows.Count, 15).End(xlUp).Row
.Rows(i).Hidden = (.Cells(i, 15) = Var Or .Cells(i, 15) = "0")
Next i
End With

'Ici manque une transition... Mais laquelle ? (petit a petit je m'améliore mais j'ai toujours des lacunes de base...)

If Intersect(Target, Range("M21")) Is Nothing Then Exit Sub
With Sheets("Feuil2")
.Rows.Hidden = False
Select Case Range("M21")
Case "F"
Var = ("G" Or "P" Or "I" Or "C")
Case "G"
Var = ("F" Or "P" Or "I" Or "C")
Case "P"
Var = ("G" Or "F" Or "I" Or "C")
Case "I"
Var = ("G" Or "P" Or "F" Or "C")
Case "C"
Var = ("G" Or "P" Or "I" Or "F")
End Select
For i = 5 To .Cells(Rows.Count, 14).End(xlUp).Row
.Rows(i).Hidden = (.Cells(i, 14) = Var Or .Cells(i, 14) = "0")
Next i
End With
End Sub

Mon problème est que la première partie s'active normalement, mais pas la seconde. Comment faire pour qu'elle s'active?

Bon réveil à tous!

Cordialement,
Guillaume A.
 
Re : Ajouter un second critère en VBA

🙂 Bonjour GuillaumA, Pierrot, tototiti2008,
Essai :
Code:
[COLOR=blue]Private Sub[/COLOR] Worksheet_Change([COLOR=blue]ByVal[/COLOR] Target [COLOR=blue]As[/COLOR] Range)
[COLOR=blue]If Not[/COLOR] Intersect(Target, Range("M19")) [COLOR=blue]Is Nothing Then[/COLOR]
    [COLOR=blue]With[/COLOR] Sheets("Feuil2")
        .Rows.Hidden = [COLOR=blue]False[/COLOR]
        [COLOR=blue]Select Case[/COLOR] Range("M19")
            [COLOR=blue]Case[/COLOR] "A"
                Var = "B"
            [COLOR=blue]Case[/COLOR] "B"
                Var = "A"
        [COLOR=blue]End Select[/COLOR]
        [COLOR=blue]For[/COLOR] i = 5 [COLOR=blue]To[/COLOR] .Cells(Rows.Count, 15).End(xlUp).Row
            .Rows(i).Hidden = (.Cells(i, 15) = Var [COLOR=blue]Or[/COLOR] .Cells(i, 15) = "0")
        [COLOR=blue]Next[/COLOR] i
    [COLOR=blue]End With[/COLOR]
[COLOR=blue]End If[/COLOR]
[COLOR=blue]If Not[/COLOR] Intersect(Target, Range("M21")) [COLOR=blue]Is Nothing Then[/COLOR]
    [COLOR=blue]With[/COLOR] Sheets("Feuil2")
        .Rows.Hidden = [COLOR=blue]False[/COLOR]
        [COLOR=blue]Select Case[/COLOR] Range("M21")
            [COLOR=blue]Case[/COLOR] "F"
                Var = ("G" [COLOR=blue]Or[/COLOR] "P" [COLOR=blue]Or[/COLOR] "I" [COLOR=blue]Or[/COLOR] "C")
            [COLOR=blue]Case[/COLOR] "G"
                Var = ("F" [COLOR=blue]Or[/COLOR] "P" [COLOR=blue]Or[/COLOR] "I" [COLOR=blue]Or[/COLOR] "C")
            [COLOR=blue]Case[/COLOR] "P"
                Var = ("G" [COLOR=blue]Or[/COLOR] "F" [COLOR=blue]Or[/COLOR] "I" [COLOR=blue]Or[/COLOR] "C")
            [COLOR=blue]Case[/COLOR] "I"
                Var = ("G" [COLOR=blue]Or[/COLOR] "P" [COLOR=blue]Or[/COLOR] "F" [COLOR=blue]Or[/COLOR] "C")
            [COLOR=blue]Case[/COLOR] "C"
                Var = ("G" [COLOR=blue]Or[/COLOR] "P" [COLOR=blue]Or[/COLOR] "I" [COLOR=blue]Or[/COLOR] "F")
        [COLOR=blue]End Select[/COLOR]
        [COLOR=blue]For[/COLOR] i = 5 [COLOR=blue]To[/COLOR] .Cells(Rows.Count, 14).End(xlUp).Row
            .Rows(i).Hidden = (.Cells(i, 14) = Var [COLOR=blue]Or[/COLOR] .Cells(i, 14) = "0")
        [COLOR=blue]Next[/COLOR] i
    [COLOR=blue]End With[/COLOR]
[COLOR=blue]End If[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Cordialement
 
Re : Ajouter un second critère en VBA

Re
Il doit te manquer un End With.
Le vrai problème est dans le econde partie de ta macro.
On ne peut pas déclarer un variable avec
Code:
Var = ("G" Or "P" Or "I" Or "C")
Que veux tu faire exactement ?
Cordialement
 
Re : Ajouter un second critère en VBA

Re,

Re
Il doit te manquer un End With.
Le vrai problème est dans le econde partie de ta macro.
On ne peut pas déclarer un variable avec
Code:
Var = ("G" Or "P" Or "I" Or "C")
Que veux tu faire exactement ?
Cordialement

Je veux pour
Case "F"
Var = ("G" Or "P" Or "I" Or "C")
Que lorsque je valide F dans la case M21, les lignes de la colonne 14 avec les valeur G, P, I et C disparaissent.
Je sais que cela marche lorsque Var = une seule condition (ex: "G") mais je ne sais pas si cela marche avec plusieurs conditions.
J'essaie de faire comme cela pour réduire au mieux la taille de la macro.
Existe t'il une solution?

PS: J'ai tous mes End With (tout du moins à mes yeux)
 
Dernière édition:
Re : Ajouter un second critère en VBA

Re
Essai ceci:
Code:
[COLOR=blue]Private Sub[/COLOR] Worksheet_Change([COLOR=blue]ByVal[/COLOR] Target [COLOR=blue]As[/COLOR] Range)
[COLOR=blue]If Not[/COLOR] Intersect(Target, Range("M19")) [COLOR=blue]Is Nothing Then[/COLOR]
    [COLOR=blue]With[/COLOR] Sheets("Feuil2")
        .Rows.Hidden = [COLOR=blue]False[/COLOR]
        [COLOR=blue]Select Case[/COLOR] Range("M19")
            [COLOR=blue]Case[/COLOR] "A"
                Var = "B"
            [COLOR=blue]Case[/COLOR] "B"
                Var = "A"
        [COLOR=blue]End Select[/COLOR]
        [COLOR=blue]For[/COLOR] i = 5 [COLOR=blue]To[/COLOR] .Cells(Rows.Count, 15).End(xlUp).Row
            .Rows(i).Hidden = (.Cells(i, 15) = Var [COLOR=blue]Or[/COLOR] .Cells(i, 15) = "0")
        [COLOR=blue]Next[/COLOR] i
    [COLOR=blue]End With[/COLOR]
[COLOR=blue]End If[/COLOR]
[COLOR=blue]If Not[/COLOR] Intersect(Target, Range("M21")) [COLOR=blue]Is Nothing Then[/COLOR]
    [COLOR=blue]With[/COLOR] Sheets("Feuil2")
        .Rows.Hidden = [COLOR=blue]False[/COLOR]
        [COLOR=blue]Select Case[/COLOR] Range("M21")
            [COLOR=blue]Case[/COLOR] "F"
               Var = "G,P,I,C,0,"
            [COLOR=blue]Case[/COLOR] "G"
                Var = "F,P,I,C,0,"
            [COLOR=blue]Case[/COLOR] "P"
                Var = "G,F,I,C,0,"
            [COLOR=blue]Case[/COLOR] "I"
                Var = "G,P,F,C,0,"
            [COLOR=blue]Case[/COLOR] "C"
                Var = "G,P,I,F,0,"
        [COLOR=blue]End Select[/COLOR]
        [COLOR=blue]For[/COLOR] i = 5 [COLOR=blue]To[/COLOR] .Cells(Rows.Count, 14).End(xlUp).Row
            [COLOR=blue]If[/COLOR] InStr(Var, .Cells(i, 14) & ",") <> 0 [COLOR=blue]And[/COLOR] .Cells(i, 14) <> "" [COLOR=blue]Then[/COLOR]
                .Rows(i).Hidden = [COLOR=blue]True[/COLOR]
            [COLOR=blue]End If[/COLOR]
        [COLOR=blue]Next[/COLOR] i
    [COLOR=blue]End With[/COLOR]
[COLOR=blue]End If[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Cordialement
 
Re : Ajouter un second critère en VBA

Re Efgé,

J'avais oublié un End If.
Besoin de manger et tout de suite les choses sont plus claires! 🙂
Ta formulation marche parfaitement.

Un énorme merci à toi!

Ci-joint ton classeur avec un peu plus de lisibilité et une minuscule correction dans le code (tu avais oublié une virgule après le premier 0), histoire de faire partager les bonnes choses.

@++
Guillaume A.
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
587
Retour