Bonjour je souhaite créer un TCD via une macros dont la longueur est inconnu
Je m'y connais pas niveau macros
Bonjour je souhaite créer un TCD via une macros dont la longueur est inconnu
Je m'y connais pas niveau macros
Salut.
Il est en général beaucoup plus simple de créer le TCD en Excel, puis de l'actualiser et/ou le manipuler par macro. Si en plus tu n'y connais rien en VBA...
J'ai rarementJe n'ai jamais eu besoin de créer un TCD par macros, en plus de vingt ans de travail professionnel avec Excel
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Bonjour Jmila et Pierre,
Oui je sui d'acore, j'ai quand même développé une classe pour les les novices du forum!
Nous arrivons à la saison du TDC!
Il suffit de faire un click droit sur mon module de classe el le faire glisser sur le projet de ton fichier Excel!
Ensuite il faut adapter la sub test!
http://www.developpez.net/forums/d14...t/#post7769955
Bonjour
Je comprends que ce n'est pas compliqué mais je le fais tous les jours donc c'est pour moi répétitif alors quand j'ai vu qu'on pouvais faire des macros du coup je me suis dis pourquoi pas ....
Merci pour le lien
Mais j'y comprend rien du tout dsl
Mon fichier est variable tous les jours c'est pour ça que je bloque
J'ai excel 2010
Je l'ai fait avec l'enregistreur mais ça ne fonctionne pas pour tous les fichers ....
Merci pour votre réponse
Bonjour
Comme Pierre je pense que c'est plus un problème de méthodologie de traitement des données et que le VBA n'est peut-être voir sûrement pas nécessaire.
"Mon fichier est variable tous les jours c'est pour ça que je bloque" ne suffit pas à comprendre l'ensemble de ta problématique et te donner des pistes.
Le module proposé par rdurupt (Apparté pour rdurupt toujours à ta dispo pour peaufiner ) te fournit tout prémâché : il y a juste à adapter...
Donc commence par bien exposer ton contexte exact sinon on ne peut guère t'aider davantage.
Chris
PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
----------------------------------------------------------------------------------------------
En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...
Ok
Merci
Je vais abandonner la macros
Salut
Bonjour tous et bonjour 78chris,
Oui je n'ai pas oublié, mais je traverses une période over!
J'ai même pas trouvé le temps de rédiger mon poste mais je comte toujours sur toi.
Il faut que j'affute mon crayon et je m'y colle! Promis.
Comme Chris, je ne comprends pas bien ton problème, en fait.
Avec les versions XL depuis la 2007, planter le décor d'un TCD se fait en deux clics sur base d'un tableau de données. Placer les champs te prends le temps de quelques glisser-déplacer... Je suppose que chaque jour, tes données sont différentes en nombre de lignes, mais que les colonnes sont identiques. Dès lors, il suffit de mettre ton tcd à jour (clic droit>Actualiser). Je ne vois pas en quoi cela nécessite des macros.
Au pire, on peut automatiser la mise à jour par une ligne de code dans l'événement Activate de la feuille concernée.
Personnellement, je ne connais pas d'activités dans laquelle on doit repartir de zéro chaque jour. Je n'ai en tout cas jamais rencontré de cas pareil en plus de 20 ans d'Excel.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Bonjour,
Si tu veux te lancer dans les macros:
- Ouvre un de tes fichiers du jour
- Menu: Affichage / Macros / Enregistrer une macro
- Créer ton TCD comme tous les jours
- Menu: Affichage / Macros / Arrêter l'enregistrement
- Touche [alt]+[F11] pour atteindre l'éditeur VBA (appelé VBE)
- Décortique le code, supprime les lignes inutiles, adapte le par des boucles For ... Next...
Voici ce que donne l'enregistrement de la macro à la création d'un TCD (J'ai ajouté quelques commentaires)
Pour avoir une idée précise du code, enregistre une macro en ne procédant qu'à une ou deux action. Par exemple déplace un champ en colonne dans le TCD:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
34
35
36 Sub Macro1() ' ' Macro1 Macro ' ' ' Création du TCD, Source = SourceData, Position sur la feuille = TableDestination... ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Feuil1!R1C1:R21C6", Version:=6).CreatePivotTable TableDestination:= _ "Feuil1!R2C10", TableName:="Tableau croisé dynamique1", DefaultVersion:=6 ' Ligne inutile Sheets("Feuil1").Select ' Ligne inutile Cells(2, 10).Select ' Feuille active / Sélection du TCD / Sélection du champ col1 (entête d'une colonne de mon tableau) With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Col1") .Orientation = xlColumnField .Position = 1 End With ' Idem col 2 With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Col2") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Col3") .Orientation = xlRowField .Position = 2 End With ' Ligne inutile Range("J4").Select ' Regrouper je crois ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Col2"). _ PivotItems("1").ShowDetail = False ActiveWorkbook.ShowPivotTableFieldList = False End Sub
Si tu as besoin reviens par ici avec ton code travaillé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Col1") .Orientation = xlColumnField .Position = 1 End With
Gdal
Merci Gdal je test demain
Les autres je publierais pas un post juste pour le fun
Je veux pas actualiser un TCD car s'en est un différent chaque jours! En effet les colonnes ne change pas mais les lignes si .
En tt cas merci bcp GDAL
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Salut,
Le code pour créer un TCD, généré par l’enregistreur de macro est assez imbitable!
Avec un peu de refactoring, voici une procédure un peu plus lisible:
Cordialement,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
34
35
36
37
38
39 Sub installerTCD2() 'Feuille: Ventes ' Objectif: améliorer/simplifier la programmation en utilisant des ' variables objet pour stocker des références aux objets du TCD Dim wkb As Workbook, sh As Worksheet Dim rng As Range Dim pc As PivotCache, pt As PivotTable, pf As PivotField ' init Set wkb = ActiveWorkbook Set sh = wkb.Worksheets("Ventes") ' la zone de data sur laquelle est basée le TCD Set rng = Range("A1").CurrentRegion ' création d'un nouveau cache de TCD, sur lequel on conserve une référence pc(pivot cache) Set pc = wkb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rng) ' on ajoute un TCD au cache mémoire, sur lequel on conserve une référence pt(pivot table) Set pt = pc.CreatePivotTable(sh.Range("F20"), "Ventes") ' paramétrage du TCD With pt ' paramétrage du champ [Who] Set pf = .PivotFields("Who") With pf .Orientation = xlRowField .Position = 1 End With ' paramétrage du champ [What] Set pf = .PivotFields("What") With pf .Orientation = xlRowField .Position = 2 End With ' ajout d'un champ de données Set pf = pt.PivotFields("Amount") .AddDataField pf, "Total ventes", xlSum End With Set pc = Nothing pt.ClearTable End Sub
Voici ma macro automatique
Ce qui gêne c'est : _
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 "Sheet1!R1C1:R6552C22", Version:=xlPivotTableVersion10).CreatePivotTable _ TableDestination:="Feuil1!R3C1"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
34
35
36 ' Macro123456 Macro ' ' Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R6552C22", Version:=xlPivotTableVersion10).CreatePivotTable _ TableDestination:="Feuil1!R3C1", TableName:="Tableau croisé dynamique1", _ DefaultVersion:=xlPivotTableVersion10 Sheets("Feuil1").Select Cells(3, 1).Select With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Situation") .Orientation = xlPageField .Position = 1 End With With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Mode règlement") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _ PivotTables("Tableau croisé dynamique1").PivotFields("Montant"), _ "Nombre de Montant", xlCount With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Nombre de Montant") .Caption = "Somme de Montant" .Function = xlSum End With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Situation"). _ CurrentPage = "effectué" Columns("B:B").Select Selection.NumberFormat = "#,##0.00" Range("B8").Select ActiveWorkbook.Save End SubCette ligne je peux l'enlever elle sert à rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part Range("B8").Select
Tu vas avoir de gros soucis lorsque tu renommeras "Feuil1" et "Sheet1".
Tu as intérêt à travailler avec des objest de type Worksheet pour pointer vers tes tes feuilles, c'est plus lisible comme code, et plus stable, d'une manière générale.
Plutôt que répéter les lignes activesheet.pivotable("..., tu aurais intérêt à travailler avec un objet de type PivotTable, ce sera vachement plus simple et tu pourras te passer de sélectionner.
Tu aurais intérêt à travailler avec un objet plage dont tu extrairas l'adresse pour créer ton tcd, car ici, ta macro va toujours créer le TCD sur base de la plage R1C1:R6552C22...
Bref, encore pas mal de boulot pour une finalité dont je n'ai pas encore perçu l'utilité, vu mon dernier message.
Bref, apprendre le VBA en manipulant des TCD (qui plus est via l'enregistreur de macros qui crée du code poubelle), c'est un peu comme de vouloir courir un marathon alors que l'on ne sait pas marcher... , surtout lorsque je maintiens l'idée que si tu dois reconstruire ton tcd à chaque fois, c'est qu'il y a une faille dans la préparation des données qui alimentent ton tcd. (Parfois, c'est fatigant d'essayer de partager son expérience...)
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Bonjour
Je sais si qu'un va pouvoir me répondre voici mon code
Désolé, je suis sur smartphone…
Mais ca beugue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub G3_TCD_Decaissements_App() ' Sélection des données ActiveWorkbook.Sheets("Sheet1").Select Range("A1").Select Set objTable = Sheet1.PivotTableWizard ' Création du TCD Set objField = objTable.PivotFields("Mode règlement") objField.Orientation = xlRowField Set objField = objTable.PivotFields("Situation") objField.Orientation = xlPageField CurrentPage = "effectué" Set objField = objTable.PivotFields("Montant") objField.Orientation = xlCount objField.Function = xlSum objField.NumberFormat = "$ #,##0" ' Actualiser Range("B6").Select ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotCache.Refresh End sub
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager