Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010
-
11 juil. 2007 à 12:33
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
24 avril 2014 à 07:14
J'ai des comboBox dont j'ai rentrée une liste de valeur qui s'affiche des que j'active le userfom.
J'ai rentrée valeur par valeur:
ComboBox8.AddItem "Aucune"
ComboBox8.AddItem "0,4"
ComboBox8.AddItem "0,9"
ComboBox8.AddItem ">0,9"
Alors quand je lance la première fois le userfom tout ça fiche. Ensuite si je veux cacher le userform (avec hide parce que je n'ai pas trouver comment le fermer) et que ensuite je le fait de nouveau afficher (avec show), ma liste se double. Et oui forcement parce que j'ajoute ma liste de valeur des que j'active le userform! Alors comment faire?
Peut on efface le contenu des combobox lors du "hide" ou la desactivation du userform. Ou peut etre si je trouvais comment fermer completement le userform au lieu de le cacher il n'y aurai pas de probleme.
J'ai essaie d'effacer le contenu des combobox avec clear, avec remove item.... Sans succes...
Si vous pouvez m'aider... encore!
Merci d'avance
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 16 juil. 2007 à 22:59
Initialize est appelé à la première ouverture du UserForm. Si tu utilises UnLoad pour le fermer, Initialize sera rappelé à la réouverture. Si tu utilises Hide pour le cacher, Initialize ne sera pas activé puisque déjà initialisé et toujours en mémoire.
Activate est appelé à l'ouverture du UserForm, mais aussi lorsque tu donnes le focus à celui-ci. Si tu avais plusieurs UserForms et que tu passais d'un à l'autre, cet événement serait activé à chaque fois.
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 juil. 2007 à 15:08
Voilà donc la raison popur laquelle ta combobox s'incrémente : l'événement activate se déclence chaque fois que tu "montre" ton userform (y compris après l'avoir caché).
Solution (une parmi d'autres) :
tout en faut (avant toute procédure) de ton code :
Private toto as boolean
Et, dans ton événement activate :
If not toto then
---- chargement de ta combobox
toto = not toto
end if
Une autre solution consisterait à te servir de l'événement Load plutôt qu'Activate, mais je n'aime pas trop...
Une dernière solution consisterait à ne charger ta ComboBox que si elle est vide, en utilisant cette condition :
If combobox1.liscount = 0 then
----chargement des articles
end if
kalobit
Messages postés169Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention 7 avril 20082 16 juil. 2007 à 10:58
Salut
L'évènement Load c'est en VB pour une Form. En VBA on utilise l'évènement Initialize, ce qui donne
Private Sub UserForm1_Initialize()
Charger_Combobox ' appelle la macro de chargement des combobox
En sub
Et voilà
Pour revenir sur l'utilisation de Me, sache que Me représente l'objet contenant le code.
En VBA, on le limitera aux modules de classe et aux userforms.
Me est donc un raccourci qui renvoie l'objet que tu codes. c'est pourquoi tu peux remplacer le nom du Userform par Me dans son module de code.
Pour finir, lorsque tu effectues un grand nombre d'actions sur un objet (par exemple des additem sur un combobox), on préfère utiliser l'instruction With "nom objet" / End With pour éviter de recharger à chaque fois ton objet et donc ralentir l'exécution du code. Ce qui donne :
With combobox8
.clear 'On efface par précaution
.additem "Aucune"
.additem 0.4
.additem 0.9
.additem ">0,9"
End With
Voilà, sur ce, code comme tu le veux mais si il existe des conventions, c'est pas pour rien. Et vu que t'es pas une pro, ce serait bien d'écouter les conseils que tu viens chercher ici.
[mailto:K@lobit K@lobit] < Ne pas clicker ici
< Mais ici
Bonjour, ez64
Evite s'il te plait de déterrer un vieux sujet, au demeurant résolu, pour finalement dire une inexactitude .
Mettre à -1 la propriété Listindex d'une combobox ne l'efface pas. Cela ne fait qu'en effacer la zone d'édition (et en conséquence : désélectionner (pas l'effacer) l'article qui aurait pu avoir fait l'objet d'une sélection)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Vous n’avez pas trouvé la réponse que vous recherchez ?
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 11 juil. 2007 à 14:14
Je ne savais pas comment fermer la fenetre donc déjà ça le unload ça va bien me servir!
Et en faisant ça ça marche.
Alors jmjmarques ce n'est pas que je veux pas faire comme tu propose mais ce que je pense que comme ça c'est plus simple. Quand l'utilisateur veux aller sur ce userform ça le charge et quand il a fini ça le décharge et si il veut y retourner une nouvelle fois ça se recharge sans bug.
Enfin bon apres si tu penses qu'une variable booléenne est mieux , j'essaie...
Merci!
PS: désolée jmjmarques mais c'est pas que je veux en faire qu'a ma tete comme tu m'as dit mais je fais comme je peux! Je ne suis pas une pro!
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 11 juil. 2007 à 16:51
Alors j'essayé la première et j'ai pas reussi.
La deuxieme, moi j'ai pas l'évenement load pour un userform.
Alors j'ai essayé la dernière qui marche bien.
Alors merci bien!
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 16 juil. 2007 à 11:48
Merci pour les conseils.
Quelle est la différence entre Initialize et Activate? Qu'est ce qui est le mieux? par exemple pour charger des combobox?
Et est ce que ces fonctions sont propres à VBA. C'est à dire que si moi je lance mon programme de n'importe où est ce que ça fonctionnera toujours?
Pour le "Me" j'avais pas tout suivi. Merci pour l'expliquation!
Et pour le "with", j'ai remis comme il faut dans mon programme!
Encore merci!
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 17 juil. 2007 à 08:52
Ok. Donc pour charger les combobox par exemple il est préférable de le faire avec initialize comme ça ça m'évite de vérifier si la combobox est déjà chargé et ça évite les bug. Non?
Merci!!
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 juil. 2007 à 13:11
Tiatia63 : si je t'explique maintenant comment utiliser une variable booléenne, pour arriver à tes fins sans passer par le Clear, vas-tu là aussi te sentir "agressée" ?
Si oui : oublie
Si non : précise-nous l'événement de UserForm1 utilisé pour alimenter ta combobox
Fais et réponds comme tu le sens...
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 juil. 2007 à 14:45
C'est juste, vois-tu Tiatia63, qu'il en va dans ce domaine comme dans tous les autres. Il vaut mieux se former d'emblée aux bons gestes que d'avoir à corriger plus tard des habitudes trop bien ancrées.
On peut y aller, si tu le souhaites, mais tu n'as pas répondu à une question d'importance : dans quel événement de ton userform1 charges-tu cette combobox ? (l'événement Load ou l'événement Activate, ou encore un autre, et lequel ?)