Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Réponses
2
Affichages
281
Réponses
5
Affichages
213
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…