Fusionner des fichiers excel en un seul (macro)

  • Auteur de la discussion CorentinM
  • Date de début

CorentinM

Nouveau membre
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 de 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
 

drul

Obscur pro du hardware
Staff
Salut, on ne fait pas les macros pour les autre, on aide à les réaliser.
Le plan ci-dessus semble une bonne base, commence déjà par la première ligne et post ici le résultat de ton travail ...
 

svoglimacci

check memory failed but no bug detected
Salut :)

Pareil que @drul, tu devrais faire un plan un peu plus clair tout de même, avec des exemples. Pas forcément plus long, il pourrait même être plus court. Le tout est d'exprimer clairement comment trouver une information et où la mettre :)

les fichiers annexes n'ont pas tous le même format,
Récupérer dans ce fichier la dernière ligne non vide des colonnes qui t'intéressent
Tiens déjà, un point à éclaircir à moins que je n'aie pas bien lu ton topo (plus que probable). As-tu possibilité de connaitre la colonne concernée puisque les fichiers n'ont pas tous le même format ? Alors dis comment (pas à @drul, dis le à ton plan ) :)
 

CorentinM

Nouveau membre
Salut Drul,
oui je me doute ^^ je suis preneur de toute aide
tu utiliserais quoi comme boucle dans ce cas?
 

CorentinM

Nouveau membre
Salut @svoglimacci, yes j'ai tout ça désolé pour le manque de clarté ^^'
je pose ça là:
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 dernières cellules remplies des colonnes M et L de la feuille "Achats" et les deux dernières cellules remplies des colonnes J et 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.

Je sais pas si c'est ce que tu demandais? En tout cas ça me parait faisable avec ça, mais je n'ai pas (encore :cautious:) la technique pour réussir tout seul. Du coup j'apprends petit à petit :bounce:
 

svoglimacci

check memory failed but no bug detected
C'est déjà beaucoup plus clair :merci:
Quelle est ta difficulté maintenant ?
Si c'est de trouver les instructions à utiliser, voici comment je fais : je teste en enregistrant des macros, cela me donne au fur et à mesure les fonctions dont j'ai besoin :)
 

CorentinM

Nouveau membre
D'acc je vais me lancer la dedans, par contre comment enregistrer la macro de telle sorte qu'elle aille automatiquement dans les dossiers correspondants?
 

drul

Obscur pro du hardware
Staff
Pas compris ...

Pour la boucle tu en as 2 possible ici, soit une boucle for classique, soit une boucle "for each", je te recommande de commencer avec la boucle for, moins puissant, mais plus simple ...
 

svoglimacci

check memory failed but no bug detected
@drul, je ne comprends pas, que n'as tu pas compris ou que j'ai trop mal compris pour comprendre qu'il ne fallait pas le comprendre ? :D

Sinon @CorentinM on est d'accord, les macros que je te propose de faire sont petites et servent juste à identifier les instructions qui te seront nécessaires pour la grande macro ? (j'ai peur de m'être mal exprimé).
Ta (grande) macro pourra très bien aller dans le fichier Excel "but", le gros qui agrège les données des petits. Tu pourras l'associer à un bouton, une touche de fonction...
Un petit conseil : pense à bien paramétrer les choses, par exemple le "M" de la colonne "M" devra aller dans une variable, si possible déclarée au début (plus facile à retrouver) etc. De cette manière, en cas de changement, tu pourras beaucoup plus facilement modifier ta macro pour que le M devienne X par exemple.
Petit conseil (ma méthode, pas forcément la meilleure) : sois très progressif. Fais ta boucle for, affiche dedans l'info importante (idx ?) puis avance en affichant à chaque fois les infos qui prouvent que tu fais ce que tu veux (nom de fichier ...)

Voilà, ma compétence s'arrête là, @drul saura te donner de bien meilleurs conseils :merci:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 055
Membres
1 586 282
Dernier membre
Yannick3553
Partager cette page
Haut