VBA : selectionner des valeurs d'un champ au sein d'un TCD

Résolu/Fermé
yanounou - 14 janv. 2013 à 15:24
 yanounou - 14 janv. 2013 à 19:12
Bonjour,

J'ai une macro qui travaille un extract comptable puis établit un tableau croisé dynamique. Il y a un champ appellé "Poste" qui correspond à des groupements de charges.

Ce que j'ai remarqué c'est que VBA accepte facilement de me faire telle ou telle selection. Mais sachant que les valeurs de ce champ "Poste" peuvent être présente ou non (selon les écritures comptables passées et cela le fichier au mois le mois), VBA me donne une erreur si la valeur n'est pas présente.

Concrètement je voudrais que parmis des valeurs X, VBA n'en coche au final que certaines. Mais qu'il n'y ait pas d'erreur (et que le code continue) si jamais une valeur ( donc un Poste "X") manque. Que cela fonctionne peu importe les valeurs présentes et qu'il ne coche que celles demandées (sachant qu'elles peuvent etre présentes ou non dans la base).

Je vous remercie pour votre aide. Je cherche en parrallèle.

Cordialement

Excel 2003
A voir également:

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
Bonjour,

avec un fichier joint comme exemple ce serait plus simple à vous répondre

Cdlt
0
Bonsoir,

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.
0
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
0