Creation d'un pavé numérique pour commander une ComboBox

Bonjour á tous,

Je reviens vers vous car je suis bloqué depuis une semaine sur une problématique que je pensais avoir résolu via votre aide...

Je voudrais piloter ma ComboBox via un pavé numérique, crée á l'aide de ComandButton numéroté de 1 á 20.

C'est á dire, que je souhaiterai pouvoir directement utiiser les ComandButton sans avoir á utiliser la ComboBox.

J'espere avoir été assez explicite dans mes explicaions.

Je vous remercie d'avance.

BARDEUF

Bonjour,

Le problème est que tes boutons sont pas numérotés de 1 à 20 mais de 2 à 21...

Bref j'ai revisité TOUSSA

Nota : Normalement les TextBox devraient subir le même traitement que les boutons puisqu'ils font tous la même chose : Ça éviterait toutes ces proc redondantes... Mébon comme la question ne concernait que le combo...

A+

Un grand merci pour ta reponse, de plus c'est exactement ce que j'attendai du pavé numerique.

Merci c'est du super boulot.

J'ai une petite faveur néanmoins á te demander :

Est t'il possible de concerver la ComboBox pour faire apparaitre le nom des joueurs (dans la ComboBox) quand on selectionne un numéro de joueur via le pavé numérique ?

Je te joint le fichier, avec dans la colonne de gauche un example des noms des joueurs, que je souhaiterai voir apparaitre dans la ComboBox quand on selectionne le numero des joueurs via le pavé numerique.

Encore merci beaucoup

Modifier la sub Action comme suit :

Sub Action(i%)

Dim iC%, k%

Ligne = i + 1

With usfGAM

If .OptionButton1 Then

iC = 1

ElseIf .OptionButton2 Then

iC = 22

Else

iC = 43

End If

.ComboBox1 = f.Cells(Ligne, 1)

For k = 1 To 21

.Controls("TextBox" & k).Value = f.Cells(Ligne, k + iC)

Next

End With

End Sub

Mébon... au lieu d'un Combo tu peux aussi bien mettre un Label !

Quelle ingratitude ! Même pas un petit coucou...

Allez j'suis bon prince je te donne quand même la version 2 améliorée.

Nota : Le bouton Quit ne sert qu'a fermer le USF le reste est inutile puisque ce sont les TextBox_Change qui mettent à jour la feuille...

A+

Bonjour

j'ais un peux bricoler ton userform

A toi de voir

A+

Maurice

Un grand merci a vous tous les gars !

Vous m'apportez bien plus de solution que j'ésperais !

C'est juste enor;e, je vais pouvoir continuer mon projet en toute tranquilité

Je reviens vers vous rapidement, car je suis sure que je vais avoir encore besoin d'aide

Encore Merci

BARDEUF

Quelle ingratitude ! Même pas un petit coucou...

Allez j'suis bon prince je te donne quand même la version 2 améliorée.

Nota : Le bouton Quit ne sert qu'a fermer le USF le reste est inutile puisque ce sont les TextBox_Change qui mettent à jour la feuille...

A+

Salut Galopin, merci pour ton aide et pour ton UserForm.

Je suis confus car je ne trouve quasiment aucun code dans ton userform ? C'est etrange non ? Je voudrais copier coller les codes pour les utiliser dans un autre projet, est ce possible ?

Encore merci

Je suis confus car je ne trouve quasiment aucun code dans ton userform ? C'est étrange non ?

L'efficacité n'est pas nécessairement proportionnelle à la longueur du code... C'est même la plupart du temps le contraire !

Le UserForm, Module1 et le Module de classe sont inséparables !

Module1 crée les classes Button et TextBox à partir du Userform donc chaque objet est soigneusement identifié et numéroté.

et le Module de classe gère les évènements et reconnait l'objet cliqué ou modifié puis appelle les macros Action et RevAct qui

effectue les actions ou modifications nécessaires.

A+

Ok merci pour tes explications, je comprend le principe dans son enssemble, mais c'est surper complexe pour moi de faire évoluer mon Userform sachant que je n'y connais que dale

Je voudrais rajouter beaucoup de TextBoxs controlés par des SpinBouttons ...

Comment dois-je procéder pour les ajouter via ton code ?

Je vois bien que je dois utiliser le Module1 dont tu m'a parlé précedemment, mais je n'ai aucune idée de comment introduire les codes

Désolé d'etre inculte en la matiere, mais la je suis dans le néant totale...

Si tu pouvais encore m'aider ca serait vraiment super cool de ta part...

Je te joint mon USerForm final.

Encore merci pour ta patience

Bardeuf

Bonjour,

D'abord tu n'est pas obligé de passer par un module de classe pour tous tes objets.

