OVH Cloud OVH Cloud

Multiple combo sur Userform

5 réponses
Avatar
mor.mic
Bonsoir le Groupe,

Je rencontre quelques problèmes peut-être de compréhension dans l'écriture
des routines VBA. Merci d'éclairer ma lanterne:

J'ai un Userform "SaisieMenu" dans lequel il y a plusieurs ComboBox nommés
"ComboBox1" à "ComboBox5". J'ai créé un module de classe nommé
"ComBoxClasse" avec:

Public WithEvents ComBox As MSForms.ComboBox
Private Sub ComBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call ControlMets
End Sub

Puis dans un module standard:

Dim ComBoxClasses(1 To 5) As ComBoxClasse
Sub ComboTest()
Dim k As Integer
For k = 1 To 5
Set ComBoxClasses(k) = New ComBoxClasse
Set ComBoxClasses(k).ComBox = SaisieMenu.controls("ComboBox" & k)
Next k
End Sub

Mon problème est que l'appel de la routine "ControlMets" ne s'effectue pas
avec l'évènement Exit, ni BeforeUpdate, ni d'autres. La seule qui déclencle
le branchement c'est Change!!!

Bien-sûr, ce n'est pas cet évènement qui m'intéresse.

Où est mon erreur ??

Merci encore de vos aides précieuses.

Michel

5 réponses

Avatar
Denis Michon
Bonjour mor.mic,


Tu as raison... dans un module de classe on ne peut définir certains événements du combobox... dont "Exit"
..."BeforeUpdate"... mais il reste quand même 13 événements susceptibles de t'aider.

Je ne crois qu'il y ait un truc pour faire apparaître un événement inexistant dans un module de classe... mais si tu
exprimes clairement ce que tes combobox doivent faire, il y a peut être moyen de trouver une alternative !


Salutations!


"mor.mic" a écrit dans le message de news:bletdp$scu$
Bonsoir le Groupe,

Je rencontre quelques problèmes peut-être de compréhension dans l'écriture
des routines VBA. Merci d'éclairer ma lanterne:

J'ai un Userform "SaisieMenu" dans lequel il y a plusieurs ComboBox nommés
"ComboBox1" à "ComboBox5". J'ai créé un module de classe nommé
"ComBoxClasse" avec:

Public WithEvents ComBox As MSForms.ComboBox
Private Sub ComBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call ControlMets
End Sub

Puis dans un module standard:

Dim ComBoxClasses(1 To 5) As ComBoxClasse
Sub ComboTest()
Dim k As Integer
For k = 1 To 5
Set ComBoxClasses(k) = New ComBoxClasse
Set ComBoxClasses(k).ComBox = SaisieMenu.controls("ComboBox" & k)
Next k
End Sub

Mon problème est que l'appel de la routine "ControlMets" ne s'effectue pas
avec l'évènement Exit, ni BeforeUpdate, ni d'autres. La seule qui déclencle
le branchement c'est Change!!!

Bien-sûr, ce n'est pas cet évènement qui m'intéresse.

Où est mon erreur ??

Merci encore de vos aides précieuses.

Michel
Avatar
mor.mic
Merci Denis de tes réponses.

Dans les 13 évènements qui restent, quelles sont ceux qui fonctionneraient?

Mes combo (il y en a 119 en réalité) sont tous chargés avec la même base de
données.
Je dois sélectionner dans chacun un élément proposé dans la base ou en
mettre un nouveau.
Il faut donc que je puisse connaître quel élément a étésélectionné dans
quelle combo ou ajouter le nouvel élément à la base.
La solution la plus simpliste consisterait à créer 119 évènements Exit mais
je ne trouve pas cela trés élégant et j'espère surout qu'il existe une autre
possibilité.

Cordialement
Michel

"Denis Michon" a écrit dans le message news:
PkFeb.90051$
Bonjour mor.mic,


Tu as raison... dans un module de classe on ne peut définir certains
événements du combobox... dont "Exit"

