Formulaire Recette - Trie ComboBox ordre alphabétique
Bonjour à tous !
Après avoir trouvé votre forum et aillant chercher un peu partout, je n'ai pas su trouver mon bonheur. C'est pour cela que je me permets de poster sur votre forum.
J'ai suivi un très bon tutoriel pour créer un formulaire permettant de gérer des recettes (ajout, création, images...), mais je reste bloqué pour le trie par ordre alphabétique d'une combobox.
-> https://cellulexcel.blogspot.fr/p/blog-page_15.html
Quand je choisis le type de plat, cela m'affiche dans la deuxième combobox la liste des recettes lié à ce type de plat. Or pour le moment la liste des plats n'est pas triée. J'aimerais donc, pour que ce soit plus pratique, trier la "combobox2" par ordre alphabétique.
Et jusqu’à aujourd'hui, je n'ai su mettre en place ce système ...
Je vous joints en fichier joints mon formulaire. Je pense que ce sera plus facile à comprendre
Merci d'avance pour votre aide.
Cordialement,
Wilfried.
Bonjour,
Voilà qui devrait pouvoir te trier la liste de ComboBox2 :
Private Sub ComboBox1_Change()
Dim j%, i%, ii%, k%, Tbl()
Nettoyage
Me.ComboBox2.Clear
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
With Ws
For j = 2 To NbLignes
If .Range("A" & j) = Me.ComboBox1 Then
ReDim Preserve Tbl(1, k)
Tbl(0, k) = .Range("B" & j): Tbl(1, k) = j: k = k + 1
End If
Next j
End With
If k > 0 Then
If k > 1 Then
ReDim Preserve Tbl(1, k)
For i = 0 To k - 2
For ii = i + 1 To k - 1
If Tbl(0, ii) < Tbl(0, i) Then
Tbl(0, k) = Tbl(0, ii): Tbl(1, k) = Tbl(1, ii)
Tbl(0, ii) = Tbl(0, i): Tbl(1, ii) = Tbl(1, i)
Tbl(0, i) = Tbl(0, k): Tbl(1, i) = Tbl(1, k)
End If
Next ii
Next i
ReDim Preserve Tbl(1, k - 1)
ComboBox2.Column = Tbl
Else
With ComboBox2
.AddItem Tbl(0, 0)
.List(0, 1) = Tbl(1, 0)
End With
End If
End If
End Sub
Se substitue à la procédure de même nom, dont j'ai juste un peu arrangé l'écriture du début, basculé le prélèvement des données sur un tableau, opéré le tri du tableau avant affectation à la Combo.
Sous quelque réserve car non testé, et non testable dans ton fichier actuel...
NB- Pénible de travailler sur ton code : indentation aléatoire, des lignes sautées à l'intérieur des procédures, procédures en désordre (non classées par VBA), déclarations de variables en balade au milieu du code exécutable, propriétés à définir par défaut qui le sont à l'exécution, et j'en passe très certainement... comme le système de Combo doublé ne me paraît pas du meilleur aloi pour le résultat recherché...)
Cordialement.
Hello MFerrand !
A première vue, ça a l'air de fonctionner !
MFerrand a écrit :NB- Pénible de travailler sur ton code : indentation aléatoire, des lignes sautées à l'intérieur des procédures, procédures en désordre (non classées par VBA), déclarations de variables en balade au milieu du code exécutable, propriétés à définir par défaut qui le sont à l'exécution, et j'en passe très certainement... comme le système de Combo doublé ne me paraît pas du meilleur aloi pour le résultat recherché...)
Cordialement.
- indentation aléatoire: Pour ça, je peux ré-indenter tout correctement (enfin je pense)..
- des lignes sautées à l'intérieur des procédures : ça doit être de mon ressort de résoudre ceci.
- propriétés à définir par défaut qui le sont à l'exécution, et j'en passe très certainement... comme le système de Combo doublé ne me paraît pas du meilleur aloi pour le résultat recherché...) : je serais près à modifier mon code, mais je t'avouerais qu'avec le peu de connaissances en VBA, cela risque d'être difficile. J'ai soif de connaissances, et suis prêt à être aiguiller pour améliorer tout ça
Pour le moment j'utilise beaucoup le "Copier/Coller" et j'ai un peu de mal à tout comprendre.
En tout cas merci de ta réponse !