Cependant cette méthode est très indiquée dans le cas d'un grand nombre d'objets, sinon la quantité d'objets rend rapidement la profusion de codes ingérables.

Cela exige au minimum une grande rigueur dans la conception.

Dans l'exemple précédent cela n'était possible que parce que les noms des TextBox s'incrémentaient de 1 en 1 dans l'ordre des colonnes.

Si les noms d'objets sont ésotériques, ça ne marche plus !

Pour résumer si tu veux gérer 100 Textbox, tu les numérotes de 1 à 100 dans l'ordre des colonnes...

Il en va de même pour les SpinButton... à minima les noms de Spin devraient avoir l'indice correspondant à leur TextBox dédié.

Toutefois concernant les SpinButton cette conception est discutable : Vu qu'on ne peux pas bricoler plusieurs Spin simultanément ni plusieurs TextBox simultanément, moi personnellement je ne mettrai qu'un seul Spin pour la totalité des TextBox, à charge de gérer la position du Spin à coté du TextBox qui prend le focus...

Bon ce point est discutable, Il faut aussi tenir compte des propriétés de tes Spin (s'ils sont tous identiques ou pas Max, Min, SmallChange... )

Quelques petites différences sont gérables... Trop de différences , c'est trop !

Enfin si les premiers TextBox s'incrémentaient de 21 en 21 en fonction du joueur là il va falloir définir la règle d'incrémentation pour chaque catégorie... Donc je ne peux guère faire quelque chose tant que tu n'a pas rétabli un ordre logique dans tes TextBox et tes Spin et tant que tu n'as pas programmé au moins 2 évènementielles (Change ?) pour chacun des groupes de contrôles... (Spin +TextBox)

Les autres CommandButton ont-ils une vraie fonction de CommandButon ou juste une fonction informative ?

Dans ce dernier cas, remplace les par des Labels avec la propriété SpecialEffect = 3-Etched ou 6-Bump comme j'ai fait avec le Label SCORE par ex...

Bon courage !

31bardeuf.xlsm (50.33 Ko)

Tout d'abord un grand merci pour ta réponse. A en juger la qualité et la précision de tes explications, je présume que tu es un expert en la matiére. C'est juste impressionant !

Je dois etre franc, je suis complétement largué de A á Z. Le UserForm que jái crée repose sur des lignes et des lignes de codes...Donc de surcroit, je ne maitrise absolument pas ton codage, qui effectivement n'écesite beaucoup moins de ligne, mais beaucoup plus de compétences, que je n'ai pas.

Pour info, j'ai crée cette UserForme en plus de 3 mois...des nuits blanches sur les Tutos Youtube et autres Forums...L' enfer pour ainsi dire, mais je garde espoir grace á vous les gars !

Bref, pour répondre á tes questions et en espérant que tu puisses m'aider :

''Les autres CommandButton ont-ils une vraie fonction de CommandButon ou juste une fonction informative ?''

Effectivement les autres CommandButton n'ont qu'une fonction informative, c'est juste de la déco.

Concernant les TextBoxs:

Les 21 premieres TextBoxs (de la TextBox 1 á la TextBox 21) incrémentent les colonnes de B á BL en fonction de l'OptionButton1/2/3 selectionnés.

C'est a dire :

OptionButton1 : Colonnes B á V

OptionButton2 : Colonnes W á AQ

OptionButton1 : Colonnes AR á BL

Concernant les TextBox 64 á 105 :

Elles sont indépendante des OptionButton1/2/3, c'est á dire qu'elles incrémentent les cellules de mon tableur en fonction du joueur choisi.

Concernant les textBox 106 á 114 :

Elles incrémentent uniquement les cellules 22DC á 22DK, sans prendre en compte le joueur choisi. Mais cette partie lá ne me pose pas de probleme, car j'ai directement specifié la Cellule via le RowSource de la Textbox.

Je te joint le premier UserForm que j´ai crée, celui avec 1 millions de lignes de codes.... il fonctionne presque parfaitement, mais impossible de savoir pourquoi il m'incremente des valeurs que je n'ai pas demandées.

Explication :

Lorsque que j'incremente un ''1'' dans la TextBox27 (Cellule 2AB)+ l'OptionButton1 sélectionné + joueur 1 sélectionné et que je permute l'OptionButton2 + changement de joueur plusieurs fois le UserForm m'incremente le ''1'' dans la cellules 2BS !

Je ne comprend pa pourquoi ?

Voila pourqui je vous ai soliciter au tout début.

Je ne sais pas si je suis clair, j´ai bien peur que non

En tout cas merci de m'avoir lu.

26userform-41.xlsm (99.09 Ko)

Pour le coup je me suis rendu compte que j'avais zappé pas mal de chose dans ton truc... C'est normal, je découvre donc je suis pas dans ta tête et je peux pas deviner ce que tu n'expliques pas !

Donc j'ai zappé que les OptionButtons call le combo.

Au vu de tes explications et de ce nouveau fichier j'ai testé et ça me semble normal vu ce que tu as programmé...

Quand tu cliques sur le joueur 2 tu charges les colonnes 2 à 60 quelque soit l'option en cours et ça ne change pas le combo.

Donc ça charge tes TextBox. (sans tenir compte des OptionsButtons)

Le fait de charger tes TextBox entraine un évènement Change sur tous les TextBox (dont le 27) mais cet évènement Change lui impose d'écrire aussitôt (cette fois ci en tenant compte des OptionButtons) sur d'autres colonnes...

...Vu que le Combo ne suis pas tes boutons pour l'instant c'est normal que les OptionButtons se réfèrent toujours à la ligne 1 tandis que les TextBox eux se réfèrent à la ligne affectée par les CommandButtons.

Bon de toute façon, pour moi : Point de salut dans cette histoire sans module de classe : Au final je vais pas explorer 3000 lignes de code pour chercher la petite erreur quand tu auras fini de dupliquer touts tes évènements pour les 70 Spins !

A+

Bonsoir,

Juste pour te montrer la puissance du module de classe je t'ai à peu près finalisé le truc pour presque tout (Sauf les Fautes/Adversaires) que j'ai un peu laissé de coté parce que là tu as complètement dérogé... Mébon si j'avais un peu de temps à perdre ça serait pas un pb...

Nota j'ai laissé le Combo pour l'affichage mais en fait je ne m'en sert pas j'utilise à la place une variable numérique (GNUM) qui se génère lors de l'appui sur un bouton.

A+

26userform-41-vg.xlsm (85.44 Ko)

Salut Galopin01,

Encore merci pour tes reponses, j'ai telechargé ta derniere version mais je ne peux pas la faire fonctionner, je ne sais evidement pas pourquoi. Je te joint les messages d'erreurs en PJ.

Je ne suis pas resté les bras croisés, j'ai refais completement mon UerForm, pour voir d'ou viens l'erreur, mais apres avoir vérifier mon code 50 fois, je suis fornel, il ne semble pas y avoir d'erreur, c'est la structure du code en elle meme qui n'ai pas bonne, comme tu ne l'a expliqué. Du moins ce que je crois avoir compris...

Je te joint mon essai simplifié qui me change les valeurs des que je change de joueur ! Je suis dans l'incapacité de trouver l'erreur, le UserForm que tu m'avais fait fonctionne parfaitement, mais je ne peux pas ajouter le reste de mon travail a ton codage (trop compliqué pour moi, ton niveau d'expertise est 1000 fois supperieur du mien).

