Valeurs ComboBox dans variables

McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008 - 14 oct. 2004 à 14:17
doniam Messages postés 1 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 14 mai 2005 - 14 mai 2005 à 16:22
Bonjour,

Voici mon cas,

Sous Excel j'ai un formulaire avec une trentaine de combo box dont je voudrai affecter la valeur à une trentaine de variables...

C1 = Interface.ComboBox1.Value
C2 = Interface.ComboBox2.Value
C3 = Interface.ComboBox3.Value
etc...

mais je voudrais ne pas saisir 30 fois la même ligne et j'aurai préférer avoir quelque chose du genre :

For i = 0 to 20

C(i) = Interface.ComboBox(i).value

next i

Mais ca marche pas... :sad) Une idée :question)

Merci d'avance

Mc Ewans

PS : Question subsidiaire : Peut-on bloquer la saisie d'une nouvellee valeure dans un comboxBox ? J'aimerai que mes utilisateurs ne puissent choisir qu'une valeure présente à l'origine...

18 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 oct. 2004 à 14:25
Fais un groupe de contrôle avec tes comboox : dans ton cas, 30 combobox avec le même nom, mais avec des index différents.
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
14 oct. 2004 à 15:04
Darksidious

Pardonne mon ignorance mais pour faire un groupe de contrôle, je fais simplement un grouper des comboBox ?

Si oui, après je ne vois pas ou mettre l'index et comment y faire référence pour récuper la valeur avec un "For To"...

Merci d'avance

Mc Ewans
0
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
14 oct. 2004 à 15:53
Ok j'ai trouvé comment bloquer la saisie de nouvelle valeur dans la combo box....

ComboBox1.Style = 2

Je cherche encore conernant l'index... le l'attribution de valeur...

Merci d'avance

Mc Ewans
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 16:34
salut,
Porur creer un groupe de control, essaie :

Creer un control avec un nom et apres tu le selectionne dans le form et tu fais copier/coller et la si c est comme dans vb6 il te demandera Souhaitez vous creer un groupe de controle

tu dis oui et il le fera tout seul et apres tu fais autant de copier/coller que tu le souhaite (ATTENTION le premier index sera 0)
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0

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

Posez votre question
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
14 oct. 2004 à 16:40
Salut jrivet,

Bah je viens de faire l'essaie plusieurs fois avec plusieurs types de controles et nada... il ne demande rien et il créer controles avec un incrément à la fin genre combobox1, combobox2 etc...

Donc ca marche pô... :sad)

Une deuxième idée ? :big)

Mc Ewans
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 17:01
Re,

Effectivement ca marche p...in de vba a la c..

Tiens essaie ca, c est un peu aberant comme maniere de faire mais ca marche j ai teste avec trois combo box
Dim i As Integer
Dim Num As Integer
For i = 0 To Me.Controls.Count - 1
If TypeOf Me.Controls(i) Is ComboBox Then
    Num = CInt(Mid(Me.Controls(i).Name, Len(Me.Controls(i).Name), 1))
    Me.Controls(i).AddItem Num
    
End If
Next


Num Te permet d avoir le numero du comboBox (assure toi simplement qu il aient tous le meme nom de base)
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
14 oct. 2004 à 17:47
Alors je viens mais j't'avoue que j'comprend pas bien le code...

Ton code permet de créer une combobox ?!?!? ou de récuper le nom de chaque combobox ?!?!?

de mon côté VBA renvoie une erreur :

"utilisation incorrect du mot clé : me"

mais, il y a peut-être quelques chose que je n'ai pas compris...

Ce que je veux faire, c'est de récupérer la valeur de chaque combo box dans une variable...

Merci de ton aide

Mc Ewans
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 18:01
Re,

REmplace Me par l'identifiant de ton UserForm, mais je comprend pas pourcoi ca plante car de mon cote ca passe.

Le code suivant te permet APRES avoir creer a la main tous tes combobox (copier/coller, ou Excel fais comme tu as ComboBox1, Combobox2...), de recuper la valeur du combobox
Dim i As Integer
Dim Num As Integer
For i = 0 To Me.Controls.Count - 1
If TypeOf Me.Controls(i) Is ComboBox Then
Num = CInt(Mid(Me.Controls(i).Name, Len(Me.Controls(i).Name), 1))
msgbox "ComboBox NUmero " & NUm & " Valeur " &  Me.Controls(i).Value (ou text je sais plus.)

End If
Next


@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
14 oct. 2004 à 18:14
Trop fort ! Ca marche !

Mais simplement jusqu'à 9 parcequ'après, vue que tu récupère le dernier chiffre il reprend le 0, 1, 2, 3... de 10, 11, 12...

On y ai presque.... heu... pardon.. Tu y ai presque !

L'autre question que c'est : comment je fais pour incrémenter le nom de la variable ?

Merci encore

Mc Ewans
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 18:20
Re,

A oui effectivement j avais oublier le details d apres le 10

et bien tu remplace cette ligne
Num = CInt(Mid(Me.Controls(i).Name, Len(Me.Controls(i).Name), 1))


PAR

Num = CInt(Mid(Me.Controls(i).Name, Len(Me.Controls(i).Name), IIF((i<9), 1, 2)))


POur ton autre question je la comprend pas... incrementer le nom de la variable????

tu peux mettre le resutat dans un tableau comme tu avais eu l idee au depart

Donc tu remplace le msgbox par C(i) = Me.Controls(i).Value

Attention aux dimension de ton tableau
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
14 oct. 2004 à 18:42
Ok pour le tableau C vrai... j'suis C** des fois...

