Microsoft 365 plusieurs conditions dans "for each"

Alain 7633

XLDnaute Nouveau
Bonjour,

je cherche à afficher dans un TCD un liste de 5 choix.
Je commence par donner un valeur à mes variables :
--------------
Dim monPivIt As Object, Mavariable
Mavariable1 = ThisWorkbook.Sheets("p11").Range("c4").Value
Mavariable2 = ThisWorkbook.Sheets("p11").Range("c5").Value
Mavariable3 = ThisWorkbook.Sheets("p11").Range("c6").Value
Mavariable4 = ThisWorkbook.Sheets("p11").Range("c7").Value
Mavariable5 = ThisWorkbook.Sheets("p11").Range("c8").Value
--------------

puis j'affiche tous les choix :
--------------
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("magasin")
For Each monPivIt In .PivotItems
monPivIt.Visible = True
Next
On Error Resume Next

--------------

jusque là tout va bien,
ensuite je veux tout décocher sauf mes 5 variables,
lorsque je ne mets qu'une variable ça fonctionne :
--------------
For Each monPivIt In .PivotItems
If monPivIt.Name <> Mavariable1 Then monPivIt.Visible = False
Next

--------------
lorsque j'essaie d'en mettre plusieurs, ça ne fonctionne plus,
j'ai essayé plusieurs syntaxes :
--------------
If (monPivIt.Name <> Mavariable1) Or (monPivIt.Name <> Mavariable2) Then monPivIt.Visible = False
If (monPivIt.Name <> Mavariable1 Or Mavariable2) Then monPivIt.Visible = False

--------------

Merci d'avance !
 
Solution
Bonjour.
Il faut des And, pas des Or. Réfléchissez: dès qu'il y a plus d'une condition l'expression est forcément toujours fausse puisque si l'une est vraie, forcément l'autre est fausse.
En plus ça peut s'écrire plus simplement dans une seule boucle :
VB:
mmonPivIt.Visible = monPivIt.Name = Mavariable1 Or monPivIt.Name = Mavariable2

Dranreb

XLDnaute Barbatruc
Bonjour.
Il faut des And, pas des Or. Réfléchissez: dès qu'il y a plus d'une condition l'expression est forcément toujours fausse puisque si l'une est vraie, forcément l'autre est fausse.
En plus ça peut s'écrire plus simplement dans une seule boucle :
VB:
mmonPivIt.Visible = monPivIt.Name = Mavariable1 Or monPivIt.Name = Mavariable2
 

Alain 7633

XLDnaute Nouveau
Bonjour @Dranreb,
Merci,
ça fonctionne ainsi :
-------------------
Sub test()
Dim monPivIt As Object, Mavariable
Mavariable1 = ThisWorkbook.Sheets("p11").Range("c4").Value
Mavariable2 = ThisWorkbook.Sheets("p11").Range("c5").Value
Mavariable3 = ThisWorkbook.Sheets("p11").Range("c6").Value
Mavariable4 = ThisWorkbook.Sheets("p11").Range("c7").Value
Mavariable5 = ThisWorkbook.Sheets("p11").Range("c8").Value
'Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("magasin")

For Each monPivIt In .PivotItems
monPivIt.Visible = True
Next
On Error Resume Next
For Each monPivIt In .PivotItems
If (monPivIt.Name <> Mavariable1) And (monPivIt.Name <> Mavariable2) And (monPivIt.Name <> Mavariable3) And (monPivIt.Name <> Mavariable4) And (monPivIt.Name <> Mavariable5) Then monPivIt.Visible = False
Next
End With
'Application.ScreenUpdating = True
End Sub
-------------------

Merci pour la proposition d'un seule boucle : ça fonctionne :)
 

Discussions similaires

Statistiques des forums

Discussions
314 708
Messages
2 112 101
Membres
111 417
dernier inscrit
LYTH