Je suis un peu désespéré, je bosse dessus depuis des mois, j'ai besoin de votre aide pour faire fonctionner la version ''bardeuf Option Boutton 1_2_3'', sans que cette UserForm change les valeurs de mes cellules lorsque je change de joueur...(en gardan si possibe le meme code archaique que j'utilise, me permetant par la suite d'ajouter d'autres codes/fonction a mon UserForm.

Franchement Merci pour votre aide.

Bardeuf

incompatibilite de type incompatibilite de type 2

Bonsoir,

Bon aujourd'hui c'est soirée foot... On verra ça demain !

A+

Bon match !!!

Bonjour,

Tu as une erreur car tu n'as pas sélectionné de joueur...

Bon de toute façon mes boutons d'Options n'étaient pas encore opérationnels...

J'ai encore avancé un peu mais je vais laisser tomber le sujet vu que ma mayonnaise à pas l'air de te plaire !

Même avec les modules de classe ce n'est pas simple alors je vais pas me casser la tête si ça ne t'intéresse pas.

Mais les modules de classe sont la méthode ordinaire au-delà de quelques objets : sinon c'est pas gérable.

C'est pourquoi je pense que tu ne trouveras pas d'autre intervenant pour rebondir sur ce sujet.

A titre indicatif, pour ta gouverne, je pense que tu n'as pas bien évalué la complexité des procédures évènementielles :

Chaque changement de joueur entraine un changement de ligne et une lecture > écriture sur le UserForm

mais chaque lecture > écriture sur le UserForm entraine elle-même l'écriture inverse sur la feuille... car il y a une procédure Change sur chaque TextBox.

... Mais à chaque fois il faut vérifier la position des OptionButton pour vérifier les N° de colonnes

Un des problèmes est que chaque OptionButton doit re-provoquer un évènement Clic sur le bouton joueur pour recharger les données ad-hoc dans les TextBox ce qui entraine l'écriture inverse car les TextBox subissent l'évènement change....