..."BeforeUpdate"... mais il reste quand même 13 événements susceptibles
de t'aider.


Je ne crois qu'il y ait un truc pour faire apparaître un événement
inexistant dans un module de classe... mais si tu

exprimes clairement ce que tes combobox doivent faire, il y a peut être
moyen de trouver une alternative !



Salutations!


"mor.mic" a écrit dans le message de
news:bletdp$scu$

Bonsoir le Groupe,

Je rencontre quelques problèmes peut-être de compréhension dans l'écriture
des routines VBA. Merci d'éclairer ma lanterne:

J'ai un Userform "SaisieMenu" dans lequel il y a plusieurs ComboBox nommés
"ComboBox1" à "ComboBox5". J'ai créé un module de classe nommé
"ComBoxClasse" avec:

Public WithEvents ComBox As MSForms.ComboBox
Private Sub ComBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call ControlMets
End Sub

Puis dans un module standard:

Dim ComBoxClasses(1 To 5) As ComBoxClasse
Sub ComboTest()
Dim k As Integer
For k = 1 To 5
Set ComBoxClasses(k) = New ComBoxClasse
Set ComBoxClasses(k).ComBox = SaisieMenu.controls("ComboBox" & k)
Next k
End Sub

Mon problème est que l'appel de la routine "ControlMets" ne s'effectue pas
avec l'évènement Exit, ni BeforeUpdate, ni d'autres. La seule qui
déclencle

le branchement c'est Change!!!

Bien-sûr, ce n'est pas cet évènement qui m'intéresse.

Où est mon erreur ??

Merci encore de vos aides précieuses.

Michel





Avatar
Alain CROS
Bonjour.

Les événement disponibles sont listés dans la liste déroulante en haut à droite.
Il n'y a ni Exit, ni BeforeUpdate mais BeforeDragOver, BeforeDropOrPaste, Change, Click, DblClick, DropButtonClick,
Error, KeyDown, KeyPress, KeyUp, MouseDown, MouseMove et MouseUp.
Tu choisis celui qui convient le mieux.

J'en profite pour demander si quelqu'un a déjà utilisé événement Error ?
Un petit exemple serait le bienvenu.
Merci.

Alain CROS.

"mor.mic" a écrit dans le message de news: bletdp$scu$
Bonsoir le Groupe,

Je rencontre quelques problèmes peut-être de compréhension dans l'écriture
des routines VBA. Merci d'éclairer ma lanterne:

J'ai un Userform "SaisieMenu" dans lequel il y a plusieurs ComboBox nommés
"ComboBox1" à "ComboBox5". J'ai créé un module de classe nommé
"ComBoxClasse" avec:

Public WithEvents ComBox As MSForms.ComboBox
Private Sub ComBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call ControlMets
End Sub

Puis dans un module standard:

Dim ComBoxClasses(1 To 5) As ComBoxClasse
Sub ComboTest()
Dim k As Integer
For k = 1 To 5
Set ComBoxClasses(k) = New ComBoxClasse
Set ComBoxClasses(k).ComBox = SaisieMenu.controls("ComboBox" & k)
Next k
End Sub

Mon problème est que l'appel de la routine "ControlMets" ne s'effectue pas
avec l'évènement Exit, ni BeforeUpdate, ni d'autres. La seule qui déclencle
le branchement c'est Change!!!

Bien-sûr, ce n'est pas cet évènement qui m'intéresse.

Où est mon erreur ??

Merci encore de vos aides précieuses.

Michel




Avatar
Denis Michon
Bonsoir Mor.Mic,


Je n'ai pas tout compris... mais une simple suggestion :

En supposant que tes combobox ont des noms du genre : Combobox_1..combobox_2... combobox_100


Tu ajoutes une feuille caché à ton classeur qui va te servir à recueillir les informations de tes combobox.
Afin que cette feuille ne soit pas affichable par l'usager, tu utilise ceci :
worksheets("LaFeuille").visible =xlveryhidden

