Salut à tous,
Je suis débutante dans VBA et je dois réaliser un code qui permet de rassembler plusieurs fichiers excel en un seul.
Est ce que quelqu'un parmi vous a une idée?
Merci d'avance.
Salut à tous,
Je suis débutante dans VBA et je dois réaliser un code qui permet de rassembler plusieurs fichiers excel en un seul.
Est ce que quelqu'un parmi vous a une idée?
Merci d'avance.
Regarde ici http://www.developpez.net/forums/sho...d.php?t=442352, je pense que ça répond à ta question
Sinon, tu dis
Le code qui convient le plus à mon cas est le suivant:
Problème, qu'on j'exécute le module, il ne m'affiche aucune donnée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 ' ' Assemble à la suite plusieurs fichiers dans un classeur. ' Sub Assemble() Dim CL1 As Workbook, CL2 As Workbook Dim FL1 As Worksheet, FL2 As Worksheet Dim Fich As Variant, i As Byte, Rep$ 'Répertoire des fichiers à copier Rep = "C:\Documents and Settings\JQH\Bureau\Mari\boulot_test\test\" Set CL1 = ThisWorkbook 'Ajoute une feuille au classeur destiné à recevoir les données des autres classeurs CL1.Sheets.Add CL1.ActiveSheet.Name = "FeuilCumul" Set FL1 = CL1.ActiveSheet 'Instance le la feuille 'Crée le tableau des fichiers du répertoire Set Fich = application.FileSearch 'Ouverture des fichiers du répertoire With Fich .LookIn = Rep .FileType = msoFileTypeExcelWorkbooks If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To .FoundFiles.Count Set CL2 = Workbooks.Open(.FoundFiles(i)) DoEvents 'Parcours des feuilles de chaque classeur For Each FL2 In CL2.Worksheets 'Dernière ligne où coller les données copiées dans FL2 NoLigne = FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1 'Copie de la plage renseignée de chaque feuille du classeur FL2.Range(FL2.Cells(1, 1), _ FL2.Cells(FL2.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row, _ FL2.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row)).Copy _ FL1.Range("A" & NoLigne) DoEvents Set FL2 = Nothing Next CL2.Close False 'fermeture du classeur copié DoEvents Set CL2 = Nothing Next i Else MsgBox "Aucun fichier dans le répertoire " & Rep End If End With End Sub![]()
Effectivement !
Remplace ces lignes qui n'ont aucun sens
par celles-ci qui ont fait leurs preuvesFL2.Range(FL2.Cells(1, 1), _
FL2.Cells(FL2.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row, _
FL2.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row)).Copy _
FL1.Range("A" & NoLigne)
Comprends pas comment j'ai pu mettre ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FL2.Range("A1:" & Split(FL2.UsedRange.Address(0, 0), ":")(1)).Copy _ FL1.Range("A" & NoLigne)
Tu dis
Merci pour ton aide.
Est ce que tu peux m'expliquer STP ce bout de code que t'as mis (car je suis débutante) :
Mais juste un petit bémol, il me met des vides entre les contenus de chaque fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FL2.Range("A1:" & Split(FL2.UsedRange.Address(0, 0), ":")(1)).Copy _ FL1.Range("A" & NoLigne)
Merci encore.
Oui, je peux (!)Envoyé par mariafan
FL2.UsedRange.Address donne la plage de données de ta feuille en adresse absolue. Ex : "$A$1:$R$554"
FL2.UsedRange.Address(0, 0) donne la plage mais sans les $
Comme ça je peux faire un "Split" de la plage en utilisant les ":" comme séparateur
Plage = "A1:R554"
Tablo = Split("A1:R554", ":") transforme plage en tableau
où
Tablo(0) = "A1"
et
Tablo(1) = "R554"
et donc l'adresse de la fin des données.
Si j'étais certain que A1 soit renseigné, j'aurais pu simplifier... Comme je n'en sais rien, cette syntaxe me permet, si tu as des lignes ou des colonnes entièrement vides dans la plage de données, de prendre malgré tout la plage complète.
Es-tu certaine que les lignes sont complètement vides ? Ces trous ne sont-ils pas dans tes fichiers ? N'y a-t-il pas des lignes renseignées en dessous ?Envoyé par mariafan
A+
Partager