Rassembler plusieurs classeurs en un seul

Bonjour à toutes et tous,

Après plusieurs heures de recherches infructueuses, je décide enfin de poser ma question.

Sous Excel 2010, je voudrais une macro qui rassemble toutes les feuilles de plusieurs classeurs excels en un seul classeur.

Exemple : A partir des 2 classeurs suivants "Classeur1.xls" (avec feuil1, feuil2, feuil3) et "classeur2.xls" (avec feuil4, feuil5), obtenir le classeur "ClasseurFinal.xls" contenant les feuilles feuil1, feuil2, feuil3, feuil4 et feuil5.

Sachant que le nombre de classeur et le nombre de feuilles dans chacun d'eux est variable ET que les objets contenus dans les feuilles sont eux aussi variables (texte, nombres, formules, graphiques, images...) :

Mes questions sont donc les suivantes :

1/ Avant de me lancer dans la rédaction du code je voudrais savoir si c'est tout simplement réalisable (en conservant les illustrations de mes feuilles) ?

2/ Si oui, j'ai vu que pour conserver les formules en état de fonctionnement il fallait ajouter certaines lignes spécifiques dans le code. Je voudrais donc savoir si je devais insérer de la même façon des lignes spécifiques à la conservation des illustrations (graphiques et images)?

3/ Si oui, avez-vous rencontrer quelque chose de semblable ou avez-vous des idées?

J'espère que j'ai été claire, n'hésitez pas si vous voulez des précisions.

Merci d'avance,

Bonjour et bienvenue sur le forum

Un exemple, pour répondre tes questions.

Bye !

129classeur2.xlsx (65.02 Ko)
112classeur1.xlsx (71.59 Ko)
258classeur-final.xlsm (23.27 Ko)

Merci beaucoup pour votre aide,

Je m'excuse pour mon temps de répondre mais je n'ai pas eu le temps de m'y pencher plus tôt...

Pour l'instant la copie des images ne marchent que partiellement. Je n'arrive pas à obtenir les images copier avec l'exemple que vous avez construit. En testant avec mes propres fichiers (confidentiels), j'ai constaté que certaines images apparaissaient, et d'autres non...

Après plusieurs tentatives pour trouver une raison à celà (j'ai fait plusieurs test par type de fichier d'image, localisation et paramètres excel) je ne suis parvenue à rien de concluant. Je préfère m'arrêter là et ne pas chercher plus loin car l'utilisation d'image est très occasionnelle donc je pourrais le faire manuellement (et garder un code "simpliste" car ce n'est pas moi qui l'utiliserait à l'avenir).

Je préfère dire que le déplacement d'images ne fonctionne pas bien au cas où quelqu'un voudrait se servir de ce code (c'est une partie qui doit être retravaillée)

J'en profite tout de même pour vous poser d'autres questions, si vous avez le temps d'y répondre

Mes bases en programmation remontent à ma prépa, je débute sur VBA depuis quelques jours seulement donc j'essaye de me familiariser avec son langage et sa syntaxe.

En lisant votre code, je pense l'avoir compris en globalité. Cependant quelques points me posent problème, si vous pouvez m'éclairer.

DIM :

A quoi servent (ou font référence) les variables "Ln" et "Derlgn" définies au début?

RECUP :

Je ne comprends pas la signification des lignes :

Cells(3, "A").CurrentRegion.Offset(1, 0).ClearContents

[...]

Cells(3, "A").Select

MACRO1 :

Je pense avoir saisi la différence entre Select et Activate. Pourtant je ne comprends pas la nécessité de la ligne "Sheets("Feuil1").Activate"

GLOBALEMENT :

Lorsque j'utilise la macro avec mes fichiers (confidentiels), une boîte de dialogue s'affiche en me demandant si je veux mettre à jour les liaisons avec les autres classeurs (Cf. capture d'écran). Savez-vous quels sont les risques que je peux avoir en cliquant sur "mettre à jour"?

Merci d'avance et à bientôt

message erreur

Bonjour

Tu écris :

A quoi servent (ou font référence) les variables "Ln" et "Derlgn" définies au début?

Que voilà une bonne question ! Réponse : à rien …

J’ai dû m’en servir lors de l’écriture de la procédure en allant dans une direction que j’ai ensuite abandonnée. Mea culpa ! j’aurai dû enlever ces deux variables que j’ai déclarées sans par la suite m’en servir.

Cells(3, "A").CurrentRegion.Offset(1, 0).ClearContents

Cette instruction a pour effet de sélectionner la zone en cours autour de la cellule A3 puis de décaler cette sélection d’une ligne vers le bas et enfin d’effacer le contenu de la zone obtenue. Cela permet d’initialiser un tableau sans toucher aux titres de ses colonnes.

Cells(3, "A").Select

Avec cette instruction, on sélectionne la cellule A3

On aurait le même résultat en faisant : Range(‘’A3’’).Select ou encore Cells(3,1).Select

Pourtant je ne comprends pas la nécessité de la ligne "Sheets("Feuil1").Activate"

Là encore je dois m’excuser pour ne pas avoir fait le ménage avant de poster le résultat de mon travail. La macro 1 ne sert pas. C’est l’enregistrement de la manip qui m’a permis d’avoir la bonne syntaxe de l’instruction qui permet de déplacer une feuille d’un classeur dans un autre.

Savez-vous quels sont les risques que je peux avoir en cliquant sur "mettre à jour"?

Le risque le plus probable est d’avoir un nouveau message disant que le système ne parvient pas à retrouver la source des données….

OK ?

Bye !

Bonjour,

Merci beaucoup pour ces précisions.

Je mets à disposition la macro epurée et un guide d'utilisation pour néophytes que j'ai réalisé pour mon stage.

Rechercher des sujets similaires à "rassembler classeurs seul"