Passer les valeurs d'une combobox à une autre... de façon très rapide

Résolu
jytest Messages postés 315 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014 - 2 mars 2009 à 08:43
jytest Messages postés 315 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014 - 2 mars 2009 à 13:02
Bonjour,

Novice en visual basic... a besoin de votre aide !

Dans une form,
je remplis un à un, les éléments d'une combobox (combobox1, par exemple)
par l'instruction combobox1.additem "xxx"

J'aimerai ensuite, que d'une autre form,
je puisse faire :
combobox2 = combobox1
Et oui, ce serait le rêve...
mais cela ne fonctionne pas !!!

Y a-t-il une autre solution que de faire :
for i=1 to 1000
   combobox2.additem = ....
next i

Merci d'avance.
je puisse faire

jyd

11 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 09:38
65 000 elements dans une combobox ?
je pense que ton approche n'est pas idéale pour l'utilisateur.

l'utilisateur ne peut-il pas saisir un champs de recherche, ou des critères permettant de réduire facilement la ongueur de cette liste ?
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
2 mars 2009 à 09:43
Sinon : non ... pas de truc pour remplacer la boucle dans l'opération de copie
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 09:52
codes postaux ?

si l'utilisateur doit chercher un code postal, il peut le saisir dans une zone de texte ^^
quitte même a le faire au moins saisir le département


le combobox va t'embetter, et tu seras obligé de passer par les APIS (pas plus de 32768 elements dans ceux de VB, sinon les propriétés coincent)
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 09:53
sans compter que le temps de récupérer le texte de chaque element et non négligeable...

Private Const CB_INSERTSTRING As Long = &H14A
Private Const CB_GETCOUNT As Long = &H146

Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Command1_Click()
Dim nStartTime As Long
Dim i As Long
Combo1.Clear
nStartTime = GetTickCount

For i = 0 To 32767
SendMessage Combo1.hwnd, CB_INSERTSTRING, -1, ByVal "loop number - " & CStr(i)
Next i
Label1.Caption = (GetTickCount - nStartTime) * 0.001 & "s"

DoEvents

Combo2.Clear
nStartTime = GetTickCount
For i = 0 To 32767
SendMessage Combo2.hwnd, CB_INSERTSTRING, -1, ByVal Combo1.List(i)
Next i
Label2.Caption = (GetTickCount - nStartTime) * 0.001 & "s"
End Sub


3s pour remplir Combo1
7.6 s pour remplir Combo2
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 09:06
une première étape peut etre d'empecher que le combobox ne se redessine...
0
jytest Messages postés 315 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
2 mars 2009 à 09:12
Merci pour ta réponse.

Hélas,

Cela ne va pas le faire car ma combobox1 (et donc la combobox2) contient près de 65000 éléments.

N'existe-t-il pas d'instruction ou procédure équivalente à
combobox2 = combobox1 ???

jyd
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
2 mars 2009 à 09:15
Bonjour,
si ta deuxième combobox doit finalement être identique à la première, pourquoi ne pas tout simplement la remplir dans la même foulée que la première ? (celà t'éviterait la boucle et prendrait, à chaque ajout, une fraction vraiment infime de seconde).
0
jytest Messages postés 315 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
2 mars 2009 à 09:22
J'ai oublié de préciser que la form2 s'ouvre et se referme plusieurs fois dans l'exé de l'application,
tandis que form1 reste ouverte en permanence.

Et que c'est de la form2, qu'est gérée la combobox (donc combobox2 et non combobox1)

jyd
0
jytest Messages postés 315 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
2 mars 2009 à 09:42
En fait il s'agit d'une table de codes postaux pour la france...
Il n'y a donc pas de solution miracle ?

jyd
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
2 mars 2009 à 09:42
Tu pourrais alors tout simplement :
- charger (sans la montrer) la form2
- si tu dois reconstituer la combo1 : reconstituer en même temps la combo2
- ne mettre dans l'évènement Activate de la form2 que tout le reste (pas ce qui remplit la combo2)

Contrairement à ce que tu pourrais penser : le fait de garder chargée une Form ne "mange pas (ou très peu) de pain"
Et tu joues ensuite avec Hide et Show
0
jytest Messages postés 315 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
2 mars 2009 à 13:02
merci à tous pour votre aide...

jyd
0