La colonne A:A enregistre le nom du combobox
La Colonne B:B enregistre la valeur du combobox

Évidemment, le numéro de la ligne doit correspondre au numéro du combobox.

Tu peux je crois utiliser l'événement "Change" pour mettre à jour les 2 colonnes de la feuille "LaFeuille" au fur et à
mesure que tu renseignes tes combobox.

'Extrait le numéro de ton combobox
'Fonction Split disponible à partir d'excel 2000
Ligne = Split(Me.ComboBox_1.Name, "_")(1)

With worksheets("LaFeuille")
.range("A" & ligne) = Me.combobox_1.name
.range("B" & ligne) = Me.combobox_1.value
end with


Maintenant, en tout moment, tu n'as qu'à questionner la plage de cellule de "LaFeuille" pour suivre et connaître la
valeur de chacun de tes combobox.

N.B la colonne A:A de "LaFeuille" n'est pas essentielle puisqu'elle ne contient que le nom du Combobox que tu connais
déjà ... il s'agit du Nom : "combobox" + son index "_Index".


Voilà !


Salutations!






"mor.mic" a écrit dans le message de news:blfbpm$ucq$
Merci Denis de tes réponses.

Dans les 13 évènements qui restent, quelles sont ceux qui fonctionneraient?

Mes combo (il y en a 119 en réalité) sont tous chargés avec la même base de
données.
Je dois sélectionner dans chacun un élément proposé dans la base ou en
mettre un nouveau.
Il faut donc que je puisse connaître quel élément a étésélectionné dans
quelle combo ou ajouter le nouvel élément à la base.
La solution la plus simpliste consisterait à créer 119 évènements Exit mais
je ne trouve pas cela trés élégant et j'espère surout qu'il existe une autre
possibilité.

Cordialement
Michel

"Denis Michon" a écrit dans le message news:
PkFeb.90051$
Bonjour mor.mic,


Tu as raison... dans un module de classe on ne peut définir certains
événements du combobox... dont "Exit"

..."BeforeUpdate"... mais il reste quand même 13 événements susceptibles
de t'aider.


Je ne crois qu'il y ait un truc pour faire apparaître un événement
inexistant dans un module de classe... mais si tu

exprimes clairement ce que tes combobox doivent faire, il y a peut être
moyen de trouver une alternative !



Salutations!


"mor.mic" a écrit dans le message de
news:bletdp$scu$

Bonsoir le Groupe,

Je rencontre quelques problèmes peut-être de compréhension dans l'écriture
des routines VBA. Merci d'éclairer ma lanterne:

J'ai un Userform "SaisieMenu" dans lequel il y a plusieurs ComboBox nommés
"ComboBox1" à "ComboBox5". J'ai créé un module de classe nommé
"ComBoxClasse" avec:

Public WithEvents ComBox As MSForms.ComboBox
Private Sub ComBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call ControlMets
End Sub

Puis dans un module standard:

Dim ComBoxClasses(1 To 5) As ComBoxClasse
Sub ComboTest()
Dim k As Integer
For k = 1 To 5
Set ComBoxClasses(k) = New ComBoxClasse
Set ComBoxClasses(k).ComBox = SaisieMenu.controls("ComboBox" & k)
Next k
End Sub

Mon problème est que l'appel de la routine "ControlMets" ne s'effectue pas
avec l'évènement Exit, ni BeforeUpdate, ni d'autres. La seule qui
déclencle

le branchement c'est Change!!!

Bien-sûr, ce n'est pas cet évènement qui m'intéresse.

Où est mon erreur ??

Merci encore de vos aides précieuses.

Michel





Avatar
mor.mic
Merci beaucoup pour tous ces tuyaux. Je vais compiler tout cela et essayer
d'avancer sur mon prog. Je vous tiendrai au courant du résultat.

Cordialement
Michel


"Denis Michon" a écrit dans le message news:
BDIeb.90804$
Bonsoir Mor.Mic,


Je n'ai pas tout compris... mais une simple suggestion :

