Assembler plusieurs fichiers Excel dans un fichier / seul classeur

Bonjour,

Je me permets de solliciter votre aide car je travaille sur des exportations de DATA via un site internet et pour chaque étude, j'extrais un fichier Excel. A la fin de mon étude, je me retrouve avec une vingtaine de fichiers que je dois ouvrir un par un pour pouvoir en constituer qu'un seul pour traiter ensuite mes DATA. Je perds un temps fou à ouvrir chaque fichier pour voir coller les datas dans un seul fichier / un seul classeur. Auriez-vous une solution pour par exemple sélectionner tous les fichiers dans mon dossier et faire un click droit "assembler" (oui je rêve mais ça serait tellement idéal )

Voici un exemple de 3 fichiers que je voudrais assembler en un seul (Fichier Assemblage)

Merci pour votre aide, ça me ferait gagner un temps fou pour chaque export.

Bonjour,

Voici un premier essai avec ce code à coller dans un module normal du fichier Assemblage.

Il faut adapter le chemin du répertoire contenant les fichiers à assembler. Ce dossier est censé ne contenir que les fichiers à assembler. Le fichier Assemblage doit donc se trouver ailleurs.

Il faut que les fichiers à assembler soient fermés au moment de l'exécution.

Le code prend les valeurs de toute la zone utilisée dans la feuille 1 de chaque fichier pour les copier à la suite des valeurs déjà existantes dans la feuille 1 du fichier Assemblage :

Sub Assembler()

rep = "C:\jnce84\dossier\" '<<<<< ADPATER chemin !!!!

fichier = dir(rep & "*.xls*")
while fichier <> ""
    set wb = workbooks.open(rep & fichier)
    with wb.sheets(1).usedrange
        t = .offset(1,0).resize(.rows.count - 1, .columns.count)
    end with
    with thisworkbook.sheets(1)
        if .cells(1,1) = "" then .rows(1).value = wb.sheets(1).rows(1).value
        nvl = .cells(.rows.count, 1).end(xlup).row + 1
        .cells(nvl, 1).resize(ubound(t), ubound(t,2)) = t
    end with
    wb.close true
    fichier = dir
wend

thisworkbook.save

end sub

Il est possible d'ajuster certains éléments.

Cdlt,

Bonjour,
Merci pour votre retour rapide !

Je dois donc créer un fichier vierge + macro sur classeur avec votre fonction et mon chemin ? Je suis sur MAC est-ce que ce chemin suffit pour votre fonction ?

"/Users/jonathan/Downloads/xxxxx/exempleforum"
Bien à vous,

Si vous pensez que c'est plus simple de m'envoyer le fichier prêt à être exécuté n'hésitez pas Je suis vraiment newby en macro.

Jonathan

Bonjour,

Tout d'abord, il faut que vous créiez le fichier Assemblage (son nom n'a pas d'importance) et que vous le placiez dans le dossier "/Users/jonathan/Downloads/xxxxx" de votre chemin (pour une adaptation plus simple).

Ensuite, vous y créez un sousdossier "exempleforum" dans lequel vous placez tous les fichiers à assembler.

Vous n'ouvrez que le fichier "Assemblage". Vous allez dans Developpeur/Visual Basic/Insertion/Module et vous collez ce code :

Sub Assembler()

rep = thisworkbook.path & "/exempleforum/"

fichier = dir(rep & "*.xls*")
while fichier <> ""
    set wb = workbooks.open(rep & fichier)
    with wb.sheets(1).usedrange
        t = .offset(1,0).resize(.rows.count - 1, .columns.count)
    end with
    with thisworkbook.sheets(1)
        if .cells(1,1) = "" then .rows(1).value = wb.sheets(1).rows(1).value
        nvl = .cells(.rows.count, 1).end(xlup).row + 1
        .cells(nvl, 1).resize(ubound(t), ubound(t,2)) = t
    end with
    wb.close true
    fichier = dir
wend

thisworkbook.save

end sub

C'est déjà une étape nécessaire pour ensuite apporter d'éventuelles corrections.

D'ailleurs, en cas de bug (probable), merci de m'indiquer la ligne d'erreur (surlignée en jaune lors du débogage) ainsi que le message d'erreur.

Cdlt,

J'ai fait comme indiqué et je ne remonte pas d'erreur ni de résultat dans le fichier

Bonjour le forum, jnce84, 3GB,

@ jnce84, je viens de te répondre sur un autre forum ou tu posais la même question.

Toutefois, je réitère ma réponse ici

A tester:

Tous les fichiers doivent-être dans le même dossier.
Conserver la première ligne des titres et faire un click gauche sur le bouton "Go"

Cordialement.

Bonjour mdo100,

@jnce84 : Si il n'y a aucun résultat, alors tu n'as pas fait comme indiqué : Le problème réside dans la saisie du répertoire des fichiers à assembler. Je t'invite à relire attentivement mon commentaire précédent. Bien sûr, il faut adapter au nom de sous-dossier que tu définiras.

Cdlt,

Merci pour ta réponse @mdo100 ! En effet, j'ai posté sur 3 forums différences pour maximiser mes chances de vite trouver une solution.
Je viens de tester ton fichier en le mettant dans le répertoire de mes 3 fichiers et j'ai cliqué sur GO et rien ne se passe. Je passe en colonne E1.

@3GB je retente avec ta proposition !

Merci à vous deux pour votre réactivité ! J'espère pouvoir utiliser l'une de vos solutions dès ce soir :)

