Assembler plusieurs classeurs dans un nouveau
Bonjour à tous,
Je suis novice en VBA et je me demande s'il est possible de créer une macro qui permettrait d'assembler des classeurs (tous dans le même dossier) ayant exactement la même structure (même en-têtes mais pas même nombre de ligne) dans un nouveau classeur.
Chaque classeur d'origine a sa première qui sert d'en-tête, l'idée étant de tout mettre à la suite l'en-tête ne devra pas être copié. Le classeur d'où pourrait être appliqué la macro pourrait déjà comporter cette ligne d'en-têtes.
Chaque classeur correspond à une année, pour ne pas perdre cette donnée, j'aimerais que la première colonne comporte cette information.
Je vous mets des fichiers en exemple.
Les données de 2019-li et 2020-pc sont extraites pour construire macro-copie-données. Une colonne "années" est ajoutée à ce dernier tableau pour préciser si les données sont de 2019 ou 2020.
Je suis preneur si vous avez des pistes ! J'aimerais beaucoup m'amuser à construire cette macro mais n'ayant pas les bases, c'est assez compliquer de savoir vers où regarder. Je vais commencer par les cours sur ce site. Mais, si vous avez des conseils pour apprendre je suis preneur
A très vite !
Bonsoir,
Une proposition avec Power Query,
Il faut changer le chemin "Source" la ou j'ai mis les ????
Le dossier s'appel "Nouveau dossier" là aussi il faut changer le nom du dossier par le nom du dossier concerné.
let
Source = Folder.Files("C:\Users\????\Desktop\Nouveau dossier"),
#"Fichiers masqués filtrés1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"Appeler une fonction personnalisée1" = Table.AddColumn(#"Fichiers masqués filtrés1", "Transformer le fichier à partir de Nouveau dossier", each #"Transformer le fichier à partir de Nouveau dossier"([Content])),
#"Colonnes renommées1" = Table.RenameColumns(#"Appeler une fonction personnalisée1", {"Name", "Source.Name"}),
#"Autres colonnes supprimées1" = Table.SelectColumns(#"Colonnes renommées1", {"Source.Name", "Transformer le fichier à partir de Nouveau dossier"}),
#"Colonne de tables développée1" = Table.ExpandTableColumn(#"Autres colonnes supprimées1", "Transformer le fichier à partir de Nouveau dossier", Table.ColumnNames(#"Transformer le fichier à partir de Nouveau dossier"(#"Exemple de fichier"))),
#"Type modifié" = Table.TransformColumnTypes(#"Colonne de tables développée1",{{"Source.Name", type text}, {"Pacage", type any}, {"mesure", type any}, {"région", type any}, {"dispositif", type any}, {"montant", type any}}),
#"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Type modifié", "Source.Name", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"Source.Name.1", "Source.Name.2"}),
#"Type modifié1" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"Source.Name.1", type text}, {"Source.Name.2", type text}}),
#"Colonnes supprimées" = Table.RemoveColumns(#"Type modifié1",{"Source.Name.2"}),
#"Colonnes renommées" = Table.RenameColumns(#"Colonnes supprimées",{{"Source.Name.1", "Année"}})
in
#"Colonnes renommées"Cdlt.
PS: Il faut que les 2 fichiers "2019-li et 2020-pc" soit mis sous forme de tableau structuré.
Merci beaucoup d'avoir pris du temps @mdo100
Pour tout te dire au début j'ai cru que Power Query était un membre du forum !!! Puis, j'ai mis ton code dans l'éditeur VBA de Excel parce que j'étais parti sur une macro... J'ai constaté que rien ne fonctionnait. Heureusement internet est mon ami
Je n'avais absolument JAMAIS entendu parlé de Power Query !!!! C'est révolutionnaire ! (enfin pour mes tâches fastidieuses)
Sur mon ordi perso avec Office 20216, j'ai juste eu à choisir l'emplacement du dossier où se trouvent les fichiers et en les chargeant tout s'est fait automatiquement ! Pas besoin de transformer mes données brutes en tableaux structurés. La première colonne comporte le nom entier du fichier. C'est un peu long, mais l'année est contenu dedans donc c'est déjà énorme !! J'aurais juste à trouver comment remplacer le nom du fichier par l'année qui correspond.
Bon sur l'ordi du boulot avec Office 2013, il faut que je télécharge et installe le module qui n'est pas présent de base. Et comme il faut que ce soit le service informatique qui s'en occupe, ça prendra surement un peu de temps...
Merci encore !!!!
Bonjour @x--ben,
Oui comme tu dis c'est "révolutionnaire", et je dois bien t'avouer que pour moi aussi car ça fait qu'environ 2 semaines que je me suis mis à Power Query, donc je suis encore novice dans le domaine.
Mais c'est assez simple à mettre en œuvre et pour les situations compliquées on peu compter sur les membres du forum pour des coup de mains.
"Pour tout te dire au début j'ai cru que Power Query était un membre du forum !!!"
Je te souhaite une bonne prise en main de cet outil.
Cdlt.
Re,
Pour l'année en première colonne, je suis allé dans "Fractionner" puis "-" cela te fait 2 colonnes, une pour l'année et une autre avec le reste, il te suffit de supprimer le colonne du reste et renommer la colonne par "Année" et le tour est joué.
Simple par rapport à VBA.
Cdlt.
Merci encore pour ton aide @mod10 ! Ca fonctionne super bien et c'est super rapide
J'ai utilisé l'enregistrement macro pour que tout soit fait automatiquement en cliquant sur un bouton. Ca va me changer la vie et celle de mes collègues aussi !
J'ai un message qui apparait toutefois quand j'enregistre (cf photo ci-dessous). A priori, d'après internet, j'ai juste à suivre cette démarche pour désactiver :
- Dans "Options excel"
- Centre de gestion
- Options de confidentialité,
- décochez "Supprimer les informations personnelles des propriétés du fichier lors de l'enregistrement.
Je me demande quand même la raison de ce message et ce que la désactivation de cette option de suppression va entraîner concrètement ?
Là je ne pourrais pas t'aider, chez moi je l'ais désactivé depuis longtemps surtout à cause des macro(s), mais sans me souvenir pourquoi.
Il me semble quand cherchant sur le forum, tu pourrais y trouver une réponse, sinon pose ta question avec un nouveau sujet et passe celui là en résolu.
Content quand même d'avoir pu t'aider à découvrir Power Query.
Cdlt