[VBA] Comment trier Aphlanumériquement un Scripting.Dictionary
8 réponses
Emile63
Bonjour =E0 tous,
La macro ci-dessous me g=E9n=E8re sur une feuille s=E9par=E9e du classeur 5=
listes r=E9capitulatives et sans doublons, puis=E9es sur une grande base d=
e de donn=E9e (Feuil1) tr=E8s r=E9p=E9titives (Certaines colonnes sont num=
=E9riques, d'autres alphab=E9tiques, et d'autres alphanum=E9riques). Je sou=
haiterais les trier avant de les afficher mais je bute avec =E7a.
Si quelqu'un pouvait me donner un coup de main. :-)
De plus, je vois bien que mon code est plut=F4t chaotique, et pourrait sans=
doute =EAtre affin=E9. L=E0 encore, je suis ouvert =E0 toutes propositions=
permettant de gagner en efficacit=E9.
'-------------------------------------
Sub Lister()
' Insertion des diff=E9rents enregistrements, et tri alphanum=E9rique
Dim MyArray(0 To 5) As String, Col$, x%, y%, i%, Z%
i =3D 1 'Boucle sur les 5 colonnes C,D,E,F
x =3D 0 'Item de la colonne
y =3D 1 'Colonne cible de la Feuil6 (Avec une col. vide entre-deux)
Z =3D 3 'N=B0 de la colonne ou il faut compter le NB d'items
For i =3D 1 To 5
Feuil1.Activate
Col =3D MyArray(x)
Liste =3D Feuil1.Range(Col & "5").Address(RowAbsolute:=3DFalse, ColumnA=
bsolute:=3DFalse)
Set a =3D Feuil1.Range(Liste, Cells(Rows.Count, Z).End(xlUp))
Set MonDico =3D CreateObject("Scripting.Dictionary")
For Each C In a
If Not MonDico.Exists(C.Value) Then MonDico.Add C.Value, C.Va=
lue
Next C
Feuil6.Activate
With ActiveSheet
.Cells(1, y).Select
.Cells(1, y).Resize(MonDico.Count, 1) =3D Applicati=
on.Transpose(MonDico.keys)
End With
Nom_Ent=EAte =3D ActiveCell.Value
Set MaSelection =3D ActiveCell.CurrentRegion
MaSelection.Offset(1, 0).Resize(MaSelection.Rows.Count - 1,=
MaSelection.Columns.Count).Select
Set MaSelection =3D Selection
MaSelection.Name =3D Nom_Ent=EAte
MonDico.RemoveAll
Set MonDico =3D Nothing
x =3D x + 1
y =3D y + 2
Z =3D Z + 1
Next
End Sub
'-------------------------------------
Je vous remercie d'avance pour votre aide et conseils. :-)
Cordialement,
Emile
With FD With .Range("C:G") DerLig = .Find("*", LookIn:=xlValues, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For A = 3 To 7 'Colonne C à E Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A)) Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(, B), True With FS.Range("A1").Offset(, B).EntireColumn .Sort Key1:=FS.Range("A1").Offset(, B), order1:=xlDescending, Header:=xlNo End With B = B + 1 Next End With End With Application.ScreenUpdating = True Application.ScreenUpdating = True
End Sub '---------------------------------------------
MichD --------------------------------------------------------------- "Emile63" a écrit dans le message de groupe de discussion :
Bonjour à tous,
La macro ci-dessous me génère sur une feuille séparée du classeur 5 listes récapitulatives et sans doublons, puisées sur une grande base de de donnée (Feuil1) très répétitives (Certaines colonnes sont numériques, d'autres alphabétiques, et d'autres alphanumériques). Je souhaiterais les trier avant de les afficher mais je bute avec ça. Si quelqu'un pouvait me donner un coup de main. :-) De plus, je vois bien que mon code est plutôt chaotique, et pourrait sans doute être affiné. Là encore, je suis ouvert à toutes propositions permettant de gagner en efficacité.
'------------------------------------- Sub Lister() ' Insertion des différents enregistrements, et tri alphanumérique Dim MyArray(0 To 5) As String, Col$, x%, y%, i%, Z%
i = 1 'Boucle sur les 5 colonnes C,D,E,F x = 0 'Item de la colonne y = 1 'Colonne cible de la Feuil6 (Avec une col. vide entre-deux) Z = 3 'N° de la colonne ou il faut compter le NB d'items
For i = 1 To 5 Feuil1.Activate Col = MyArray(x) Liste = Feuil1.Range(Col & "5").Address(RowAbsolute:úlse, ColumnAbsolute:úlse) Set a = Feuil1.Range(Liste, Cells(Rows.Count, Z).End(xlUp)) Set MonDico = CreateObject("Scripting.Dictionary") For Each C In a If Not MonDico.Exists(C.Value) Then MonDico.Add C.Value, C.Value Next C Feuil6.Activate With ActiveSheet .Cells(1, y).Select .Cells(1, y).Resize(MonDico.Count, 1) = Application.Transpose(MonDico.keys) End With Nom_Entête = ActiveCell.Value Set MaSelection = ActiveCell.CurrentRegion MaSelection.Offset(1, 0).Resize(MaSelection.Rows.Count - 1, MaSelection.Columns.Count).Select Set MaSelection = Selection MaSelection.Name = Nom_Entête MonDico.RemoveAll Set MonDico = Nothing x = x + 1 y = y + 2 Z = Z + 1 Next End Sub
'-------------------------------------
Je vous remercie d'avance pour votre aide et conseils. :-) Cordialement, Emile
Bonjour,
Adapte le nom des feuilles.
P.S. Décrire ton problème au complet sans tenir compte
de la procédure que tu soumets est une excellente habitude
à prendre.
'---------------------------------------------
Sub MichD()
Dim A As Long, B As Long, DerLig As Long
Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données
Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD
With .Range("C:G")
DerLig = .Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For A = 3 To 7 'Colonne C à E
Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A))
Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(,
B), True
With FS.Range("A1").Offset(, B).EntireColumn
.Sort Key1:=FS.Range("A1").Offset(, B),
order1:=xlDescending, Header:=xlNo
End With
B = B + 1
Next
End With
End With
Application.ScreenUpdating = True
Application.ScreenUpdating = True
End Sub
'---------------------------------------------
MichD
---------------------------------------------------------------
"Emile63" a écrit dans le message de groupe de discussion :
fa2ea5ab-f036-4c67-9ffe-90c9c8298f0c@googlegroups.com...
Bonjour à tous,
La macro ci-dessous me génère sur une feuille séparée du classeur 5 listes
récapitulatives et sans doublons, puisées sur une grande base de de donnée
(Feuil1) très répétitives (Certaines colonnes sont numériques, d'autres
alphabétiques, et d'autres alphanumériques). Je souhaiterais les trier avant
de les afficher mais je bute avec ça.
Si quelqu'un pouvait me donner un coup de main. :-)
De plus, je vois bien que mon code est plutôt chaotique, et pourrait sans
doute être affiné. Là encore, je suis ouvert à toutes propositions
permettant de gagner en efficacité.
'-------------------------------------
Sub Lister()
' Insertion des différents enregistrements, et tri alphanumérique
Dim MyArray(0 To 5) As String, Col$, x%, y%, i%, Z%
i = 1 'Boucle sur les 5 colonnes C,D,E,F
x = 0 'Item de la colonne
y = 1 'Colonne cible de la Feuil6 (Avec une col. vide entre-deux)
Z = 3 'N° de la colonne ou il faut compter le NB d'items
For i = 1 To 5
Feuil1.Activate
Col = MyArray(x)
Liste = Feuil1.Range(Col & "5").Address(RowAbsolute:úlse,
ColumnAbsolute:úlse)
Set a = Feuil1.Range(Liste, Cells(Rows.Count, Z).End(xlUp))
Set MonDico = CreateObject("Scripting.Dictionary")
For Each C In a
If Not MonDico.Exists(C.Value) Then MonDico.Add C.Value,
C.Value
Next C
Feuil6.Activate
With ActiveSheet
.Cells(1, y).Select
.Cells(1, y).Resize(MonDico.Count, 1) =
Application.Transpose(MonDico.keys)
End With
Nom_Entête = ActiveCell.Value
Set MaSelection = ActiveCell.CurrentRegion
MaSelection.Offset(1, 0).Resize(MaSelection.Rows.Count - 1,
MaSelection.Columns.Count).Select
Set MaSelection = Selection
MaSelection.Name = Nom_Entête
MonDico.RemoveAll
Set MonDico = Nothing
x = x + 1
y = y + 2
Z = Z + 1
Next
End Sub
'-------------------------------------
Je vous remercie d'avance pour votre aide et conseils. :-)
Cordialement,
Emile
With FD With .Range("C:G") DerLig = .Find("*", LookIn:=xlValues, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For A = 3 To 7 'Colonne C à E Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A)) Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(, B), True With FS.Range("A1").Offset(, B).EntireColumn .Sort Key1:=FS.Range("A1").Offset(, B), order1:=xlDescending, Header:=xlNo End With B = B + 1 Next End With End With Application.ScreenUpdating = True Application.ScreenUpdating = True
End Sub '---------------------------------------------
MichD --------------------------------------------------------------- "Emile63" a écrit dans le message de groupe de discussion :
Bonjour à tous,
La macro ci-dessous me génère sur une feuille séparée du classeur 5 listes récapitulatives et sans doublons, puisées sur une grande base de de donnée (Feuil1) très répétitives (Certaines colonnes sont numériques, d'autres alphabétiques, et d'autres alphanumériques). Je souhaiterais les trier avant de les afficher mais je bute avec ça. Si quelqu'un pouvait me donner un coup de main. :-) De plus, je vois bien que mon code est plutôt chaotique, et pourrait sans doute être affiné. Là encore, je suis ouvert à toutes propositions permettant de gagner en efficacité.
'------------------------------------- Sub Lister() ' Insertion des différents enregistrements, et tri alphanumérique Dim MyArray(0 To 5) As String, Col$, x%, y%, i%, Z%
i = 1 'Boucle sur les 5 colonnes C,D,E,F x = 0 'Item de la colonne y = 1 'Colonne cible de la Feuil6 (Avec une col. vide entre-deux) Z = 3 'N° de la colonne ou il faut compter le NB d'items
For i = 1 To 5 Feuil1.Activate Col = MyArray(x) Liste = Feuil1.Range(Col & "5").Address(RowAbsolute:úlse, ColumnAbsolute:úlse) Set a = Feuil1.Range(Liste, Cells(Rows.Count, Z).End(xlUp)) Set MonDico = CreateObject("Scripting.Dictionary") For Each C In a If Not MonDico.Exists(C.Value) Then MonDico.Add C.Value, C.Value Next C Feuil6.Activate With ActiveSheet .Cells(1, y).Select .Cells(1, y).Resize(MonDico.Count, 1) = Application.Transpose(MonDico.keys) End With Nom_Entête = ActiveCell.Value Set MaSelection = ActiveCell.CurrentRegion MaSelection.Offset(1, 0).Resize(MaSelection.Rows.Count - 1, MaSelection.Columns.Count).Select Set MaSelection = Selection MaSelection.Name = Nom_Entête MonDico.RemoveAll Set MonDico = Nothing x = x + 1 y = y + 2 Z = Z + 1 Next End Sub
'-------------------------------------
Je vous remercie d'avance pour votre aide et conseils. :-) Cordialement, Emile
Emile63
Bonjour à tous, Et merci MichD pour ton aide et ta solution. C'est bien plus simple que le tortueux code que j'avais entrepris :-) Dans ton exemple, j'ai un petit soucis avec le titre de colonne, qui se m élange avec les données (tri), et d'autre part, je souhaite nommer les plages du même nom que le titre de leur colonne respectives. D'autre part, est-ce qu'il y a une raison pour que les lignes: Application.ScreenUpdating soient doublées? Encore merci pour ton support, en te souhaitant une très bonne journée. Emile
Bonjour à tous,
Et merci MichD pour ton aide et ta solution.
C'est bien plus simple que le tortueux code que j'avais entrepris :-)
Dans ton exemple, j'ai un petit soucis avec le titre de colonne, qui se m élange avec les données (tri), et d'autre part, je souhaite nommer les plages du même nom que le titre de leur colonne respectives.
D'autre part, est-ce qu'il y a une raison pour que les lignes:
Application.ScreenUpdating
soient doublées?
Encore merci pour ton support, en te souhaitant une très bonne journée.
Emile
Bonjour à tous, Et merci MichD pour ton aide et ta solution. C'est bien plus simple que le tortueux code que j'avais entrepris :-) Dans ton exemple, j'ai un petit soucis avec le titre de colonne, qui se m élange avec les données (tri), et d'autre part, je souhaite nommer les plages du même nom que le titre de leur colonne respectives. D'autre part, est-ce qu'il y a une raison pour que les lignes: Application.ScreenUpdating soient doublées? Encore merci pour ton support, en te souhaitant une très bonne journée. Emile
Emile63
MichD, Je souhaitais encore te demander s'il est possible de ne copier que les valeurs et pas les formats. Merci pour ta sollicitude, Cordialement, Emile
MichD, Je souhaitais encore te demander s'il est possible de ne copier que les valeurs et pas les formats.
Merci pour ta sollicitude,
Cordialement,
Emile
MichD, Je souhaitais encore te demander s'il est possible de ne copier que les valeurs et pas les formats. Merci pour ta sollicitude, Cordialement, Emile
Fredo P.
Bonjour Emile
D'autre part, est-ce qu'il y a une raison pour que les lignes: Application.ScreenUpdating soient doublées? §§Oui cela m'intéresse aussi
Bonjour Emile
D'autre part, est-ce qu'il y a une raison pour que les lignes:
Application.ScreenUpdating
soient doublées?
§§Oui cela m'intéresse aussi
D'autre part, est-ce qu'il y a une raison pour que les lignes: Application.ScreenUpdating soient doublées? §§Oui cela m'intéresse aussi
MichD
'------------------------------------------------- Sub MichD() Dim A As Long, B As Long, DerLig As Long Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD With .Range("C:G") DerLig = .Find("*", LookIn:=xlValues, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For A = 3 To 7 'Colonne C à E Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A)) Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(, B), True With FS.Range("A1") With .Offset(, B).EntireColumn .Sort Key1:=FS.Range("A1").Offset(, B), _ order1:=xlAscending, Header:=xlYes .ClearFormats End With .Offset(, B).Resize(DerLig).Name = .Offset(, B).Value B = B + 1 End With Next End With End With Application.ScreenUpdating = True Application.ScreenUpdating = True
End Sub '------------------------------------------------
'-------------------------------------------------
Sub MichD()
Dim A As Long, B As Long, DerLig As Long
Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données
Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD
With .Range("C:G")
DerLig = .Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For A = 3 To 7 'Colonne C à E
Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A))
Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(,
B), True
With FS.Range("A1")
With .Offset(, B).EntireColumn
.Sort Key1:=FS.Range("A1").Offset(, B), _
order1:=xlAscending, Header:=xlYes
.ClearFormats
End With
.Offset(, B).Resize(DerLig).Name = .Offset(, B).Value
B = B + 1
End With
Next
End With
End With
Application.ScreenUpdating = True
Application.ScreenUpdating = True
End Sub
'------------------------------------------------
'------------------------------------------------- Sub MichD() Dim A As Long, B As Long, DerLig As Long Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD With .Range("C:G") DerLig = .Find("*", LookIn:=xlValues, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For A = 3 To 7 'Colonne C à E Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A)) Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(, B), True With FS.Range("A1") With .Offset(, B).EntireColumn .Sort Key1:=FS.Range("A1").Offset(, B), _ order1:=xlAscending, Header:=xlYes .ClearFormats End With .Offset(, B).Resize(DerLig).Name = .Offset(, B).Value B = B + 1 End With Next End With End With Application.ScreenUpdating = True Application.ScreenUpdating = True
End Sub '------------------------------------------------
Dans le cas où dans la plage de la feuille résultat, le nombre de lignes de chacune des colonnes est différentes...
'--------------------------------------------------------------------- Sub MichD() Dim A As Long, B As Long, DerLig As Long, Ligne As Long Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD With .Range("C:G") DerLig = .Find("*", LookIn:=xlValues, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For A = 3 To 7 'Colonne C à E Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A)) Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(, B), True With FS.Range("A1") With .Offset(, B) Ligne = .Cells(Rows.Count, 1).End(xlUp).Row End With With .Offset(, B).EntireColumn .Sort Key1:=FS.Range("A1").Offset(, B), _ order1:=xlAscending, Header:=xlYes .ClearFormats End With .Offset(, B).Resize(Ligne).Name = .Offset(, B).Value B = B + 1 End With Next End With End With Application.ScreenUpdating = True Application.ScreenUpdating = True
End Sub '---------------------------------------------------------------------
MichD --------------------------------------------------------------- "MichD" a écrit dans le message de groupe de discussion : n2kadj$428$
'------------------------------------------------- Sub MichD() Dim A As Long, B As Long, DerLig As Long Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD With .Range("C:G") DerLig = .Find("*", LookIn:=xlValues, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For A = 3 To 7 'Colonne C à E Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A)) Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(, B), True With FS.Range("A1") With .Offset(, B).EntireColumn .Sort Key1:=FS.Range("A1").Offset(, B), _ order1:=xlAscending, Header:=xlYes .ClearFormats End With .Offset(, B).Resize(DerLig).Name = .Offset(, B).Value B = B + 1 End With Next End With End With Application.ScreenUpdating = True Application.ScreenUpdating = True
End Sub '------------------------------------------------
Dans le cas où dans la plage de la feuille résultat, le nombre de
lignes de chacune des colonnes est différentes...
'---------------------------------------------------------------------
Sub MichD()
Dim A As Long, B As Long, DerLig As Long, Ligne As Long
Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données
Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD
With .Range("C:G")
DerLig = .Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For A = 3 To 7 'Colonne C à E
Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A))
Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(,
B), True
With FS.Range("A1")
With .Offset(, B)
Ligne = .Cells(Rows.Count, 1).End(xlUp).Row
End With
With .Offset(, B).EntireColumn
.Sort Key1:=FS.Range("A1").Offset(, B), _
order1:=xlAscending, Header:=xlYes
.ClearFormats
End With
.Offset(, B).Resize(Ligne).Name = .Offset(, B).Value
B = B + 1
End With
Next
End With
End With
Application.ScreenUpdating = True
Application.ScreenUpdating = True
End Sub
'---------------------------------------------------------------------
MichD
---------------------------------------------------------------
"MichD" a écrit dans le message de groupe de discussion :
n2kadj$428$1@speranza.aioe.org...
'-------------------------------------------------
Sub MichD()
Dim A As Long, B As Long, DerLig As Long
Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données
Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD
With .Range("C:G")
DerLig = .Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For A = 3 To 7 'Colonne C à E
Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A))
Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(,
B), True
With FS.Range("A1")
With .Offset(, B).EntireColumn
.Sort Key1:=FS.Range("A1").Offset(, B), _
order1:=xlAscending, Header:=xlYes
.ClearFormats
End With
.Offset(, B).Resize(DerLig).Name = .Offset(, B).Value
B = B + 1
End With
Next
End With
End With
Application.ScreenUpdating = True
Application.ScreenUpdating = True
End Sub
'------------------------------------------------
Dans le cas où dans la plage de la feuille résultat, le nombre de lignes de chacune des colonnes est différentes...
'--------------------------------------------------------------------- Sub MichD() Dim A As Long, B As Long, DerLig As Long, Ligne As Long Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD With .Range("C:G") DerLig = .Find("*", LookIn:=xlValues, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For A = 3 To 7 'Colonne C à E Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A)) Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(, B), True With FS.Range("A1") With .Offset(, B) Ligne = .Cells(Rows.Count, 1).End(xlUp).Row End With With .Offset(, B).EntireColumn .Sort Key1:=FS.Range("A1").Offset(, B), _ order1:=xlAscending, Header:=xlYes .ClearFormats End With .Offset(, B).Resize(Ligne).Name = .Offset(, B).Value B = B + 1 End With Next End With End With Application.ScreenUpdating = True Application.ScreenUpdating = True
End Sub '---------------------------------------------------------------------
MichD --------------------------------------------------------------- "MichD" a écrit dans le message de groupe de discussion : n2kadj$428$
'------------------------------------------------- Sub MichD() Dim A As Long, B As Long, DerLig As Long Dim FD As Worksheet, FS As Worksheet, Rg As Range
Set FD = Worksheets("Feuil1") 'Feuille des données Set FS = Worksheets("Feuil2") 'Feuille résultat
With FD With .Range("C:G") DerLig = .Find("*", LookIn:=xlValues, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For A = 3 To 7 'Colonne C à E Set Rg = FD.Range(FD.Cells(5, A), FD.Cells(DerLig, A)) Rg.AdvancedFilter xlFilterCopy, , FS.Range("A1").Offset(, B), True With FS.Range("A1") With .Offset(, B).EntireColumn .Sort Key1:=FS.Range("A1").Offset(, B), _ order1:=xlAscending, Header:=xlYes .ClearFormats End With .Offset(, B).Resize(DerLig).Name = .Offset(, B).Value B = B + 1 End With Next End With End With Application.ScreenUpdating = True Application.ScreenUpdating = True
End Sub '------------------------------------------------