Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri dans une variable tableau

5 réponses
Avatar
Mima
Bonjour la communauté

Dans un formulaire, j'ai un combobox.
Pour en définir la propriété "list", j'ai une routine qui passe en revue
toutes les cellules d'une colonne et qui récupère dans une variable tableau
uniquement les nouvelles valeurs.
Jusque là, pas de problème. J'obtient le résultat recherché.
Je souhaiterai que la liste affichée dans le combobox soit triée par ordre
alphabétique.
J'ai bien une solution qui consiste à coller les valeurs de ma variable
tableau sur une feuille, effectuer le tri sur cette feuille et réaffecter le
tableau à la variable, mais je pense qu'il doit être possible de faire le
tri directement dans la variable.
Et là, je ne trouve rien dans l'aide...
Si quelqu'un à une solution, d'avance je l'en remercie

5 réponses

Avatar
Daniel.C
Bonjour.
J'ai récupéré la macro suivante sur www.ozgrid.com :

Sub SortArray()
Dim MyArray(10) As String
Dim lLoop As Long, lLoop2 As Long
Dim str1 As String
Dim str2 As String

'Fill array
For lLoop = 0 To 9
If lLoop = 0 Then
MyArray(lLoop) = "Zoo"
Else
MyArray(lLoop) = Choose(lLoop, "Farm", "Paddock", "Sheep", _
"Cow", "Bird", "Mice", "Chicken", "Fence", "Post",
"Lamb")
End If
Next lLoop

'Output unsorted array
Range("A1:A" & UBound(MyArray) + 1) = _
WorksheetFunction.Transpose(MyArray)


'Sort array
For lLoop = 0 To UBound(MyArray)
For lLoop2 = lLoop To UBound(MyArray)
If UCase(MyArray(lLoop2)) < UCase(MyArray(lLoop)) Then
str1 = MyArray(lLoop)
str2 = MyArray(lLoop2)
MyArray(lLoop) = str2
MyArray(lLoop2) = str1
End If
Next lLoop2
Next lLoop

'Output sorted array
Range("B1:B" & UBound(MyArray) + 1) _
= WorksheetFunction.Transpose(MyArray)

End Subà adapter, toutefoi, à moins que tu ne veuilles trier un
zoo.Cordialement.Daniel"Mima" a écrit dans le
message de news:
Bonjour la communauté

Dans un formulaire, j'ai un combobox.
Pour en définir la propriété "list", j'ai une routine qui passe en revue
toutes les cellules d'une colonne et qui récupère dans une variable
tableau uniquement les nouvelles valeurs.
Jusque là, pas de problème. J'obtient le résultat recherché.
Je souhaiterai que la liste affichée dans le combobox soit triée par ordre
alphabétique.
J'ai bien une solution qui consiste à coller les valeurs de ma variable
tableau sur une feuille, effectuer le tri sur cette feuille et réaffecter
le tableau à la variable, mais je pense qu'il doit être possible de faire
le tri directement dans la variable.
Et là, je ne trouve rien dans l'aide...
Si quelqu'un à une solution, d'avance je l'en remercie



Avatar
Mima
Merci Daniel.C. pour ta prompt réponse.
C'est exactement le résultat que je cherchai.
Je n'ai eu qu'à changer le nom de la variable tableau
Encore merci !


"Daniel.C" a écrit dans le message de news:

Bonjour.
J'ai récupéré la macro suivante sur www.ozgrid.com :

Sub SortArray()
Dim MyArray(10) As String
Dim lLoop As Long, lLoop2 As Long
Dim str1 As String
Dim str2 As String

'Fill array
For lLoop = 0 To 9
If lLoop = 0 Then
MyArray(lLoop) = "Zoo"
Else
MyArray(lLoop) = Choose(lLoop, "Farm", "Paddock", "Sheep", _
"Cow", "Bird", "Mice", "Chicken", "Fence", "Post",
"Lamb")
End If
Next lLoop

'Output unsorted array
Range("A1:A" & UBound(MyArray) + 1) = _
WorksheetFunction.Transpose(MyArray)


