Re: Optimiser mes macros en VBA
#11
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 06-09-2010 22h44
Bonsoir zorbrax,

Tu as peut-être fait une mauvaise manip, mais de loin comme ça on ne peut pas savoir. Du coup, j'ai tenté de reconstituer un TCD à partir de ton fichier Excel et de ton Doc Word avec une zone nommée.

Tu la trouveras dans le fichier joint, elle s'appelle ZoneTCD, et la formule qui la calcule est (n'oublie pas les signes $):
=DECALER(Feuil1!$E$1;;;NBVAL(Feuil1!$E:$E);66)

Ensuite j'ai créé un TCD dans l'onglet TCD1 qui je l'espère ressemble à peu près aux tiens, et j'ai indiqué cette zone dans la source de données, comme ceci:
 



Ensuite, j'ai mis 2 boutons dans l'onglet Menu, un PACA et un Rhône Alpes, qui dirigent tous deux vers l'onglet TCD1, mais modifient le filtre de la région, en utilisant cette macro simple par exemple pour le bouton PACA:

Sub PACA()

    Sheets("TCD1").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Régions"). _
        CurrentPage = "Région PACA"
   
End Sub
Cette façon de faire permet de n'avoir qu'un seul TCD au lieu de 9 (reste à voir ceci dit si cela correspond à l'utilisation de ton fichier ou pas ...)

Pour continuer, tu verras que j'ai créé une autre zone nommée dynamique, NumEntrepot:
=DECALER(Correspondances!$K$2;;;NBVAL(Correspondances!$K:$K)-1;)

 J'utilise cette zone dans les formules de la colonne M de l'onglet Feuil1 afin de ne pas avoir à utiliser l'itégralité des colonnes K à M sur 65000 lignes:

=DECALER(Correspondances!$K$1;EQUIV(L2;NumEntrepot;0);2;;)

Voilà zorbrax, j'espère que ces éléments pourront t'aider, si non dis nous ...

Bonne soirée et à bientôt,

Mth



Pièce jointe:
zip BDD.zip   [ Taille: 34.26 Ko - Téléchargements: 467 ]
Edité par Mth le 07/09/2010 00:19:05
Hors Ligne
Rapport   Haut 

Re: Optimiser mes macros en VBA
#12
Régulier XLPages

Inscription: 30/08/2010

Messages: 53

Système d'exploitation:
PC - MAC
Version Excel utilisée:
Excel 2003.2007.2010
Posté le : 07-09-2010 20h08

Bonsoir,

 

Je suis époustouflé par cette démonstration, et sincèrement touché de ce que vous me restituez.

Je vois que j’ai pas mal à apprendre, ne serait-ce pour comprendre dans ses moindres détails la construction et l’agencement des formules. Je vais m’y atteler de pied ferme.

Je n’ose même pas parler des macros qui à la lecture paraissent si simples !

Je vais dons me servir de cet exemple pour commencer à construire mon tableau.

Il ne restera plus qu’à revenir vers vous pour les graphiques…. Et je pense, bien avant ! Pour la construction.

Je suis encore une fois agréablement surpris de votre gentillesse vous êtes tout simplement géniaux.

Bien cordialement

Hors Ligne
Rapport   Haut 

Re: Optimiser mes macros en VBA
#13
Régulier XLPages

Inscription: 30/08/2010

Messages: 53

Système d'exploitation:
PC - MAC
Version Excel utilisée:
Excel 2003.2007.2010
Posté le : 08-09-2010 20h42

Bonsoir,

J’ai donc réussi à créer des TCD avec des plages dynamiques, avec votre aide, bien entendu !!
En y ajoutant un graphique qui se met à jour en suivant les données sur TCD mon fichier fait 26Mo au lieu de 216 Mo... ça c'est une cure !

Maintenant je voudrai savoir s’il est possible de filtrer à l’aide de macros sur le critère DBL => OK et sur « Après cette intervention votre image du SAV  est elle » et un autre critère différent de ce dernier ?

J’ai tenté de tripoter la macro permettant le filtre sur la région de votre exemple, mais je sèche !

Voir exemple joint…


Pièce jointe:
zip help2.zip   [ Taille: 5.38 Ko - Téléchargements: 448 ]
Hors Ligne
Rapport   Haut 

Re: Optimiser mes macros en VBA
#14
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 08-09-2010 23h24
Bonsoir zorbrax,

Belle perte de poids en effet :) Ceci dit il en reste, accessoirement, tu as une image dans ton onglet "Menu", vois combien elle pèse, sait-on jamais.

Pour le critère DBL2, tu peux ajouter une autre ligne de code, par exemple:
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("DBL2"). _
        CurrentPage = "OK"

En fait je ne sais pas si j'ai bien compris ta question, mais tu veux pouvoir choisir à la fois la région (qui est en filtre) et la question (qui est en étiquette de colonne dans le TCD)?
Si c'est ça, je te joins un fichier différent, j'ai éliminé l'onglet "Menu", et j'ai intégré dans l'onglet TCD deux listes déroulantes, une pour choisir la région, l'autre pour choisir la question.
En suite on clique sur le bouton et le TCD s'affiche avec les paramètres demandés.

Pour les listes déroulantes, tu peux les voir dans le menu "Données" / "Validation" (j'ai placé la liste des régions et des questions dans l'onglet "Correspondance")

Pour le TCD; je ne suis pas calée en VBA mais avec l'enregistreur de macros et quelques arrangements quand même, voici le code que tu pourras tester dans le fichier (les commentaires sont en vert):
Sub Affiche()

'Pour bloquer la mise à jour de l'affichage
' A remettre absolument en fin de macro
Application.ScreenUpdating = False

'Définition des variables
' VQuest pour la question choisie
'VOldQuest pour l'ancienne question
'VRegion pour la région choisie
Dim VQuest As String, VOldQuest As String, VRegion As String

'Les variables prennent les valeurs de l'onglet TCD1
' en cellules C2 C3 et C14
VRegion = Sheets("TCD1").Range("C2")
VOldQuest = Sheets("TCD1").Range("C14")
VQuest = Sheets("TCD1").Range("C3")

'Une série d'instructions (on peut en mettre une seule) va être exécutée sur le Tableau croisé dynamique1
'instructions placées entre le WITH et le End WITH

'Première instruction: Le champ "Régions" prend la valeur de la variable VRegion
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
         .PivotFields("Régions").CurrentPage = VRegion
   
'Si on clique sur le bouton sans changer la question
'on saute le traitement, si non on l'exécute
    If VQuest <> VOldQuest Then
        'Si la question n'est pas vide (si non on saute le traitement)
        ' on place le champ VQuest dans le TCD
        'code obtenu avec l'enregistreur de macros
        If VQuest <> "" Then
            With .PivotFields(VQuest)
                .Orientation = xlColumnField
                .Position = 1
            End With
         End If
         'Si l'ancienne question n'est pas vide, on retire le champ VOldQuest du TCD
         If VOldQuest <> "" Then
            With .PivotFields(VOldQuest)
                .Orientation = xlHidden
            End With
         End If
    End If
End With
   
' Pour obliger la cellule C14 à passer à la ligne
'si non se perd à la mise à jour du TCD
Range("C14").WrapText = True

'Rétablit la mise à jour de l'affichage
Application.ScreenUpdating = True
   
   
End Sub
(testé sur 2007, je n'ai pas la possibilité de vérifier sur les autres versions)

Voilà, je te laisse regarder si cela peut te convenir.

Très bonne soirée et à bientôt,

Mth

Pièce jointe:
zip BDD2.zip   [ Taille: 34.27 Ko - Téléchargements: 546 ]
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes