Passer les valeurs d'une combobox à une autre... de façon très rapide [Résolu]

Signaler
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
22 décembre 2014
-
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
22 décembre 2014
-
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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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 ?
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
Sinon : non ... pas de truc pour remplacer la boucle dans l'opération de copie
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
une première étape peut etre d'empecher que le combobox ne se redessine...
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
22 décembre 2014

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
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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).
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
22 décembre 2014

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
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
22 décembre 2014

En fait il s'agit d'une table de codes postaux pour la france...
Il n'y a donc pas de solution miracle ?

jyd
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
22 décembre 2014

merci à tous pour votre aide...

jyd