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
| Sub Macro1()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim OS As Worksheet 'déclare la variable CS (Onglet Source)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Long 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim J As Long 'déclare la variable J (incrément)
Dim LI As Long 'déclare la variable LI (LIgne)
Dim TL As Variant 'déclare la variable TL (Tableau de la Ligne)
Application.ScreenUpdating = False 'empêche les rafraîchissements d'écran
Set CS = ThisWorkbook 'définit la classeur source CS
CA = CS.Path & "\" 'définit le chemin d'accès CA
Set OS = CS.Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
COL = 7 'définit la colonne de référence COL (à adapter à ton cas ici la colonne 7 = G)
TV = OS.Range("A1").CurrentRegion 'définit le tableau de valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
D(TV(I, COL)) = "" ' alimente le dictionnaire D avec la donnée en colonne 7 (=> colonne G) de la ligne de la boucle
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire sans doublons
For J = 0 To UBound(TMP) 'bpoucle 1 sur tous les éléments de TMP
Workbooks.Add 'ajoute un classeur vierge
Set CD = ActiveWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets(1) 'définit l'onglet destination OD
OD.Range("A1").Resize(1, UBound(TV, 2)).Value = Application.Index(TV, 1) 'envoie la première ligne du tableau des valeurs (les en-têtes)
LI = 2 'initialise la variable LI
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
'condition : si la données de la ligne I colonne COL de TV est égale à l'élément TMP(J) (le libellé déquipement)
If TV(I, COL) = TMP(J) Then
TL = Application.Index(TV, I) 'récupère dans TL les données de la ligne I
'envoie la ligne I du tableau des valeurs dans la cellule redimensionnée ligne LI colonne A de l'ongflet OD
OD.Cells(LI, "A").Resize(1, UBound(TV, 2)).Value = Application.Index(TV, I)
LI = LI + 1 'incrément la ligne LI
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
OD.Name = TMP(J) 'renomme l'onglet OD
CD.SaveAs CA & TMP(J), FileFormat:=xlWorkbookNormal 'enregistre le classeur destination dans le même dossier
CD.Close False 'verme le classeur destination
Next J 'prochain élément de la boucle 1
Application.ScreenUpdating = True 'permet les rafraîchissements d'écran
End Sub |
Partager