VBA : selectionner des valeurs d'un champ au sein d'un TCD
Résolu/Fermé
A voir également:
- VBA : selectionner des valeurs d'un champ au sein d'un TCD
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Autofill vba ✓ - Forum Excel
2 réponses
Chiron_67
Messages postés
3
Date d'inscription
lundi 14 janvier 2013
Statut
Membre
Dernière intervention
14 janvier 2013
14 janv. 2013 à 16:13
14 janv. 2013 à 16:13
Bonjour,
avec un fichier joint comme exemple ce serait plus simple à vous répondre
Cdlt
avec un fichier joint comme exemple ce serait plus simple à vous répondre
Cdlt
Bonsoir,
J'ai, en fouillant le net et en bricolant trouver quelque chose qui fonctionne. Voici le code :
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") 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
En revanche j'ai du ecrire toutes les possibilité (les Postes : "120", "261" ...) sur une ligne à la suite car je n'arrivais pas à sauter une ligne (pour meilleure visibilité du code) sans avoir de message d'erreur. Peut etre auriez vous une solution pour couper la fonction ?
En vous remerciant
J'ai, en fouillant le net et en bricolant trouver quelque chose qui fonctionne. Voici le code :
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") 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
En revanche j'ai du ecrire toutes les possibilité (les Postes : "120", "261" ...) sur une ligne à la suite car je n'arrivais pas à sauter une ligne (pour meilleure visibilité du code) sans avoir de message d'erreur. Peut etre auriez vous une solution pour couper la fonction ?
En vous remerciant
14 janv. 2013 à 18:01
Tout d'abord, merci de m'avoir répondu.
Niveau code j'ai rien fait pour le moment et au niveau de la base je pense que ca ne servira pas vraiment. Je ne sais pas comment on place un fichier au niveau de la discussion mais je vais vous faire un extrait de TCD ci dessous :
code services Poste Compte Débit Crédit
12 200 606 505.8 544.6
12 300 606 588 0
11 350 606 0 1000
....
En gros voila comment est le TCD, le poste etant un champ du tableau croisé. Dans l'enregistreur de macro je peux dire de ne cocher par exemple que la valeur "200" du champ Poste. Sachant que la base de données va évoluer selon les écritures comptable passées. Donc avec le temps on aura la présence de certaines valeur de poste. Mais moi je sais deja celle que je veux voir aparaitre comme cochées. Je veux pouvoir dire à VBA de décocher toutes les valeurs et ne recocher que celles que je souhaite. Et ce sans me faire d'erreur si jamais une valeur de la liste n'etait pas encore dans la base dans les 2 premiers mois de l'annee par exemple.
Je pense qu'il faut utiliser quelque chose comme IF Then mais je ne sais pas comment lui dire : si dans le champ "Postes" les valeurs présentes sont "200;300;400; ...", à cocher et sinon décocher toutes les autres.
En espérant avoir été un peu plus clair et en vous remerciant d'avance.