'Sort array
For lLoop = 0 To UBound(MyArray)
For lLoop2 = lLoop To UBound(MyArray)
If UCase(MyArray(lLoop2)) < UCase(MyArray(lLoop)) Then
str1 = MyArray(lLoop)
str2 = MyArray(lLoop2)
MyArray(lLoop) = str2
MyArray(lLoop2) = str1
End If
Next lLoop2
Next lLoop

'Output sorted array
Range("B1:B" & UBound(MyArray) + 1) _
= WorksheetFunction.Transpose(MyArray)

End Subà adapter, toutefoi, à moins que tu ne veuilles trier un
zoo.Cordialement.Daniel"Mima" a écrit dans le
message de news:
Bonjour la communauté

Dans un formulaire, j'ai un combobox.
Pour en définir la propriété "list", j'ai une routine qui passe en revue
toutes les cellules d'une colonne et qui récupère dans une variable
tableau uniquement les nouvelles valeurs.
Jusque là, pas de problème. J'obtient le résultat recherché.
Je souhaiterai que la liste affichée dans le combobox soit triée par
ordre alphabétique.
J'ai bien une solution qui consiste à coller les valeurs de ma variable
tableau sur une feuille, effectuer le tri sur cette feuille et réaffecter
le tableau à la variable, mais je pense qu'il doit être possible de faire
le tri directement dans la variable.
Et là, je ne trouve rien dans l'aide...
Si quelqu'un à une solution, d'avance je l'en remercie







Avatar
JB
Bonjour,

Private Sub UserForm_Initialize()
Dim temp()
temp = Range("liste3") ' liste tableau temp (1 To n,1 To 1) ou
temp = Range([B2], [B2].End(xlDown))
Call tri(temp, 1, UBound(temp, 1))
Me.ListBox1.List = temp
End Sub

Sub tri(a(), gauc, droi) ' Quick sort
ref = a((gauc + droi) 2, 1)
g = gauc: d = droi
Do
Do While a(g, 1) < ref: g = g + 1: Loop
Do While ref < a(d, 1): d = d - 1: Loop
If g <= d Then
temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = 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

http://boisgontierjacques.free.fr/pages_site/formulairelistetriee.htm#ListeT riee

JB
http://boisgontierjacques.free.fr/

On 18 mar, 11:02, "Mima" wrote:
Bonjour la communauté

Dans un formulaire, j'ai un combobox.
Pour en définir la propriété "list", j'ai une routine qui passe en r evue
toutes les cellules d'une colonne et qui récupère dans une variable ta bleau
uniquement les nouvelles valeurs.
Jusque là, pas de problème. J'obtient le résultat recherché.
Je souhaiterai que la liste affichée dans le combobox soit triée par o rdre
alphabétique.
J'ai bien une solution qui consiste à coller les valeurs de ma variable
tableau sur une feuille, effectuer le tri sur cette feuille et réaffecte r le
tableau à la variable, mais je pense qu'il doit être possible de faire le
tri directement dans la variable.
Et là, je ne trouve rien dans l'aide...
Si quelqu'un à une solution, d'avance je l'en remercie


Avatar
JB
Bonjour,

Cette méthode de tri (bubble sort) est la plus lente qui existe:
tempsTri=NbItems*NbItems.
Pour un nombre d'items important, plutôt utiliser quick-sort.

JB
On 18 mar, 12:06, "Mima" wrote:
Merci Daniel.C. pour ta prompt réponse.
C'est exactement le résultat que je cherchai.
Je n'ai eu qu'à changer le nom de la variable tableau
Encore merci !

"Daniel.C" a écrit dans le message de news:




Bonjour.
J'ai récupéré la macro suivante surwww.ozgrid.com:

