Marc L a écrit :
Steelson, ton code de mon côté oublie le premier élément et double le dernier …
Bonjour,
pour le dernier, non, tu as dû faire tourner 2 fois la macro, et comme les nombres sont aléatoires et changent à chaque fois ...
Par contre merci pour ta remarque, ma méthode omet le premier caractère / valeur !
Néanmoins la méthode précédentesub demo()est bien plus simple !
Ce qui suit c'est le code que j'utilise pour initialiser un userform de saisie prédictive.
Voici la correction en vba :
Option Explicit
Private Sub trier_sans_doublons()
Dim tmpRange() As Variant
Dim varRange() As Variant
Dim onglet As String, fichier As String, actuel As String, der, deb, i, Reponse
Dim dico As Object
Set dico = CreateObject("Scripting.Dictionary")
der = Sheets("base").[A65000].End(xlUp).Row
deb = 2
tmpRange = Sheets("base").Range("A" & deb & ":A" & der).Value
For i = 1 To UBound(tmpRange)
dico(tmpRange(i, 1)) = ""
Next i
varRange = dico.keys
QuickSort varRange
For i = 0 To UBound(varRange)
Sheets("listing").Range("A" & i + 2).Value = varRange(i)
Next i
ReDim tmpRange(0)
End Sub
Public Sub QuickSort(vArray As Variant, _
Optional ByVal inLow As Long = -1, _
Optional ByVal inHi As Long = -1)
Dim pivot As Variant
Dim tmpSwap As Variant
Dim tmpLow As Long
Dim tmpHi As Long
inLow = IIf(inLow = -1, LBound(vArray), inLow)
inHi = IIf(inHi = -1, UBound(vArray), inHi)
tmpLow = inLow
tmpHi = inHi
pivot = vArray((inLow + inHi) \ 2)
While (tmpLow <= tmpHi)
While (vArray(tmpLow) < pivot And tmpLow < inHi)
tmpLow = tmpLow + 1
Wend
While (pivot < vArray(tmpHi) And tmpHi > inLow)
tmpHi = tmpHi - 1
Wend
If (tmpLow <= tmpHi) Then
tmpSwap = vArray(tmpLow)
vArray(tmpLow) = vArray(tmpHi)
vArray(tmpHi) = tmpSwap
tmpLow = tmpLow + 1
tmpHi = tmpHi - 1
End If
Wend
If (inLow < tmpHi) Then QuickSort vArray, inLow, tmpHi
If (tmpLow < inHi) Then QuickSort vArray, tmpLow, inHi
End Sub