Microsoft 365 plusieurs conditions dans "for each"

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 !

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
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
 
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 🙂
 
- 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 Export données
Réponses
4
Affichages
498
Réponses
0
Affichages
537
Retour