> Tous les forums > Forum Autres langages
 Fusionner des fichiers excel en un seul (macro)
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
CorentinM
  Posté le 24/06/2019 @ 11:28 
Aller en bas de la page 
Petit astucien

Salut à tous,

débutant en codage, je suis à la recherche d'une macro excel.

Je n'ai rien trouvé sur internet qui me corresponde, du coup je m'en remet à votre aide: Alors, j'ai un tableau dans un premier fichier qui fait environ 1600 lignes et 28 colonnes, avec des nouvelles lignes qui s'ajoutent tous les jours. En parallèle de ce tableau, il y a un fichier excel différent pour chacune des lignes, avec 5 feuilles par fichier. Les données dans le tableau et les fichiers sont différentes, et j'aurais aimé récupérer des données de ces fichiers annexes (mais pas toutes) pour les inclure dans de nouvelles colonnes du tableau original, de manière automatique pour les lignes existantes comme pour les futures.

Une autre difficulté est que les fichiers annexes n'ont pas tous le même format, c'est à dire que ils n'ont pas tous le même nombre de lignes/colonnes de données à récupérer. De plus, ils sont tous répartis dans différents dossiers eux-mêmes dans un autre dossier.

On a bien le lien entre le fichier principal et ses annexes, grâce à un numéro d'index (idx).

J'ai une première piste pour cette macro, mais vu que je suis une bille en codage ça me parait compliqué à réaliser par moi même:

"Je pense que j'aurais essayé de faire une macro dans le fichier principal avec un algorithme du style :

- boucle sur la colonne idx

- ouvrir le fichier annexe au chemin "C:\..." + Index + ".xlsx"

- Récupérer dans ce fichier la dernière ligne non vide des colonnes qui t'intéressent, ex. pour le Surcout dans la feuille "Impacts" : .Cells(.Rows.Count, 10).End(xlUp).Row pour récupérer le numéro de la dernière ligne non vide de la colonne 10 (= colonne J)

- Mettre à jour ton tableau principal avec le contenu de la cellule .Cells(DerniereLigneNonVide, TaColonne)"

Voila voila, tout est dit.

Si je me suis mal exprimé et que vous avez des questions, hésitez pas.

Merci la commu!

Corentin



Modifié par CorentinM le 24/06/2019 11:30
Publicité
Debrief
 Posté le 24/06/2019 à 17:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Comme specs c'est un peu "light"...

j'aurais aimé récupérer des données de ces fichiers annexes (mais pas toutes) pour les inclure dans de nouvelles colonnes du tableau original

Où sont ces données à récupérer (feuilles, lignes colonnes) dans les fichiers annexes et où les placer sur la ligne correspondante (colonnes) du fichier principal ?

Une autre difficulté est que les fichiers annexes n'ont pas tous le même format, c'est à dire que ils n'ont pas tous le même nombre de lignes/colonnes de données à récupérer. De plus, ils sont tous répartis dans différents dossiers eux-mêmes dans un autre dossier.

Combien de types de fichiers annexes différents, comment les reconnaitre, quel dossier en fonction du type, quel nom de fichier en fonction de l'index, influence détaillée sur la question précédente ?

D.

CorentinM
 Posté le 25/06/2019 à 10:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut,

le numéro d'index (IDX) qui va nous aider à récupérer les données se trouve dans la colonne A du tableau principal (chaque ligne a le sien) et dans la cellule A3 de la première feuille ("données") du fichier annexe correspondant à la ligne.
Les données que l'on voudrais récupérer sont au nombre de 4 : les deux cellules "Stk Mort Revente" (colonne M) et "Qté SurStk" (colonne L) de la feuille "Achats" et les deux cellules "Surcoût" (colonne J) et "Total outil." (colonne M) de la feuille "Impacts" présentes dans chaque fichier annexe pour les reporter respectivement dans les colonnes Z, AA, AB et AC du tableau principal.
On pourrait les récupérer donc, car ces données sont dans les dernières cellules non vides de leur colonne.
Je sais pas si c'est ce que tu demandais?
Debrief
 Posté le 25/06/2019 à 10:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

le numéro d'index (IDX) qui va nous aider à récupérer les données se trouve dans la colonne A du tableau principal (chaque ligne a le sien)
-> A partir de A1 ?
-> Sur la 1ère feuille du classeur principal ?
-> Quel est le chemin et le nom des classeurs Annexes ?

les deux cellules "Stk Mort Revente" (colonne M) et "Qté SurStk" (colonne L) de la feuille "Achats"
les deux cellules "Surcoût" (colonne J) et "Total outil." (colonne M) de la feuille "Impacts"
-> Ce sont ces valeurs sont qui sont
dans les dernières cellules non vides de leur colonne ?

CorentinM
 Posté le 25/06/2019 à 10:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Les numéros d'index commencent à A2, sur la 1ère feuille effectivement.

