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

Trier les valeurs d'une combobox

14 réponses
Avatar
Emile
Bonjour à tous,
Je cherche à trier le contenu d'une combobox (ou listBox, ça m'est égale)
posée sur une feuille (et non pas dans un userform)
dont la racine est issue d'une base de donnée que je ne peux pas trier.
Cela pouvant paraître un peu compliqué (car je m'explique peut-être mal)
j'ai préféré joindre un lien sur un fichier exemple.
http://www.cijoint.fr/cij52203818531320.xls
Je vous remercie d'avance pour votre aide.
Cordialement,

4 réponses

1 2
Avatar
Emile
Argh.... :-(
J'avais oublié "Les doublons"...
-Est-ce qu'il y aurait une méthode pour les éliminer ?
Merci de ta compréhension.
Cordialement,


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

http://cjoint.com/?lpvaEGtBGY

JB


On 15 nov, 15:59, Emile63 wrote:
On 15 nov, 14:22, JB wrote:





Je ne comprends pas. J'ai ajouté la récup du résultat:

http://cjoint.com/?lpowbETOW1

JB

On 15 nov, 12:08, Emile63 wrote:

On 15 nov, 11:17, JB wrote:

Bonjour,

http://cjoint.com/?lplrw6aLEzhttp://cjoint.com/?lplrMyMRTh

JB

On 15 nov, 10:24, Emile63 wrote:

Bonjour JB,
J'ai encore un souci,
Les données originales ne sont pas sur la même feuillle (que sur
mon exemple)
Le déroulant est sur le feuil1 et les données sont sur la feuil2,
de plus je
souhaitrais en limiter la portée.
Vous m'avez proposé:
temp = Range([A1], [A65000].End(xlUp))
Et je souhaiterais arriver à un truc dans ce genre là. (fonctionne
pas):
temp = Sheets("Feuil2").Range("A7:A" & Range("Historique"))
La ref: Historique et une référence à un cellule qui contient la
valeur: 100
(mais qui se veut modifiable)
donc, sur l'exemple, la séléction est souhaitée pour la feuil2 de
(A7:A100)
Merci encore pour votre aide, et désolé de n'avoirt pas été précis
sur mon
premier exemple.
Cordialement,






Bonsoir,

http://cjoint.com/?lkvwyJNOfm

Private Sub ComboBox1_DropButtonClick()
temp = Range([A1], [A65000].End(xlUp))
Call tri(temp, LBound(temp), UBound(temp)) 'optionnel
Me.ComboBox1.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

JB
http://boisgontierjacques.free.fr

On 10 nov, 19:57, "Emile"

wrote:
Bonjour à tous,
Je cherche à trier le contenu d'une combobox (ou listBox, ça
m'est égale)
posée sur une feuille (et non pas dans un userform)
dont la racine est issue d'une base de donnée que je ne peux
pas trier.
Cela pouvant paraître un peu compliqué (car je m'explique
peut-être mal)
j'ai préféré joindre un lien sur un fichier
exemple.http://www.cijoint.fr/cij52203818531320.xls
Je vous remercie d'avance pour votre aide.
Cordialement,- Masquer le texte des messages précédents -





Merci JB,
Ton second exemple est ce qu'il me fallait ;-))

- Comment puis-je faire pour activer la touche "Enter" ou "TAB" afin
de quitter la "ListBox"
une fois mon choix sélectionné?- Masquer le texte des messages
précédents -

- Afficher le texte des messages précédents



Bonjour JB,

Désolé, je ne me suis pas bien expliqué :-)
En fait, dans ma feuille excel, une fois le résultat sélectionné il
s'affiche directement dans une cellule pré-établie par le LinkedCell .
Jusqu'ici tout roule.
Ce que je voulais dire c'est qu'à partir d'ici, l'enregistrement
"choisi" reste sélectionné (fond bleu) dans la ListBox et celle-ci
garde le focus.
Et moi je souhaiterais, en appuyant sur une touche -TAB - par
exemple, quitter la listebox et que la cellule suivante de ma feuille
soit sélectionnée.
Par exemple, si LinkedCell est en Worksheets("MaFeuille").Cells(1, 1),
que la sélection passe en Cells(1, 2) après la sélection de ListBox.
Merci de ton aide,
Cordialement,- Masquer le texte des messages précédents -

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








Avatar
JB
Bonjour,

http://cjoint.com/?lqhtUBpsV8

Private Sub ComboBox1_DropButtonClick()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each C In [MaBD]
If Not MonDico.Exists(C.Value) Then MonDico.Add C.Value, C.Value
Next C
temp = MonDico.items ' le tableau temp() reçoit les éléments
de MonDico
Call tri(temp, LBound(temp), UBound(temp))
Me.ComboBox1.List = temp
End Sub

Sub tri(a, 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

Private Sub ComboBox1_Change()
[A2].Select
End Sub

JB


On 15 nov, 23:02, "Emile"
wrote:
Argh.... :-(
J'avais oublié "Les doublons"...
-Est-ce qu'il y aurait une méthode pour les éliminer ?
Merci de ta compréhension.
Cordialement,

"JB" a écrit dans le message de news:
:/ /cjoint.com/?lpvaEGtBGY

JB

On 15 nov, 15:59, Emile63 wrote:



On 15 nov, 14:22, JB wrote:

Je ne comprends pas. J'ai ajouté la récup du résultat:

http://cjoint.com/?lpowbETOW1

JB

On 15 nov, 12:08, Emile63 wrote:

On 15 nov, 11:17, JB wrote:

Bonjour,

http://cjoint.com/?lplrw6aLEzhttp://cjoint.com/?lplrMyMRTh

JB

On 15 nov, 10:24, Emile63 wrot e:

Bonjour JB,
J'ai encore un souci,
Les données originales ne sont pas sur la même feuillle (que sur
mon exemple)
Le déroulant est sur le feuil1 et les données sont sur la fe uil2,
de plus je
souhaitrais en limiter la portée.
Vous m'avez proposé:
temp = Range([A1], [A65000].End(xlUp))
Et je souhaiterais arriver à un truc dans ce genre là. (fonc tionne
pas):
temp = Sheets("Feuil2").Range("A7:A" & Range("Historique"))
La ref: Historique et une référence à un cellule qui conti ent la
valeur: 100
(mais qui se veut modifiable)
donc, sur l'exemple, la séléction est souhaitée pour la fe uil2 de
(A7:A100)
Merci encore pour votre aide, et désolé de n'avoirt pas ét é précis
sur mon
premier exemple.
Cordialement,







Bonsoir,

http://cjoint.com/?lkvwyJNOfm

Private Sub ComboBox1_DropButtonClick()
temp = Range([A1], [A65000].End(xlUp))
Call tri(temp, LBound(temp), UBound(temp)) 'optionnel
Me.ComboBox1.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

JB
http://boisgontierjacques.free.fr

On 10 nov, 19:57, "Emile"

wrote:
Bonjour à tous,
Je cherche à trier le contenu d'une combobox (ou listBox, ça
m'est égale)
posée sur une feuille (et non pas dans un userform)
dont la racine est issue d'une base de donnée que je ne pe ux
pas trier.
Cela pouvant paraître un peu compliqué (car je m'expliqu e
peut-être mal)
j'ai préféré joindre un lien sur un fichier
exemple.http://www.cijoint.fr/cij52203818531320.xls
Je vous remercie d'avance pour votre aide.
Cordialement,- Masquer le texte des messages précédents -





Merci JB,
Ton second exemple est ce qu'il me fallait ;-))

- Comment puis-je faire pour activer la touche "Enter" ou "TAB" afin
de quitter la "ListBox"
une fois mon choix sélectionné?- Masquer le texte des messages
précédents -

- Afficher le texte des messages précédents



Bonjour JB,

Désolé, je ne me suis pas bien expliqué :-)
En fait, dans ma feuille excel, une fois le résultat sélectionné i l
s'affiche directement dans une cellule pré-établie par le LinkedCell .
Jusqu'ici tout roule.
Ce que je voulais dire c'est qu'à partir d'ici, l'enregistrement
"choisi" reste sélectionné (fond bleu) dans la ListBox et celle-ci
garde le focus.
Et moi je souhaiterais, en appuyant sur une touche -TAB - par
exemple, quitter la listebox et que la cellule suivante de ma feuille
soit sélectionnée.
Par exemple, si LinkedCell est en Worksheets("MaFeuille").Cells(1, 1),
que la sélection passe en Cells(1, 2) après la sélection de ListBo x.
Merci de ton aide,
Cordialement,- Masquer le texte des messages précédents -

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


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









Avatar
Emile63
On 16 nov, 07:19, JB wrote:
Bonjour,

http://cjoint.com/?lqhtUBpsV8

Private Sub ComboBox1_DropButtonClick()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each C In [MaBD]
If Not MonDico.Exists(C.Value) Then MonDico.Add C.Value, C.Value
Next C
temp = MonDico.items ' le tableau temp() reçoit les élémen ts
de MonDico
Call tri(temp, LBound(temp), UBound(temp))
Me.ComboBox1.List = temp
End Sub

Sub tri(a, 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

Private Sub ComboBox1_Change()
[A2].Select
End Sub

JB


wrote:



Bonjour JB,


Merci pour cette nouvelle vrsion, C'est top! :-))

J'ai une nouvelle question...
Avec la propriété: fmMatchEntryComplete
Je devrais pouvoir entrer les premiers caractères d'un mot, et la
comboBox restreint d'autant les enregistrements disponibles.
Toutefois, c'est la macro qui prend le dessus en s'éxécutant à chaque
changement de la combo.
C'est-à-dire, quand je tape "B", dans la combo de notre fichier
exemple. Elle devrait afficher: B + en sélection bleu "ALZAN", si je
clic sur le déroulant, rentent que les noms qui commencent par "B".
Dans l'exemple, en tapant "B", c'est le premier nom commençant par "B"
qui est complètement affiché, et la sélection passe à la cellule
suivante (intervient: ComboBox1_Change)..
Comme la sélection de la combo à changé, la macro
"ComboBox1_DropButtonClick" s'éxécutée et à figé le premier
enregistrement de la liste sans me permettre ce choix dont je parlais
initialement.
- Est-ce qu'il y a un moyen de contrôler ceci ? (dans les propriété
peut-être?)
En me relisant, ça me parraît un peu brouillon tout ça, j'espère que
je me suis bien expliqué... ;-)
Merci de ton aide,
Cordialement,

Avatar
Emile
Bonjour JB,

Merci pour cette nouvelle version, C'est top fort pour moi! :-))

J'ai une nouvelle question...
Avec la propriété: fmMatchEntryComplete
Je devrais pouvoir entrer les premiers caractères d'un mot, et la
comboBox restreint d'autant les enregistrements disponibles.
Toutefois, c'est la macro qui prend le dessus en s'éxécutant à chaque
changement de la combo.
C'est-à-dire, quand je tape "B", dans la combo de notre fichier
exemple. Elle devrait afficher: B + en sélection bleu "ALZAN", si je
clic sur le déroulant, rentent que les noms qui commencent par "B".
Dans l'exemple, en tapant "B", c'est le premier nom commençant par "B"
qui est complètement affiché, et la sélection passe à la cellule
suivante (intervient: ComboBox1_Change)..
Comme la sélection de la combo à changé, la macro
"ComboBox1_DropButtonClick" s'éxécutée et à figé le premier
enregistrement de la liste sans me permettre ce choix dont je parlais
initialement.
- Est-ce qu'il y a un moyen de contrôler ceci ? (dans les propriété
peut-être?)
En me relisant, ça me parraît un peu brouillon tout ça, j'espère que
je me suis bien expliqué... ;-)
Merci de ton aide,
Cordialement,
1 2