Par contre, et au risque de parraitre relou bah la dernière modif ne change rien...

j'ai même essayé comme ca pour voir :

Num = CInt(Mid(Me.Controls(i).Name, Len(Me.Controls(i).Name), 2))

Mais ca change rien, faut dire que j'ai pas la main verte ce soir...

Mc Ewans

Sinon, histoire que je me couche moin con, je sais que len permet de récupérer la longueur d'une variable mais à quoi servent CInt, Mid et IIF (IF j'connais mais IIF pô) ?
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 18:59
re,

OUps j ai oublie un truc important en fais si tu dois en prendre deux il faut pas commencer a LEn(me.controls(i).name) mais LEN(me.controls(i).Name) - 1

DONC on reprend, ca donne

Num = CInt(Mid(Me.Controls(i).Name, IIF((i<9), Len(Me.Controls(i).Name), Len(Me.Controls(i).Name) - 1)), IIF((i<9), 1, 2))) 


reponse aux dernieres question:

Mid: Te permet de sortir une sous chaine de caractere d un chaine
TaSousCHaine = Mid(tachaine, positionDuCaractereDeDepart, LongueurDeLaSousChaine)

Cint: Convertis la valeur en entier, la plupart du temps c est pas la peine de le mettre car vb fais la convertion tout seul, mais c est pour le jour il te la fera pas ;)

IIF: c est un peu comme le if mais plus simple, et moins performant
IIF(condition, siOui, SiNON).

Par Exemple si dans un appel de fonction un des parametres est un booleen il n y a que deux valeurs possible pour le booleen (true et false). et bien avec le IIF tu fais en une ligne ce que tu faisait en 5 avec le IF

J explique par un exemple.
essaie ce ptit bout de code:

Private sub Valeur(bo as boolean)
msgbox "i = 0? " & bo 
end sub

Private sub Form_load()
dim i as integer
i = 0
'i = 8
call Valeur(IIF((i = 0), True, False))
end sub


Et OUALA
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
14 oct. 2004 à 19:18
Je crois qu'il y a encore un p'tit problème de parathèse mais j'arrive pô à trouver et je commence à en avoir plein la tête %-6 ...

Je finirai ca demain mat...

Si tu la trouve fais moi signe...

Dans tous les cas merci beaucoup pour ton aide ! et Respect...

:big)

Mc Ewans
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 20:01
Re,

Je essayer en vb6 avec 10 ou 11 combobox appeles Combo1, Combo2,.....

en fait le bout de code auquel on etait arrive.... met le a la poubelle il est pas fiable.

Pourcoi:
- tu peut pas te fier de la valeur du i pour savoir si tu es arrive a combo10 (Et oui le combo10 n est pas forcement le control(10) de ton form..)
- trop compliquer

Solution ;)

celui qui suit ne fonctionne QUE si les combo s appellent combo1, combo2, ....
IL te mets rellement le contenu du combo9 dans l element 9 de ton tableau. Encore une fois fait gaffe au dimension de ton tableau
Dim i As Integer
Dim Num As Integer
Dim StrName as string
For i = 0 To Me.Controls.Count - 1
   If TypeOf Me.Controls(i) Is ComboBox Then
   StrName = Me.Controls(i).Name
   C(CInt(Right(StrName, Len(StrName) - 5))) = Me.Controls(i).Text
Next


En plus il est plus simple et plus clair je trouve ;)

@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
15 oct. 2004 à 11:14
Salut,

Ca tourne nikel avec ton code, j'ai juste retouché 2,3 trucs :

Dim i As Integer
Dim StrName As String
Dim C(1 To 20)

For i = 0 To Interface.Controls.Count - 1
If TypeOf Interface.Controls(i) Is ComboBox Then
StrName = Interface.Controls(i).Name
Num = CInt(Right(StrName, Len(StrName) - 8))
C(Num) = Interface.Controls(i).text
MSG = MsgBox(Interface.Controls(i).Name & " - Valeur : " & C(Num))
End If
Next


En fait, c'était moins 8 et pas moins 5 et il manquait un p'tit endif...

Bref ca fonctionne au poil

Pour le tableau ca à l'air de marcher aussi... en fait j'ai 20 combobox pour l'instant...

Et le top du top c'est que j'ai tout compris et que j'ai réutilisé ce code pour des DTPicker etc...

Bref Merci pour tout et Total respet 8-) .

Mc Ewans
0
McEwans Messages postés 12 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 2 janvier 2008
15 oct. 2004 à 11:16
PS : A quoi ca sert le bouton "Réponse acceptée !" ? C'est pour clore la discussion ?

Mc Ewans
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
15 oct. 2004 à 12:34
Salut,

Content que ca marche ;)
LE reponse acceptee est effectivement pour clore la discussion:

Pour que les autres gens qu ils veuillent t aider en voyant le titre de ton post ne perdent pas de temps et sachent que tu as deja la reponse a ta question (excepte si ils veulent t en proposer une autre).

En plus ca donne des points a celui qui a "reponse acceptee" (pour le calcul sur l activite des membres).

Si t as d autres probleme, pas de probleme pour essayer d aider ;)
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
doniam Messages postés 1 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 14 mai 2005
14 mai 2005 à 16:22
j'aimerai savoir, comment on peut ajouter une valeur


dans une liste deroulent. par exemple si on saisit quelque chose dans la liste, que dans la prochaine


utilisation la trouve. comme dans la liste deroulent


d'une page au net.

Salut, je suis un nouveau participant
0
Rejoignez-nous