Pour les classeurs annexes, ils sont tous sous U:\Commercial\Devis répartis par année, par client et par devis dans des dossiers. Pour un classeur, le chemin peut donc être U:\Commercial\Devis\2019\THALES AVIONICS VENDOME\EV5745 CARTE CONDITIONNEMENT EQUIPEE. Ce fichier sera nommé "DEVIS MO 5745", le numéro étant l'IDX toujours précédé de DEVIS MO.

Pour ta dernière question, oui, ce sont bien ces valeurs dans les dernières cellules non vides de leur colonne

Debrief
 Posté le 25/06/2019 à 10:59 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Pour les classeurs annexes, ils sont tous sous U:\Commercial\Devis répartis par année, par client et par devis dans des dossiers
-> Où sont (quelle colonne), dans la ligne du fichier Principal, les informations de l'année, du client et du devis ?

CorentinM
 Posté le 25/06/2019 à 11:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

L'année dans la colonne D, le client dans la E et le devis c'est donc l'index dans la A

Debrief
 Posté le 25/06/2019 à 11:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Pour un classeur, le chemin peut donc être U:\Commercial\Devis\2019\THALES AVIONICS VENDOME\EV5745 CARTE CONDITIONNEMENT EQUIPEE\DEVIS MO 5745.xls
-> Année = 2019 (colonne D)
-> Client =
THALES AVIONICS VENDOME (colonne E)
-> ??? =
EV5745 CARTE CONDITIONNEMENT EQUIPEE (colonne ???)
-> Index préfixé =
DEVIS MO 5745 (colonne A)
-> Extension = xls ? xlsx ?

CorentinM
 Posté le 25/06/2019 à 11:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Oui le chemin est bien comme ça, en .xlsx

Dans la colonne A tu trouveras seulement "5745" par exemple, pas la mention DEVIS MO.

-> ??? = EV5745 CARTE CONDITIONNEMENT EQUIPEE (colonne ???)

Ca on ne le retrouve nulle part dans le tableau, à part le 5745 colonne A. De plus, plusieurs Evols (EV=evols) correspondent à une même désignation (ex: CARTE CONDITIONNEMENT EQUIPEE)

On devra donc être capable de retrouver le fichier juste avec EV5745... Si c'est possible

Publicité
Debrief
 Posté le 25/06/2019 à 12:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Je ne vois pas comment construire le chemin d'un fichier Annexe si on n'a pas l'information pour déterminer la composante EV5745 CARTE CONDITIONNEMENT EQUIPE de ce chemin.

Je veux bien ajouter en dur EV5745 mais manifestement ça ne suffit pas et de toutes façons ça ne couvre probablement pas tous les cas.

Faut-il explorer tous les répertoires sous le répertoire client U:\Commercial\Devis\2019\THALES AVIONICS VENDOME\ pour essayer de trouver dans l'un d'entre eux un fichier nommé DEVIS MO 5745 ?
Ne risque-t-il pas d'y avoir plusieurs exemplaires de ce même fichier dans différents sous-répertoires ?

CorentinM
 Posté le 25/06/2019 à 14:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Ce n'est pas possible que, pour chaque ligne, la macro sonde tous les sous répertoires de U:\Commercial\Devis\ pour trouver le DEVIS MO **** correspondant à l'index? Il n'y a qu'un seul exemplaire de chaque devis sur ce chemin



Modifié par CorentinM le 25/06/2019 14:07
Debrief
 Posté le 25/06/2019 à 15:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Pourquoi faudrait-il tout sonder à partir de U:\Commercial\Devis\?

Si l'Annexe DEVIS MO 5745 existe, elle est forcément dans U:\Commercial\Devis\2019\THALES AVIONICS VENDOME\, ou alors je n'y comprends plus rien.

En tous cas c'est ce que j'ai codé dans cette macro à importer (clic droit dans la partie VBA, puis Importer un fichier).

https://www.cjoint.com/c/IFznnjuj0S3

Toutes les définitions de paramètres sont en constantes modifiable en tête du module. Le code n'utilise aucune référence "en dur".

Difficile de tester sans le contexte réel. Tu n'as plus qu'à essayer et bruler un cierge (dans l'ordre que tu préfèreras).

CorentinM
 Posté le 25/06/2019 à 15:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Oui, mais toutes les autres annexes sont éparpillées dans U:\Commercial\Devis\...

Merci beaucoup pour ton codage en tout cas, je vais tester ça de suite. Le cierge sera brûlé si ça marche

CorentinM
 Posté le 25/06/2019 à 15:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bon du coup, ça me met une Syntax error sur "attribute" de la première ligne, je peut pas te dire pourquoi

Attribute VB_Name = "ModuleCollecteAnnexesInfo"



Modifié par CorentinM le 25/06/2019 15:39
Debrief
 Posté le 25/06/2019 à 15:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Non, toutes les autres Annexes sont également dans leurs répertoires Année\Clients correspondants, répertoire dont on connait le nom grâce aux colonnes D et E du fichier principal. Sinon ça n'a pas de sens.

U:\Commercial\Devis\<Année>\<Client>\...répertoires...\DEVIS MO <Index>.xlsx

Debrief
 Posté le 25/06/2019 à 15:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Tu as copié le contenu du fichier dans un module. Dans ce cas supprime cette ligne qui sert à Excel pour nommer le module.

Voilà ce qu'il faut faire pour importer un module comme décris ci-dessus (clic droit dans la partie VBA, puis Importer un fichier)

Choisir le fichier téléchargé ModuleCollecteAnnexesInfo.bas

CorentinM
 Posté le 25/06/2019 à 16:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Yes ça c'est bon quand même ahah

Du coup, j'ai essayé de modif certains trucs car ça marchait pas partout, mais j'ai pas réussi :/

Je sais d'ou viens cela par contre:

1) Souvent, le nom client n'est pas exactement le même aux 2 endroits.

