Trier sur 1 colonne une plage de cellules

  • Initiateur de la discussion Initiateur de la discussion decjan
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

decjan

Guest
Bonjour, à partir de la plage (B2:E12), je souhaite trier automatiquement les valeurs dans la colonne G par ordre alphabétique, sans avoir des doublons; voir le fichier joint. Pouvez-vous me donner la solution. Merci
 

Pièces jointes

Re : Trier sur 1 colonne une plage de cellules

Bonsour®
bienvenue
une proposition détaillées tout en formules et plage nommées ...
Capture.jpg
 

Pièces jointes

Re : Trier sur 1 colonne une plage de cellules

Bonsoir

En passant par un petit code VBA :

Source

VB:
Option Compare Text
Sub test()

Dim tab1() As Variant
Dim tab2() As Variant
cpt = 1
ReDim tab2(1 To cpt)

tab1 = Range(Cells(2, 2), Cells(Cells(65536, 1).End(xlUp).Row, 5))

For i = 1 To UBound(tab1, 1)
    For j = 1 To UBound(tab1, 2)
        tab2(cpt) = tab1(i, j)
        cpt = cpt + 1
        ReDim Preserve tab2(1 To cpt)
    Next j
Next i
i = Empty
j = Empty
cpt = Empty

' tri
tri tab2, 1, UBound(tab2)

' Nombre de ligne tableau restitution
Dim tab3() As Variant
cpt = 1
ReDim tab3(1 To cpt) As Variant

For i = 1 To UBound(tab2)
If tab2(i) <> "" Then
    Do While tab2(i) <> tab2(i + 1)
        tab3(cpt) = tab2(i)
            cpt = cpt + 1
            i = i + 1
            ReDim Preserve tab3(1 To cpt)
            If i = UBound(tab2) Then
                tab3(cpt) = tab2(i)
                Exit For
            End If
    Loop
End If
Next i

Cells(2, 9).Resize(UBound(tab3)) = Application.Transpose(tab3)

End Sub

VB:
Sub tri(a() As Variant, gauc, droi) ' Quick sort

  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call tri(a, g, droi)
  If gauc < d Then Call tri(a, gauc, d)
End Sub

Laurent
 

Pièces jointes

Dernière édition:
Re : Trier sur 1 colonne une plage de cellules

bonjour toutes & tous

si la plage ne change pas on pourrait écrire comme cela egalement....

Code:
Sub es()
 Dim c As Variant, m As Object
 Set m = CreateObject("Scripting.Dictionary")
 For Each c In Range("b2:e12")
 If Not m.Exists(c.Value) Then m.Add c.Value, c.Value
 Next c
 Range("g2:g49").ClearContents
 [g2].Resize(m.Count) = Application.Transpose(m.keys)
 [g2:g49].Sort Key1:=[g2], Order1:=xlAscending, Header:=xlGuess
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
651
  • Question Question
XL 2016 liste
Réponses
10
Affichages
333
Réponses
3
Affichages
221
Réponses
11
Affichages
327
Retour