Voila j'ai un code qui me permet de regrouper plusieurs fichiers Excel :
J'ouvre le fichier, un UserForm s'ouvre et me demande de chercher un chemin d'accés d'un dossier dans lequel sont present plusieurs fichier Excel
Lorsque le chemin est spécifier, je fais "Ok" et tout les fichier et chacune des feuilles de chaque classeurs sont regroupées sur une même feuille.
Voici le code que j'ai :
Le UserForm :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub Workbook_Open() Recherche.Show End Sub
-La TextBox affiche le chemin d'accés choisi
-CommandButton1 permet d'afficher une fenêtre pour chercher le dossier dans lequel sont les fichiers Excel
-CommandButton2 permet de valider le chemin d'accés choisi
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 Private Const BIF_RETURNONLYFSDIRS = 1 Private Const BIF_DONTGOBELOWDOMAIN = 2 Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _ ByVal lpBuffer As String) As Long Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _ ByVal lpString2 As String) As Long Private Type BrowseInfo hWndOwner As Long pIDLRoot As Long pszDisplayName As Long lpszTitle As Long ulFlags As Long lpfnCallback As Long lParam As Long iImage As Long End Type Private Sub CommandButton1_Click() Dim lpIDList As Long Dim strBuffer As String Dim strTitre As String Dim tBrowseInfo As BrowseInfo Dim SelectFolder As String Dim Handle As Long strTitre = Titre With tBrowseInfo .hWndOwner = Handle .lpszTitle = lstrcat(strTitre, "") .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN End With lpIDList = SHBrowseForFolder(tBrowseInfo) If (lpIDList) Then strBuffer = String(260, vbNullChar) SHGetPathFromIDList lpIDList, strBuffer SelectFolder = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1) End If Recherche.TextBox1.Text = SelectFolder & "\" End Sub Private Sub CommandButton2_Click() Appel End Sub
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 Public msg As String Sub Appel() 'A ADAPTER Dim Chemin As String Application.ScreenUpdating = False Chemin = Recherche.TextBox1.Text Ouvrir Chemin Application.ScreenUpdating = True If msg <> "" Then _ MsgBox "Pour des raisons de protection ou autres, n'ont pu être copiées " & vbCrLf & msg End Sub Sub Ouvrir(Chemin As String) Dim NomFich As String Dim CL2 As Workbook 'fichier copié Application.DisplayAlerts = False 'Evite les messages d'Excel 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts Application.EnableEvents = False NomFich = Dir(Chemin & "*.xls") If NomFich = "" Then MsgBox "Aucun fichier trouvé dans " & Chemin Exit Sub End If Do While NomFich <> "" Set CL2 = Workbooks.Open(Chemin & NomFich) DoEvents Copie CL2 CL2.Close False DoEvents ThisWorkbook.Save 'enregistrement du classeur après chaque copie DoEvents NomFich = Dir Loop Application.EnableEvents = True Application.DisplayAlerts = True End Sub Sub Copie(CL2 As Workbook) Dim LaFeuille As Worksheet, FL1 As Worksheet, derlig As Long Set FL1 = ThisWorkbook.Worksheets("feuil1") 'feuille où les données sont collées For Each LaFeuille In CL2.Worksheets 'parcours du classeur à copier 'On vérifie que la feuille n'est pas vide If Not (LaFeuille.UsedRange.Address = "$A$1" And Range("A1") = "") Then derlig = FL1.Range("A" & Rows.Count).End(xlUp).Row + 1 'première ligne vide On Error Resume Next LaFeuille.UsedRange.Copy FL1.Cells(derlig, 1) DoEvents If Err <> 0 Then msg = msg & "Classeur " & NomFich & " feuille " & LaFeuile.Name & vbCrLf On Error GoTo 0 End If End If Next End Sub
Tout marche bien mais je voudrais l'adapter pou une autre utilisation:
Simplement j'ai plusieurs fichiers dans un même dossier et je voudrai que les fichiers soit mis sur une feuille différent dans le classeur au lieu de tout mettre sur la même feuille :
Au départ j'ai le fichier A et le fichier B
Je voudrai un fichier C avec une feuille A et une feuille B
J'espère avoir été assai clair
Merci d'avance
Partager