Avec mon code :

"/Users/jonathan/Downloads/xxxxx" contient :
    - le fichier Assemblage
    - le dossier "exempleforum" qui lui-même contient :
            - tous les fichiers à assembler

Avec celui de mdo100, tous les fichiers se trouvent au même endroit je crois.

Cdlt,

@3GB toujours aucun résultat qui remonte en suivant les indications. Est-ce que chez vous ça fonctionne ?

Re jnce84,

Merci pour ta réponse @mdo100 ! En effet, j'ai posté sur 3 forums différences pour maximiser mes chances de vite trouver une solution.

Tu veux maximiser tes chances sans respecter le travail que les contributeurs vont passer à te répondre !

Et tu oses me dire "j'ai cliqué sur GO et rien ne se passe"

Et bien moi je passe mon tour !

ah mais ne le prend pas comme ça mdo100 ! Surtout pas je vous suis infiniment reconnaissant de m'aider et bien au contraire je partagerai la solution sur les 3 forums où j'ai demandé

Je vous respecte totalement et sans vous je n'y arriverai absolument pas. Je suis désolé si tu as mal pris mon "il ne se passe rien" mais ça load 1sec et rien et je ne remonte pas d'erreur dans le fichier donc je ne suis pas quoi te dire de plus que il ne se passe rien

@jnce84 : Je ne compte pas faire d'essai car je suis assez confiant. Comme je t'ai dit, s'il ne se passe rien, c'est que le chemin est mal défini. Tu ne me dis pas comment tu l'as défini, tu ne montres pas le code et je ne peux pas prendre le contrôle sur ton ordinateur.

Ici, s'il ne se passe rien, c'est qu'on ne rentre pas dans la boucle while. Si on n'y rentre pas, c'est qu'aucun fichier de type .xls* n'est trouvé dans le dossier de la variable rep. Si aucun fichier n'est trouvé, c'est que tu as mal défini ton chemin ou que tu n'y as pas mis les fichiers.

Je ne peux rien faire et tu ne me donnes aucune info pour que je puisse un peu t'aiguiller.

Alors, je comprends un peu l'agacement de mdo100 car tu nous demandes plus d'efforts que tu sembles en fournir.

Cdlt,

Bonjour,

Le plus simple est à la limite de poster une capture d'écran des répertoires où se trouvent tes fichiers avec lien apparent, ça pourra donner une indication ou une piste de reflexion au codeur et leur évitera d'avancer à tâtons (c'est comme les personnes qui nous disent tel fichier ne fonctionne pas sans nous donner ni le fichier, ni le code).

Bonne soirée !

Je suis désolé pour ma maladresse ce n'est pas le but

alors 3GB j'ai bien refait la manipulation en mettant mon fichier assemblage dans mon répertoire "/Users/jonathan/Downloads/xxxxx" puis les fichiers à assembler sont bien dans "/Users/jonathan/Downloads/xxxxx/exempleforum". Lorsque j'execute la macro, ça charge 1sec et le classeur reste vide.

pour mdo100 encore désolé si je t'ai froissé mais avec ta solution, ça me fait la même chose. Cela charge 1sec et le classeur reste vite. J'ai bien pris soin de mettre ton fichier dans le dossier contenant mes fichiers à assembler.

Je ne sais pas si ça peut aider mais je suis sur MAC avec Excel V16.16. J'ai vu sur un autre forum

"sur MAC le séparateur de chemin n'est pas "\". Il faut utiliser Application.PathSeparator."

Encore merci pour votre aide.

Pour avoir un peu travaillé sur MAC hier, Excel est différent de WINDOWS au niveau de l'interface comme du traitement des données.

Je sais pas exemple qu'un lien hypertexte n'est pas le même, donc un répertoire également. Les slash sont-ils des slashs ou des antislashs ?

quand je copie le chemin de mon fichier ça ressemble ça "/Users/jonathan/Downloads/xxxxx/exempleforum2/Assemblage(2).xlsm"

Je te propose d'exécuter le code au pas à pas détaillé (depuis l'éditeur, touche F8), on saura mieux ce qu'il se passe et où ça se passe.

Mais, avant, assure-toi que le chemin de la variable rep termine par "/".

Edit : pathseparator, c'est pour rendre le code fonctionnel quelque soit le système. Toi tu sais que tes séparateurs sont "/" donc, ce n'est pas ça. Attention, sur les anciens macs, le chemin est séparé par des ":". Mais je pense qu'il y aurait eu un bug si c'était ça...

Mais pourquoi tu ne postes pas le code entier ?

car j'utilise ton code sans le modifier :)

Voici le code en question j'ai testé avec / et \ comme je suis sur MAC mais ça n'a rien changé. J'ai aussi testé mon répertoire directement dans rep mais pareil.

Sub Assembler()

rep = ThisWorkbook.Path & "\exempleforum\"

fichier = Dir(rep & "*.xls*")
While fichier <> ""
Set wb = Workbooks.Open(rep & fichier)
With wb.Sheets(1).UsedRange
t = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
End With
With ThisWorkbook.Sheets(1)
If .Cells(1, 1) = "" Then .Rows(1).Value = wb.Sheets(1).Rows(1).Value
nvl = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(nvl, 1).Resize(UBound(t), UBound(t, 2)) = t
End With
wb.Close True
fichier = Dir
Wend

ThisWorkbook.Save

End Sub
Rechercher des sujets similaires à "assembler fichiers fichier seul classeur"