Sub SortArray()
Dim MyArray(10) As String
Dim lLoop As Long, lLoop2 As Long
Dim str1 As String
Dim str2 As String

   'Fill array
   For lLoop = 0 To 9
       If lLoop = 0 Then
         MyArray(lLoop) = "Zoo"
       Else
           MyArray(lLoop) = Choose(lLoop, "Farm", "Paddock ", "Sheep", _
                       "Cow", "Bird", "Mice", "C hicken", "Fence", "Post",
"Lamb")
       End If
   Next lLoop

   'Output unsorted array
   Range("A1:A" & UBound(MyArray) + 1) = _
   WorksheetFunction.Transpose(MyArray)

   'Sort array
   For lLoop = 0 To UBound(MyArray)
      For lLoop2 = lLoop To UBound(MyArray)
           If UCase(MyArray(lLoop2)) < UCase(MyArray(lLoop)) Then
               str1 = MyArray(lLoop)
               str2 = MyArray(lLoop2)
               MyArray(lLoop) = str2
               MyArray(lLoop2) = str1
           End If
       Next lLoop2
   Next lLoop

   'Output sorted array
   Range("B1:B" & UBound(MyArray) + 1) _
   = WorksheetFunction.Transpose(MyArray)

End Subà adapter, toutefoi, à moins que tu ne veuilles trier un
zoo.Cordialement.Daniel"Mima" a écrit dans l e
message denews: etqWn8NiIHA.6__BEGIN_MASK_n#9g02mG7!__...__END_MASK_i?a6 3jfAD$
Bonjour la communauté

Dans un formulaire, j'ai un combobox.
Pour en définir la propriété "list", j'ai une routine qui passe e n revue
toutes les cellules d'une colonne et qui récupère dans une variable
tableau uniquement les nouvelles valeurs.
Jusque là, pas de problème. J'obtient le résultat recherché.
Je souhaiterai que la liste affichée dans le combobox soit triée pa r
ordre alphabétique.
J'ai bien une solution qui consiste à coller les valeurs de ma variab le
tableau sur une feuille, effectuer le tri sur cette feuille et réaffe cter
le tableau à la variable, mais je pense qu'il doit être possible de faire
le tri directement dans la variable.
Et là, je ne trouve rien dans l'aide...
Si quelqu'un à une solution, d'avance je l'en remercie- Masquer le te xte des messages précédents -



- Afficher le texte des messages précédents -




Avatar
Mima
Bonjour,

Je vais étudier aussi cette procédure, mais il est vrai que dans le cas
présent, je n'ai qu'un petit nombre d'items et que le tri effectué avec la
méthode proposé par Daniel.C est presque instantané.
Merci JB
Mima

"JB" a écrit dans le message de news:

Bonjour,

Private Sub UserForm_Initialize()
Dim temp()
temp = Range("liste3") ' liste tableau temp (1 To n,1 To 1) ou
temp = Range([B2], [B2].End(xlDown))
Call tri(temp, 1, UBound(temp, 1))
Me.ListBox1.List = temp
End Sub

Sub tri(a(), gauc, droi) ' Quick sort
ref = a((gauc + droi) 2, 1)
g = gauc: d = droi
Do
Do While a(g, 1) < ref: g = g + 1: Loop
Do While ref < a(d, 1): d = d - 1: Loop
If g <= d Then
temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = 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

http://boisgontierjacques.free.fr/pages_site/formulairelistetriee.htm#ListeTriee

JB
http://boisgontierjacques.free.fr/

On 18 mar, 11:02, "Mima" wrote:
Bonjour la communauté

Dans un formulaire, j'ai un combobox.
Pour en définir la propriété "list", j'ai une routine qui passe en revue
toutes les cellules d'une colonne et qui récupère dans une variable
tableau
uniquement les nouvelles valeurs.
Jusque là, pas de problème. J'obtient le résultat recherché.
Je souhaiterai que la liste affichée dans le combobox soit triée par ordre
alphabétique.
J'ai bien une solution qui consiste à coller les valeurs de ma variable
tableau sur une feuille, effectuer le tri sur cette feuille et réaffecter
le
tableau à la variable, mais je pense qu'il doit être possible de faire le
tri directement dans la variable.
Et là, je ne trouve rien dans l'aide...
Si quelqu'un à une solution, d'avance je l'en remercie