A ce rythme le débogage d'un code comportant quelques centaines d'évènementielles (plusieurs milliers de lignes...!) deviens vite impossible. D'ailleurs le compilateur ne s'y trompe pas : Selon mon expérience, au-delà de 3000 lignes, la plupart du temps il se croise les bras et déclare que la macro est trop longue. TAPUKE tes yeux pour pleurer...

A+

Merci pour ta réponse Galopin01, c'est trés appréciable.

La solution que tu m'as apporté lors de nos premiers échanges est remarquable et répond parfaitement a ma première demande (fichier joint). A noter que la TextBox 16-17-18-19-20-21 ne fonctionne pas, elles n'incrémentent pas les cellules, mais je pense que c'est un petit oublie, que tu seras corriger en un rien de temps.

Pour en revenir au sujet, mon problème est que je suis incapable d'ajouter le reste de mon projet a ton code qui utilise des Modules de Classes. Je ne c'est pas utiliser les Modules de classe pour ajouter par example des SpinButton, ou ajouter de simple TextBox...

Mais je suis prés a apprendre si tu veux bien me l'enseigner ?

Comment ajouter au projet (fichier joint) plusieurs TextBox indépendantes des Bouttons Options ? Je touche au but, mais j'ai juste besoin d'un example simple que je pourrais par la suite ''Copier/Coller'' pour toutes mes autres TextBoxs

Par exemple :

Comment ajouter des TextBoxs independantes des ''Bouttons d'options'' qui incrémenteraient (en fonction du joueur choisi) les cellules BM,BN,BO,BP (c'est la zone que j''ai représenté en Blue sur le tableur Excel).

J'ai ajouté sur l'userForme, 4 textsBox afin que tu vois la ou je veux en venir. Les 4 textBox (23,23,24,25) incrémentant la zone bleu.

Si tu pouvais juste me montrer comment faire avec ta méthode ''Module de classe'' ca serai vraiment sympa de ta part.

Merci d'avance pour ton aide.

BARDEUF

Il faut reprendre mon exemple et adapter...

Les modules de classe dans notre contexte c'est facile :

Le problème c'est qu'il faut maîtriser un minimum le VBA et le passage de paramètres entre procédures. (ou fonctions...)

Je crois que tu n'as même pas le minimum syndical alors je vais commencer par le commencement...

Quand on ne maitrise pas les paramètres, on crée autant de procédures que de cas possible :

Prenons le cas d'une procédure "Bonjour"

Si tu as 20 intervenants (Boutons) tu vas faire 20 procédures dans ton USF

Sub Boutons1_Click()
      MsgBox "Bonjour Pierre"
End Sub
Sub Boutons2_Click()
      MsgBox "Bonjour Paul"
End Sub
Sub Boutons3_Click()
      MsgBox "Bonjour Alain"
End Sub
'...et ainsi de suite !

Avec un module de classe c'est le module de classe qui identifie le bouton (A partir d'une de ses caractéristiques, indice, Tag...) et il envoie à une procédure unique le paramètre qui identifie le bouton.

Private Sub CBtnGrp_Click()
      i = CInt(CBtnGrp.Caption)
      DisBonjourA i
End Sub

Et dans le Module Main une seule procédure à paramètre :

Sub DisBonjourA(i%) 'i est le paramètre
Dim Nam$
      Select Case i
      Case 1: Nam = "Pierre"
      Case 2: Nam = "Paul"
      Case 3: Nam = "Alain"
      'et ainsi de suite
      End Select
MsgBox "Bonjour " & Nam
End Sub

Ici le gain parait minime pourtant il est déjà réel : Au lieu de 20 procédures il n'y en a plus qu'une à stocker.

Tu vas me dire que le gain est vraiment minime parce que il faut 20 lignes pour le Select Case mais c'est une erreur : On pourrait très bien remplacer le Select Case par une ligne de Code plus concentrée :

Sub DisBonjourA(i%)
Dim Nam$
Nam = Split("Pierre Paul Alain")(i)
MsgBox "Bonjour " & Nam
End Sub

Revenons à ton souci :

Pour utiliser un module de classe en tête du Module Main on commence à prévenir VBA qu'il va devoir gérer toute une floppée de machins... et on fait nos déclarations

Dim Buttons(1 To 20) As CommonClasse 'il y a 20 boutons à Gérer
Dim TextBoxs(1 To 72) As CommonClasse '72 TextBox
Dim Spins(1 To 540) As CommonClasse '540 SpinButtons !

La suite dans le prochain message...

Rechercher des sujets similaires à "creation pave numerique commander combobox"