Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/12/2011, 12h00   #1
Nouveau Membre du Club
 
Johan
Etudiant Miagiste en apprentissage (Master 2)
Inscription : avril 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Johan
Localisation : France

Informations professionnelles :
Activité : Etudiant Miagiste en apprentissage (Master 2)

Informations forums :
Inscription : avril 2011
Messages : 128
Points : 27
Points : 27
Par défaut TCD en vba

Bonjour,

Je suis en train d'implémenter une macro qui ouvre des fichiers selon un ID entré par l'utilisateur, et qui génère un fichier selon différents critères.
Dans la création du fichier, je dois créer un TCD dans un onglet, prenant en paramètre des données d'un autre onglet.

Le TCD se crée bien lorsque je traite qu'un seul fichier.
Mais dans un cas, je fais une boucle car plusieurs fichiers sont à traiter.
Dans ce cas, dès le premier fichier traité, message d'erreur :
"Erreur d'exécution '5' : Argument ou appel de procédure incorrect".
Blocage dès le début : " ActiveWorkbook.PivotCaches.Add"

Et quand je débugge la macro étape par étape, il bloque un peu plus loin dans le "Selection.Group", le groupement par date.

Voici le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Donnees_synthese!R10C1:R35C9").CreatePivotTable TableDestination:= _
        "[" & Nomfic & "]Synthèse!R1C1", TableName _
        :="Tableau croisé dynamique2", DefaultVersion:=xlPivotTableVersion10
 
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Date")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Type")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Devise")
        .Orientation = xlRowField
        .Position = 2
    End With
    Range("A2").Select
    Selection.Group Start:=True, End:=True, Periods:=Array(False, False, False, _
        False, True, False, True)
    ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique2").PivotFields("Reste dû"), _
        "Somme de Reste dû", xlSum
Est-ce possible que le code s'exécute trop vite dans une boucle ?
johan89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 18h31   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Tu donnes un nom explicite au TCD, du coup, quand tu essaies d'en faire un deuxième, ce n'est pas possible, car il ne peut pas y avoir deux TCD avec le même nom.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2011, 08h44   #3
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
Bonjour,
il faudrait incrementer le nom de la table
Code :
1
2
3
 
n = ActiveWorkbook.PivotCaches.Count + 1
.... TableName:="Tableau croisé dynamique" & cstr(n) ....
par exemple
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h46.


 
 
 
 
Partenaires

Hébergement Web