En supposant que tes combobox ont des noms du genre :
Combobox_1..combobox_2... combobox_100



Tu ajoutes une feuille caché à ton classeur qui va te servir à recueillir
les informations de tes combobox.

Afin que cette feuille ne soit pas affichable par l'usager, tu utilise
ceci :

worksheets("LaFeuille").visible =xlveryhidden

La colonne A:A enregistre le nom du combobox
La Colonne B:B enregistre la valeur du combobox

Évidemment, le numéro de la ligne doit correspondre au numéro du combobox.

Tu peux je crois utiliser l'événement "Change" pour mettre à jour les 2
colonnes de la feuille "LaFeuille" au fur et à

mesure que tu renseignes tes combobox.

'Extrait le numéro de ton combobox
'Fonction Split disponible à partir d'excel 2000
Ligne = Split(Me.ComboBox_1.Name, "_")(1)

With worksheets("LaFeuille")
.range("A" & ligne) = Me.combobox_1.name
.range("B" & ligne) = Me.combobox_1.value
end with


Maintenant, en tout moment, tu n'as qu'à questionner la plage de cellule
de "LaFeuille" pour suivre et connaître la

valeur de chacun de tes combobox.

N.B la colonne A:A de "LaFeuille" n'est pas essentielle puisqu'elle ne
contient que le nom du Combobox que tu connais

déjà ... il s'agit du Nom : "combobox" + son index "_Index".


Voilà !


Salutations!






"mor.mic" a écrit dans le message de
news:blfbpm$ucq$

Merci Denis de tes réponses.

Dans les 13 évènements qui restent, quelles sont ceux qui
fonctionneraient?


Mes combo (il y en a 119 en réalité) sont tous chargés avec la même base
de

données.
Je dois sélectionner dans chacun un élément proposé dans la base ou en
mettre un nouveau.
Il faut donc que je puisse connaître quel élément a étésélectionné dans
quelle combo ou ajouter le nouvel élément à la base.
La solution la plus simpliste consisterait à créer 119 évènements Exit
mais

je ne trouve pas cela trés élégant et j'espère surout qu'il existe une
autre

possibilité.

Cordialement
Michel

"Denis Michon" a écrit dans le message news:
PkFeb.90051$
Bonjour mor.mic,


Tu as raison... dans un module de classe on ne peut définir certains
événements du combobox... dont "Exit"

..."BeforeUpdate"... mais il reste quand même 13 événements
susceptibles


de t'aider.

Je ne crois qu'il y ait un truc pour faire apparaître un événement
inexistant dans un module de classe... mais si tu

exprimes clairement ce que tes combobox doivent faire, il y a peut être
moyen de trouver une alternative !



Salutations!


"mor.mic" a écrit dans le message de
news:bletdp$scu$

Bonsoir le Groupe,

Je rencontre quelques problèmes peut-être de compréhension dans
l'écriture


des routines VBA. Merci d'éclairer ma lanterne:

J'ai un Userform "SaisieMenu" dans lequel il y a plusieurs ComboBox
nommés


"ComboBox1" à "ComboBox5". J'ai créé un module de classe nommé
"ComBoxClasse" avec:

Public WithEvents ComBox As MSForms.ComboBox
Private Sub ComBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call ControlMets
End Sub

Puis dans un module standard:

Dim ComBoxClasses(1 To 5) As ComBoxClasse
Sub ComboTest()
Dim k As Integer
For k = 1 To 5
Set ComBoxClasses(k) = New ComBoxClasse
Set ComBoxClasses(k).ComBox = SaisieMenu.controls("ComboBox" &
k)


Next k
End Sub

Mon problème est que l'appel de la routine "ControlMets" ne s'effectue
pas


avec l'évènement Exit, ni BeforeUpdate, ni d'autres. La seule qui
déclencle

le branchement c'est Change!!!

Bien-sûr, ce n'est pas cet évènement qui m'intéresse.

Où est mon erreur ??

Merci encore de vos aides précieuses.

Michel