2) Souvent, les devis sont dans des dossiers à l'intérieur des dossiers clients;

3) Souvent, le nom du fichier annexe n'est pas DEVIS MO (idx) même si ce numéro d'index figure toujours à la fin.

Mais cela, je sais pas si tu y peux quelque chose...

En tout cas, en suivant la structure des chemins d'accès, ça marche bien donc merci à toi

Publicité
Debrief
 Posté le 25/06/2019 à 17:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

1) Souvent, le nom client n'est pas exactement le même aux 2 endroits.

Tu veux dire dans le fichier Principal colonne E et pour le nom du répertoire Client ? Des exemples pour voir s'il y a quelque chose à faire ?

2) Souvent, les devis sont dans des dossiers à l'intérieur des dossiers clients;

Je ne comprends pas ce que tu veux dire.
Par rapport à cette structure de répertoires, il y a une ou des sous-structures de répertoire ? U:\Commercial\Devis\<Année>\<Client>\...répertoires...\DEVIS MO <Index>.xlsx
Ou bien tu veux dire que le devis est directement sous le répertoire Client ? U:\Commercial\Devis\<Année>\<Client>\DEVIS MO <Index>.xlsx

3) Souvent, le nom du fichier annexe n'est pas DEVIS MO (idx) même si ce numéro d'index figure toujours à la fin.

Quels autres préfixes s'appliquent ? Des exemples pour voir s'il y a quelque chose à faire ? L'Index est-il toujours sur 4 digits ?
Edit: Si on ne trouve pas
DEVIS MO <Index>.xlsx on peut essayer de trouver *** <Index>.xlsx si on a quelques éléments de structure de *** (nb min et/ou max de caractères, commence par, finit par, contient, etc..) pour limiter la probabilité de confusion avec d'autres fichiers non concernés.



Modifié par Debrief le 25/06/2019 22:12
CorentinM
 Posté le 26/06/2019 à 10:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Tu veux dire dans le fichier Principal colonne E et pour le nom du répertoire Client ? Des exemples pour voir s'il y a quelque chose à faire ?

Oui c'est ça, ça peut être aussi bien une différence d'orthographe que une série d'un - et 3 chiffres avant ou même un nom composé différent

Pour le 2), c'est U:\Commercial\Devis\<Année>\<Client>\...répertoires...\DEVIS

Et le 3), il y a parfois un numéro suivi du numéro IDX après un espace "720053 (idx)", ou encore "Export EV(idx)"

CorentinM
 Posté le 26/06/2019 à 12:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

EDIT:

J'ai réussi à simplifier le chemin, qui sera donc maintenant U:\Commercial\Evolution\<index>\DEVIS MO <Index>.xlsx.

A côté de ça, j'aurais en plus voulu récupérer la dernière ligne de la colonne N de la fiche achats fichier annexe, pour la mettre dans la colonne AD (colonne nommée "Ecart Prix")



Modifié par CorentinM le 26/06/2019 14:04
Debrief
 Posté le 26/06/2019 à 21:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ce module à importer https://www.cjoint.com/c/IFAteOokJyo tient compte du nouveau répertoire U:\Commercial\Evolution\<index>\DEVIS MO <Index>.xlsx et des 3 cas de noms de devis:

- DEVIS MO <Index>.xlsx
- Export EV<Index>.xlsx (sans espace entre EV et <Index>)
- ### <Index>.xlsx (où ### est une valeur numérique quelconque)

Une petite modif aussi pour afficher de manière optionnelle l'erreur dans le fichier Principal en colonne AE:
Private Const PrincipalColonneErreurFichier = "AE" 'Pour ne pas placer le message d'erreur en colonne "AE" mettre cette constante en chaine vide ""


CorentinM
 Posté le 27/06/2019 à 10:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

@Debrief je te remercierais jamais assez

C'est parfait merci

Publicité
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Récupérer données de 3 fichiers Excel en 1 seul !!
Récupérer données de 3 fichiers Excel en 1 seul !!
Récupérer données de 3 fichiers Excel en 1 seul
Macro excel : regrouper plusieurs fichiers
Macro d'envoi mail ne fonctionne plus dans Excel 2013
problème macro excel
Macro vb excel
macro sous excel
appeler des touches clavier dans une macro Excel
macro excel
Plus de sujets relatifs à Fusionner des fichiers excel en un seul (macro)
 > Tous les forums > Forum Autres langages