VBA obtenir une action si condition fausse IF Else
Résolu/Fermé
A voir également:
- VBA obtenir une action si condition fausse IF Else
- Action - Guide
- Excel cellule couleur si condition texte - Guide
- Télécharger film d'action gratuitement et rapidement - Télécharger - TV & Vidéo
- Action fans - Accueil - Guide arnaque
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
3 réponses
via55
Messages postés
14509
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 janvier 2025
2 739
22 janv. 2013 à 23:27
22 janv. 2013 à 23:27
Bonsoir,
Il me semble que l'inverse serait :
If (pt.Name <>"120") And (pt.Name <>"261") And (pt.Name <>"300") And(pt.Name <> "301") And (pt.Name <>"302") And (pt.Name <>"311") And (pt.Name <>"321") And (pt.Name <>"322") Then
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Poste").PivotItems(pt.Name).Visible = True
qui ne devrait faire l'action que pour les données autres que 120, 261 etc..
A essayer et me dire si c'est bon
Il me semble que l'inverse serait :
If (pt.Name <>"120") And (pt.Name <>"261") And (pt.Name <>"300") And(pt.Name <> "301") And (pt.Name <>"302") And (pt.Name <>"311") And (pt.Name <>"321") And (pt.Name <>"322") Then
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Poste").PivotItems(pt.Name).Visible = True
qui ne devrait faire l'action que pour les données autres que 120, 261 etc..
A essayer et me dire si c'est bon
Bonjour,
Tout d'abord merci pour votre réponse. Votre methode est bien trouvée. Elle devrait permettre de réaliser l'action voulu sans toucher au sens TRUE/FALSE de la fonction.
Malheureusement, vba persiste à ne pas faire l'action (les valeurs choisies ne sont pas décocher au TCD) tout en affichant aucune erreur dans l'execution de la macro.
Je vous mets le bout de code qui correspond à ce que j'ai fait. L'action "inverse" recherché est à appliquer sur le champs "CGR A".
En vous remerciant.
Dim pt As PivotItem
Dim AB As PivotItem
For Each pt In ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Poste").PivotItems
If (pt.Name = "120") Or (pt.Name = "261") Or (pt.Name = "300") Or (pt.Name = "301") Or (pt.Name = "302") Or (pt.Name = "311") Or (pt.Name = "321") Or (pt.Name = "322") Or (pt.Name = "330") Or (pt.Name = "331") Or (pt.Name = "332") Or (pt.Name = "336") Or (pt.Name = "339") Or (pt.Name = "340") Or (pt.Name = "341") Or (pt.Name = "342") Or (pt.Name = "343") Or (pt.Name = "351") Or (pt.Name = "354") Or (pt.Name = "356") Or (pt.Name = "357") Or (pt.Name = "358") Or (pt.Name = "502") Or (pt.Name = "600") Or (pt.Name = "603") Or (pt.Name = "604") Or (pt.Name = "300") Or (pt.Name = "140") Then
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Poste").PivotItems(pt.Name).Visible = True
End With
Else:
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Poste")
.PivotItems(pt.Name).Visible = False
End With
End If
Next pt
For Each AB In ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("CGR A").PivotItems
If (AB.Name <> "92110002") Or (AB.Name <> "92031300") Or (AB.Name <> "92212030") Or (AB.Name <> "92030900") Or (AB.Name <> "92070000") Or (AB.Name <> "92211011") Or (AB.Name <> "92020008") Then
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"CGR A").PivotItems(AB.Name).Visible = True
End With
Else:
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"CGR A")
.PivotItems(AB.Name).Visible = False
End With
End If
Next AB
PS : J'ai testé egalement en retirant la partie Else pour le champ CGR A et ca donne le meme resultat.
Tout d'abord merci pour votre réponse. Votre methode est bien trouvée. Elle devrait permettre de réaliser l'action voulu sans toucher au sens TRUE/FALSE de la fonction.
Malheureusement, vba persiste à ne pas faire l'action (les valeurs choisies ne sont pas décocher au TCD) tout en affichant aucune erreur dans l'execution de la macro.
Je vous mets le bout de code qui correspond à ce que j'ai fait. L'action "inverse" recherché est à appliquer sur le champs "CGR A".
En vous remerciant.
Dim pt As PivotItem
Dim AB As PivotItem
For Each pt In ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Poste").PivotItems
If (pt.Name = "120") Or (pt.Name = "261") Or (pt.Name = "300") Or (pt.Name = "301") Or (pt.Name = "302") Or (pt.Name = "311") Or (pt.Name = "321") Or (pt.Name = "322") Or (pt.Name = "330") Or (pt.Name = "331") Or (pt.Name = "332") Or (pt.Name = "336") Or (pt.Name = "339") Or (pt.Name = "340") Or (pt.Name = "341") Or (pt.Name = "342") Or (pt.Name = "343") Or (pt.Name = "351") Or (pt.Name = "354") Or (pt.Name = "356") Or (pt.Name = "357") Or (pt.Name = "358") Or (pt.Name = "502") Or (pt.Name = "600") Or (pt.Name = "603") Or (pt.Name = "604") Or (pt.Name = "300") Or (pt.Name = "140") Then
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Poste").PivotItems(pt.Name).Visible = True
End With
Else:
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Poste")
.PivotItems(pt.Name).Visible = False
End With
End If
Next pt
For Each AB In ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("CGR A").PivotItems
If (AB.Name <> "92110002") Or (AB.Name <> "92031300") Or (AB.Name <> "92212030") Or (AB.Name <> "92030900") Or (AB.Name <> "92070000") Or (AB.Name <> "92211011") Or (AB.Name <> "92020008") Then
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"CGR A").PivotItems(AB.Name).Visible = True
End With
Else:
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"CGR A")
.PivotItems(AB.Name).Visible = False
End With
End If
Next AB
PS : J'ai testé egalement en retirant la partie Else pour le champ CGR A et ca donne le meme resultat.
via55
Messages postés
14509
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 janvier 2025
2 739
23 janv. 2013 à 11:56
23 janv. 2013 à 11:56
Bonjour,
Avez-vous essayé avec des AND comme je l'avais indiqué dans mon premier message ?
Avez-vous essayé avec des AND comme je l'avais indiqué dans mon premier message ?
Toutes mes excuses.
J'ai pas vu les "And" tellement j'etais obsédé par les "><". Cela marche parfaitement. merci beuacoup. Je débute sur VBA j'ai acheté un livre pour m'y former. une derniere chose : pourriez vous me dire pourquoi cela marche avec le "and" plutot que le "Or"?. Au depart j'avais mis "Or" car je voulais pas que VBA crois qu'il faille que toutes les valeurs soit présentes obligatoirement.
Merci beaucoup
J'ai pas vu les "And" tellement j'etais obsédé par les "><". Cela marche parfaitement. merci beuacoup. Je débute sur VBA j'ai acheté un livre pour m'y former. une derniere chose : pourriez vous me dire pourquoi cela marche avec le "and" plutot que le "Or"?. Au depart j'avais mis "Or" car je voulais pas que VBA crois qu'il faille que toutes les valeurs soit présentes obligatoirement.
Merci beaucoup
via55
Messages postés
14509
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 janvier 2025
2 739
23 janv. 2013 à 21:46
23 janv. 2013 à 21:46
Au départ tu avais bien raison de mettre OR dans le sens ou tu voulais que la condition s'effectue :
SI A=x OU A=y ALORS action
action s'effectuant pour x comme pour y
Comme tu voulais que la condition s'exécute à l'envers il faut donc prendre le contraire :
= devient <> et OU devient ET, c'est la logique mathématique !
Bonne lecture et bonne pratique
C'est en forgeant qu'on devient forgeron !
SI A=x OU A=y ALORS action
action s'effectuant pour x comme pour y
Comme tu voulais que la condition s'exécute à l'envers il faut donc prendre le contraire :
= devient <> et OU devient ET, c'est la logique mathématique !
Bonne lecture et bonne pratique
C'est en forgeant qu'on devient forgeron !
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
23 janv. 2013 à 11:23
23 janv. 2013 à 11:23
Bonjour,
92110002 est-il réellement une chaine ?
Si nombre : <>92110002
Et sans fichier c'est discuter dans le vide...
eric
92110002 est-il réellement une chaine ?
Si nombre : <>92110002
Et sans fichier c'est discuter dans le vide...
eric