Bonjour a tous,

J'ai le code ci dessous qui me sert a regrouper plusieurs fichiers excel dans un seul fichier avec 1 par Onglet. Toutefois je souhaiterai nommer l'onglet cible avec le nom du fichier et pas en aléatoire comme c'est le cas dans ce code.
Je suis sur que les fichiers a importer n'ont pas le même nom, donc pas de risque de plantage a ce niveau.

En vous remerciant par avance,


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
Sub test()
 
'On crée une variable 'wbFusion' de type Classeur Excel
Dim wbFusion As Workbook
'On l'associe au classeur à partir duquel tu lances la macro
Set wbFusion = ThisWorkbook
 
'On crée une variable wbCible qui va correspondre tour à tour aux classeur à importer
Dim wbCible As Workbook
Dim shCible As Worksheet
 
'Afin de lui affecter des fichiers, l'utilisateur va les sélectionner via une boîte de dialogue
'NOTA : le With XXXXXXXXX évite de répéter plein de fois XXXXXXXXX lorsque l'on parle de la même chose ;)
With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Choisissez le(s) classeur(s) à importer"
    .Filters.Add "Classeur Excel", "*.xls,*.xls?" 'on filtre par tous les fichiers .xls et xls? avec '?' signifiant "1 caractère"
    .ButtonName = "Importer ce(s) classeur(s)"
    .AllowMultiSelect = True 'on autorise la sélection multiple
    .Show 'on affiche la fenêtre, on attend le retour de l'utilisateur pour continuer
 
    'on a réglé la boîte de dialogue, maintenant il faut traiter les données de l'utilisateur :
    'si l'utilisateur n'a pas sélectionné de fichier, on met un message d'erreur
    If .SelectedItems.Count = 0 Then
        MsgBox "Veuillez sélectionner au moins un fichier", vbExclamation, "Erreur"
    'Sinon, on traite :
    Else
        For i = 1 To .SelectedItems.Count
            'On ouvre chaque classeur un par un
            Set wbCible = Workbooks.Open(.SelectedItems(i))
            CouleurOnglet = RGB(Rnd * 255, Rnd * 255, Rnd * 255) 'on va mettre toutes les pages de ce classeur importées avec l'onglet de la même couleur
            CompteurClasseur = CompteurClasseur + 1 'on incrémente un compteur, facultatif
            'Pour chaque feuille du wbCible :
            For Each shCible In wbCible.Sheets
                shCible.Tab.Color = CouleurOnglet
                shCible.Name = Int(Rnd * 99999) 'nom aléatoire pour être certain qu'il n'y ait pas de doublon plantant la macro
                shCible.Copy after:=wbFusion.Sheets(wbFusion.Sheets.Count) 'on la copie à la fin de wbFusion
                CompteurFeuille = CompteurFeuille + 1 'on incrémente un compteur, facultatif
            Next shCible
            'On ferme le classeur sans enregistrer (on a changé le nom des pages avant copie)
            wbCible.Close SaveChanges:=False
        'On passe au classeur suivant
        Next i
        'Facultatif, à l'aide des compteurs, on indique à l'utilisateur que tout s'est bien passé
        MsgBox CompteurFeuille & " feuilles ont bien été importées, provenant de " & CompteurClasseur & " classeurs Excel.", vbInformation, "Import réussi"
    End If
End With
 
End Sub