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 24/11/2011, 15h11   #1
Invité de passage
 
Inscription : mars 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 7
Points : 0
Points : 0
Par défaut Compatibilité 2007 -> 2003

Bonjour,

J'ai créé une macro plutôt simple sous Excel 2007 pour la mettre à disposition de personnes qui utilisent Excel 2003.
Malheureusement, ils ont une erreur '438' (Propriété ou méthode non gérée par cet objet), et je n'ai pas accès à Excel 2003 pour voir d'où vient l'erreur...
Pouvez-vous m'aider trouver le soucis ?

Ma macro supprime les données existantes :
Code :
1
2
3
Sheets(1).Select
Cells.Select
Selection.Delete Shift:=xlUp
Puis dé-fusionne des cellules :
Code :
1
2
3
Sheets(2).Select
Range("A6:D6").Select
Selection.UnMerge
Elle cherche la fin du tableau de données :
Code :
1
2
3
4
5
Dim ligne_fin As Integer
ligne_fin = 26
While Cells(ligne_fin, 1).Value <> "Number"
    ligne_fin = ligne_fin + 1
Wend
Et crée un tableau pivot (macro enregistrée) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "Données!R25C1:R4008C8", Version:=xlPivotTableVersion10).CreatePivotTable _
    TableDestination:="Reporting!R3C1", TableName:="Tableau croisé dynamique1", _
    DefaultVersion:=xlPivotTableVersion10
Sheets("Reporting").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Number")
    .Orientation = xlRowField
    .Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
    "Signature")
    .Orientation = xlPageField
    .Position = 1
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Signature"). _
    CurrentPage = "(All)"
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Signature"). _
    EnableMultiplePageItems = True
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
    PivotTables("Tableau croisé dynamique1").PivotFields("Signature"), _
    "Nombre de Signature", xlCount
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
    "Actor role")
    .Orientation = xlColumnField
    .Position = 1
End With
 
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
    "Signature")
    .Orientation = xlPageField
    .Position = 1
End With
Enfin, elle sélectionne une cellule :
Je n'ai jamais fait de VBA sous Excel 2003, mais je ne pensais pas que c'était vraiment différent. Je suis bien curieux de savoir en quoi ca diffère...

Merci d'avance !
un_mec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h14   #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
Ils peuvent te dire sur quelle ligne ça plante ?

Je suis sous Excel 2003, je vais regarder. Microsoft aime bien rajouter des propriété ou des options dans les méthodes. J'ai eu pas mal de problème car ici, beaucoup de gens utilisent encore Excel 2000 !!!

Au niveau du PivotCaches, je n'ai pas de méthode Create mais une méthode Add avec les paramètres SourceType et SourceData.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h39   #3
Invité de passage
 
Inscription : mars 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 7
Points : 0
Points : 0
Je ne m'attendais pas à une réponse si rapide !

Je ne peux malheureusement pas dire où ca plante, parce que je n'ai pas accès à Excel 2003 (ca serait trop facile), et que les personnes qui utilisent cette macro ne comprennent rien du tout aux macros, alors demander qu'ils ouvrent le debuggeur est asez utopique.

Je vais cependant creuser la piste de la méthode Add de PivotCaches.
Merci pour ca ZebreLoup !
Je ne maitrise pas les objets PivotCaches, j'avais fait cette partie de macro directement avec l'enregistreur et un peu de nettoyage...

Ps : sur 2007, la méthode Add n'existe pas... Il me faudra donc faire deux macros, selon la version d'Excel utilisée.
un_mec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h43   #4
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
Si tu veux, dis moi ce que tu as comme colonnes et ce que tu veux faire comme TCD. Je peux le faire aussi à l'enregistreur de macro sous mon 2003 et t'envoyer ce que ça donne.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h56   #5
Invité de passage
 
Inscription : mars 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 7
Points : 0
Points : 0
Alors j'ai un tableau de la forme suivante (je te mets les vrais noms d'en-têtes pour que ca colle avec la macro que j'ai posté plus haut) :

Colonne A : Number -> en étiquette de ligne

Colonne C : Actor Role -> en etiquette de colonne
Colonne D : Signature -> en filtre du tableau, et le "Nombre de signatures" en valeurs du tableau pivot.

La macro enregistrée fait :
- Créer tableau pivot des colonnes A à H, lignes 25 à la variable ligne (disons 100), dans un onglet existant
- Mettre les étiquettes de ligne (Col A) et de colonne (Col C), puis les valeurs (Col D) et le filtre (encore Col D).

Merci encore pour ton aide !!
un_mec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 17h33   #6
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
Un code qui devrait passer sous 2003. En espérant qu'il passe aussi sous 2007...

Code :
1
2
3
4
5
6
7
8
9
10
Dim pvc As PivotCache
Dim pvt As PivotTable
Set pvc = ActiveWorkbook.PivotCaches.Add(xlDatabase, "Données!R25C1:R4008C8")
Set pvt = pvc.CreatePivotTable("Reporting!R3C1", "TCD2")
 
pvt.PivotFields("Number").Orientation = xlRowField
pvt.PivotFields("Actor Role").Orientation = xlColumnField
pvt.PivotFields("Signature").Orientation = xlPageField
pvt.PivotFields("Signature").Orientation = xlDataField
pvt.DataFields(1).Function = xlCount
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h35   #7
Invité de passage
 
Inscription : mars 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 7
Points : 0
Points : 0
Super ZebreLoup, je te remercie pour ton aide.
Avec quelques modifs légères, ma macro marche désormais sous Excel 2003 et 2007.
Parfait !!
un_mec est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h43.


 
 
 
 
Partenaires

Hébergement Web