Copier le contenu d'un fichier dans un onglet d'un autre fichier
Bonjour,
J'aimerais savoir si il est possible de copier le contenu d'un fichier dans un onglet d'un autre fichier.
Concrètement, on aurait dans un même dossier :
1) TEMPLATE : Mon fichier excel avec la macro (celui qui accueillera des données)
- Onglet "Location"
- Onglet "Department"
2) Un fichier qui s'appellera Location_XXXXX (le XXXX changera à chaque fois, mais il y aura un seul fichier nommé Location dans le dossier)
3) Un fichier qui s'appellera Department_XXXXX (le XXXX changera à chaque fois, mais il y aura un seul fichier nommé department dans le dossier)
--> Mon objectif serait, en lancant la macro depuis le TEMPLATE que : 2) se colle dans l'onglet "Location" du TEMPLATE et que 3) se colle dans l'onglet "Department" de ce même TEMPLATE
Est-ce que c'est réalisable?
Merci pour votre aide !
Bonjour
Faisable sans problème par PowerQuery intégré à Excel si ce sont des tableaux de données
Sinon VBA
Bonjour,
Les XXXXX suivront une suite logique ou non ?
Les fichiers Location et département n'auront qu'une seule feuille ? si oui, toujours le même nom ?
Je rejoins Chris Par power query faisable en quelque clicks
Merci pour vos réponses.
Les XXX seront générés en fonction de la date et de l'heure.
Ce ne sera pas forcément une suite logique.
Les fichiers sources seront des csv (une seule colonne à copier, donc).
Je ne connais pas du tout powerquery. Je vais chercher des modes opératoires...
On pourra t'aider un peu plus avec des fichiers exemples, à toi de voir.
RE
Poste les csv et l'exemple xls de la synthèse attendue
Et dans la mesure ou un seul Location_XXXXX dans son dossier et un seul Department_XXXXX dans son dossier, peut importe le détail de XXXXX
Merci à vous.
Je vais voir car ce sont des données confidentielles et il me faut les anonymiser.
Merci pour votre aide!
Re
Attention à anonymiser avec un éditeur texte et non dans Excel qui va bricoler le csv à la sauce US
Bonjour à tous.
Meilleur voeux au forum !
Ci-joint les fichiers dont on parlait plus haut.
Mon objectif :
0) Je mets dans un même répertoire windows mon template xlsm (avec macro) et les deux csv joints
1) J'ouvre mon template xlsm (avec macro) dans lequel il y a un onglet "Cost Center" et un onglet "Department"
2) Je lance la macro, et elle me copie :
> Le contenu du csv cost center dans l'onglet cost center xlsm
> Le contenu du csv department dans l'onglet department xlsm
Juste une copie sur la première colonne, tout simplement (j'ai déjà une macro pour la mise en forme)
Petite subtilité : j'aimerais ne pas rentrer le nom du fichier en dur car il va changer à chaque fois.
Mais si c'est trop compliqué, je ferai avec !
Un grand merci à tous
Bonjour
Il est probable qu'une bonne partie de la mise en forme soit faisable dans la requête mais sans plus d'infos...
Modifier le dossier puis Données, Actualiser Tout ou en VBA ThisWorkbook.RefreshAll
Bonjour.
Merci pour votre réponse.
Pour la mise en forme, j'ai ce qu'il faut dans une autre macro.
Là, j'ai juste besoin que la macro copie bêtement le csv dans l'onglet approprié sur une seule colonne.
J'ai ouvert votre fichier 2csv-mois-pq.xlsx mais je vois que tout a déjà été mis en forme.
Et je ne vois pas de macro.
Ce que je chercherais à faire, c'est que la macro (ou powerbi?) aille "prendre" les données du csv pour les coller dans le excel.
°°°
J'ai testé d'appliquer vos consignes ( Données, Actualiser Tout ) , en modifiant au préalable le chemin du fichier, et excel me répond
Requête "Cost_Fic" (tape "Fichier1")référence d'autres requêtes ou étapes et ne peut donc pas accéder directement à une source de données.
Reconstruisez cette combinaison de données.
Bonjour
Ce n'est pas du VBA mais PowerQuery qui remplace de plus en plus VBA surtout pour des fichiers externes de tous types...
Lancer PowerQuery (Données, Obtenir des données, Lancer PowerQuery), puis Fichier, Options et paramètres, Options de requête, partie GLOBAL : Confidentialité, Toujours ignorer les paramètres de niveau de confidentialité
Cela supprimera le message d'erreur.
A noter que cette option ne sert à rien dans la quasi totalité des cas et limite les possibilités, d'où son décochage.
N.B: PowerQuery est intégré dans Excel et dans PowerBI, tout comme PowerPivot
Ha oui c'est top. Ca fonctionne!
Mais du coup, vu que je pensais que c'était en VBA j'ai pas donné le nom de tous les onglets dont j'avais besoin.
Il y a un endroit où on peut voir "le code" qui a été renseigné pour que je l'adapte?
RE
Oui quand tu es dans PowerQuery tu sélectionnes la requête à gauche et tu vois toutes les étapes à droite avec le détail dans la barre de formule et en cliquant sur le rouage de la ligne d'étape.
On code rarement : le code se crée au fur et à mesure des actions faites en cliquant dans le ruban ou en clic droit et, contrairement à l'enregistreur macros VBA, c'est propre.
Si tu veux voir le code M : clic droit sur le nom de la requête à gauche, Editeur avancé
Les onglets ont été créés manuellement : on ne fait qu'y charger le résultat de la requête
Merci Chris.
Ca a l'air super puissant Powerquery, je vais essayer de trouver des tutos.
J'ai un petit point de blocage pour ajouter d'autres onglets.
J'ai créé "Fic_Employee" (icône "ABC") --> parfait, il identifie bien le csv employee que je mets dans le répertoire
Par contre pour générer "Employee" (icône avec le tableau), peut-on s'abstenir de taper une à une toutes les colonnes?
Aurais-tu stp une astuce pour générer l'équivalent du départment ci-dessous (mais pour l'employee) ?
= Table.TransformColumnTypes(#"En-têtes promus",{{"Department ID", type text}, {"Status", type text}, {"Start Date", type date}, {"createdBy", type text}, {"createdDate", type date}, {"lastModifiedBy", type text}, {"lastModifiedDate", type date}, {"lastModifiedDate_1", type date}, {"Cluster", type text}, {"CompanyAssociation", type text}, {"Description", type text}, {"Description_2", type text}, {"Description_3", type text}, {"Description_4", type text}, {"effectiveEndDate", type date}, {"mdfSystemEntityId", type text}, {"lastModifiedBy_5", type text}, {"Department Name", type text}, {"Department Name_6", type text}, {"Department Name_7", type text}, {"Department Name_8", type text}, {"Department Name_9", type text}, {"Department Name_10", type text}, {"Department Name_11", type text}, {"Department Name_12", type text}, {"Department Name_13", type text}, {"Department Name_14", type text}, {"Department Name_15", type text}})Un grand merci
EDIT : je me suis débrouillé en traficotant dans excel avec des "concaténer". Mais je suis curieux de savoir si il y a une option dédiée dans Power BI.
Quoi qu'il en soit, j'ai un petit souci car il perd pied à partir de certains champs (en l'occurrence "Generic-Job")
= Table.TransformColumnTypes(#"En-têtes promus",{{"User ID", type text},
{"Contrôle occurrence", type text},
{"Contrôle User", type text},
{"Subsidiary Emp ID-User", type text},
{"Username-User", type text},
{"Business Email-User", type text},
{"Usage Last Name-User", type text},
{"Usage First Name-User", type text},
{"Employee Status", type text},
{"Event Date", type text},
{"Event Reason", type text},
{"Created By", type text},
{"Created Date Time", type text},
{"Last Modified By", type text},
{"Last Modified Date Time", type text},
{"Last Modified On", type text},
{"Subsidiary", type text},
{"Cost Center", type text},
{"Created On", type text},
{"Contract start date", type text},
{"Contract end date", type text},
{"Last Position Start Date (technical field)", type text},
{"Cluster", type text},
{"LVMH Holding Position", type text},
{"Department", type text},
{"Parent company", type text},
{"effectiveLatestChange", type text},
{"End Date", type text},
{"Expected Return Date", type text},
{"FTE", type text},
{"Generic-job", type text},
{"Location", type text},
{"Manager", type text},
{"Notice Period Start Date", type text},
{"Job Title (Pos Group ID)", type text},
{"Position Subsidiary ID", type text},
{"Position Start Date", type text},
{"Time Type Profile", type text},
{"Business Category", type text},
{"Event", type text},
{"Type of contract", type text},
{"Recruitement reason", type text},
{"International Mobility Status", type text},
{"Work Schedule", type text},
{"Title(PC)", type text},
{"Local Job Title", type text},
{"Business Sector Division", type text},
{"SEP Senior Executive Position", type text},
{"Area Group", type text},
{"Area Comp", type text},
{"Sub Area Comp", type text},
{"City", type text},
{"Function", type text},
{"Sub-function", type text},
{"Timezone", type text},
{"Position Start Date2", type text},
{"Employee category", type text},
{"Birth Date-User", type text},
{"Gender-User", type text},
{"Type of contract-User", type text},
{"Citizenship 1", type text},
{"Parent company start date-User", type text},
{"Group Start Date-User", type text},
{"Country/Region", type text},
{"Business Sector", type text},
{"Business Sector Division3", type text},
{"Full time / Part time", type text}})RE
On ne type pas les colonnes par code : on sélectionne les colonnes de même type, clic droit ou onglet Accueil, et on type : en général en 3 ou 4 fois max c'est fait sans taper quoi que ce soit...
Tu m'as l'air parti dans une complication bien inutile. Déformation VBA ?
Bonjour,
Je rejoins Chris, Surtout lors de l'apprentissage de PQ, essayez d'utiliser au maximum les menus. MS vous a facilité la tache donc profitez s'en ! Le codage en M est secondaire.
Bonjour.
Il y a un mois je ne savais même pas faire de VBA.
Je pars vraiment de rien.
Il me faut apprendre, je vais essayer quelques tuto de powerquery.
Mais je vous avoue que j'apprends mieux quand j'arrive à utiliser un nouvel apprentissage pour répondre à un besoin concret.
C'est pourquoi votre aide sur ce topic m'est précieuse.
Là actuellement je suis bloqué car je n'arrive pas à faire le matching avec l'onglet "Employee" du template.
Pourtant je retrouve bien le csv Employee grâce au code que j'ai adapté
= Table.SelectRows(Source, each Text.StartsWith([Name], "Employee"))Je pensais qu'il suffirait de mettre "Employee" comme nom de la table et comme nom d'onglet, mais apparemment cela se gère ailleurs
Bonjour
On ne sait pas ce que tu cherches à faire donc pas facile de t'aider
Si on repart du début : il y a dans une cellule nommée Dossier le chemin d'accès aux csv
Il y a dans le classeur des onglets vierges nommés Location et Department
Avec PowerQuery on récupère dans la requête Mois la liste des fichiers présent dans le dossier indiqué
La requête Cost_Fic récupère le nom du csv contenant le mot cost
Idem pour la requête Dep_Fic qui récupère le nom du csv contenant le mot department
Les requêtes Cost et Department récupèrent chacune le contenu du fichier csv correspondant
On affiche le résultat dans les onglets prévus portant ces noms.
Donc si tu veux récupérer un csv contenant le mot employee dans le même dossier, il faut créer les requêtes Employee_Fic et Employee en t'inspirant de ce qui a été fait pour cost ou pour department
Merci Chris.
Oui, c'est exactement ce que je cherche à faire : dupliquer ce que tu as fait pour d'autres onglets.
Mais plutôt que de le faire faire par autrui, j'aimerais comprendre la logique.
Mais je bloque ici :
On affiche le résultat dans les onglets prévus portant ces noms.Lorsque je clique sur "Actualiser", les onglets cost center et départment s'alimentent mais....pas l'onglet employee !
J'ai forcément oublié quelque chose.
Je vous joins ce que j'ai fait.
Si vous pouviez svp m'aider à comprendre mon erreur.....
Merci pour votre patience :)