Changement de version Excel (2007) et Vba

FAB_PERRIN

XLDnaute Nouveau
Bonjour

J'avais créé des lignes de commandes VBA sur une version antérieure d'Excel.
Dans la nouvelle version 2007, le code n'est pas reconnu.
Il consistait à écrire une valeur (matricule) issue d'une autre feuille dans un filtre de rapport croisé dynamique (par une boucle), de calculer, plus de passer au matricule suivant.

Le code est le suivant :

'Fixer une variable permettant de lancer la boucle de sélection des matricules
Dim x As Byte


'Lancer la boucle de sélection sur le 1er matricule de la liste,le placer dans le TCD et actualiser

Sheets("Sélection").Select
For x = 2 To Sheets("Liste Impression").Range("D600").End(xlUp).Row
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Matricule").CurrentPage _
= Sheets("Liste Impression").Range("D" & x).Value
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh

Calculate


Merci de votre éclairage

Bien cdt

Fabrice
 
G

Guest

Guest
Re : Changement de version Excel (2007) et Vba

Bonjour,

Excel 2007 semble ne plus permettre les propriétés ou méthodes par défaut sur les objets donc pour PivotTables il faut explicitement préciser la méthode .Item

ActiveSheets.PivotTables.Item(NomDuTableauCroiséDynamique) etc...

A+
 

FAB_PERRIN

XLDnaute Nouveau
Re : Changement de version Excel (2007) et Vba

Merci de votre retour

J'ai modifié comme préconisé dans votre mail, mais compte-tenud e mon très faible niveau en VBA, je m'en remets à vous pour me dire pourquoi ça ne fonctionne tjs pas :


Sheets("Sélection").Select
For x = 2 To Sheets("Liste Impression").Range("D65536").End(xlUp).Row

ActiveSheets.PivotTables.Item("Tableau croisé dynamique2").PivotFields("Matricule").CurrentPage = Sheets("Liste Impression").Range("D" & x).Value
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh

Merci d'avance

fabrice
 
G

Guest

Guest
Re : Changement de version Excel (2007) et Vba

RE,

J'ai testé ceci qui fonctionne sur l'exemple donné. Attention ta source de currentPage est en colonne C de "Liste impression" et non en colonne D.

C'est la seule erreur que j'ai trouvée.

Par contre, tant que je n'ai pas changé la valeur une fois à la manuellement la valeur dans la feuille il refusait la modification par macro?????:rolleyes:
Code:
        Dim x As Byte
    Dim valeur As Variant
    Sheets("Sélection").Select
    For x = 2 To Sheets("Liste Impression").Range("C65536").End(xlUp).Row
        valeur = Sheets("Liste Impression").Range("C4").Value
         With Sheets("Sélection").PivotTables.Item("Tableau croisé dynamique2")
            .PivotFields.Item("Matricule").CurrentPage = valeur
            .PivotCache.Refresh
        End With
 
        Calculate
    Next x

A+
 
Dernière modification par un modérateur:

FAB_PERRIN

XLDnaute Nouveau
Re : Changement de version Excel (2007) et Vba

Merci de vos éclairages

En testant le code, je m'aperçois que seule la valeur de la cellule c4 vient alimenter le tableau croisé.
Je souhaite qu'il analyse les cellules C2, C3, C4 ... (jusqu'à X en fonction de la liste de selection)

J'ai modifié le code comme suit mais sans succès.

Peux-tu m'éclairer sur ce point ?

Merci d'avance

Fabrice

Dim x As Byte
Dim valeur As Variant
Sheets("Sélection").Select
For x = 2 To Sheets("Liste Impression").Range("C65536").End(xlUp).Row
valeur = Sheets("Liste Impression").Range("C" & x).Value
With Sheets("Sélection").PivotTables.Item("Tableau croisé dynamique2")
.PivotFields.Item("Matricule").CurrentPage = valeur
.PivotCache.Refresh
End With
Calculate
Next x
 
G

Guest

Guest
Re : Changement de version Excel (2007) et Vba

Bonjour,

Oui, j'avais fait des essais avec C4 seulement en commentant la boucle for, puis comme toi avec Cx. Et cela fonctionnait.

Cela ne fonctionne plus aujourd'hui. Mais après maints et maints essais j'ai trouvé le moyen de contourner le problème en changeant directement la valeur de la cellule B1 du tableau croisé dynamique dans la macro suivante. Cela fonctionne sans problème pour le moment.

Code:
Sub Edition_collective_PDF()
       Dim x As Byte
    Dim valeur As Variant
    Sheets("Sélection").Select
    With ActiveSheet    ' on travail sur la feuille active (Sélection)
        For x = 2 To Sheets("Liste Impression").Range("C65536").End(xlUp).Row
            valeur = Sheets("Liste Impression").Range("C" & x)
            With .PivotTables.Item("Tableau croisé dynamique2")
                .PivotFields.Item("Matricule").DataRange = valeur
                .PivotCache.Refresh
            End With
            .Calculate 'Ne recalculer que la feuille
        Next x
    End With

Après quelques essais s'ils sont concluant tu pourras remplacer cette macro par celle ci-dessous (plus efficiente)
Code:
Sub Edition_collective_PDF()
    Dim sh As Worksheet 'Variable qui référencera la feuille ('Liste Impression')
    Dim x As Byte
    Set sh = Sheets("Liste Impression")
    Sheets("Sélection").Select
    With ActiveSheet    ' on travail sur la feuille active
        For x = 2 To sh.Range("C65536").End(xlUp).Row
            With .PivotTables.Item("Tableau croisé dynamique2")
                .PivotFields.Item("Matricule").DataRange = sh.Range("C" & x)
                .PivotCache.Refresh
            End With
            Calculate
        Next x
    End With
End Sub


A+ (en croisant les doigts)
 
Dernière modification par un modérateur:

MJ13

XLDnaute Barbatruc
Re : Changement de version Excel (2007) et Vba

Bonjour Fab, Ges

Et bien, je remercie Ges (allias hasco :)) pour son code que j'ai bien aimé : concis et complexe à la fois.

J'ai donc fait cette macro sur XL2007 (je ne sais pas si cela fonctionne sous Xl2003 :() pour extraire automatiquement les pages d'un TCD.

Je me suis aidé du code de Ges mais aussi d'autres comme MichelXLD, Youki, Henry :eek:

Vous pouvez tester sur un autre TCD et me dire si cela fonctionne :confused:.

Et le fichier .bas à remplacer pour le faire sur un fichier externe.
 

Pièces jointes

  • TCD_Extrait_Pages.zip
    31.3 KB · Affichages: 57
  • M_TCD_Extrait_Pages_Fich_extOK.zip
    2 KB · Affichages: 41
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 310
Messages
2 087 128
Membres
103 479
dernier inscrit
Compta