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

...Suite (et fin) du message précédent

Ainsi prévenu par ces déclarations il faut encore expliquer à VBA quel est tout ce bazar et ou le trouver. C'est le rôle de ma procédure :

Sub ouvrirUF()
'Initialisation des Boutons, TextBox et SpinButton
    Dim i As Integer

    For i = 1 To 20
        Set Buttons(i) = New CommonClasse
        Set Buttons(i).CBtnGrp = usfGAM.Controls("CommandButton" & i)
    Next i
    For i = 1 To 72
        Set TextBoxs(i) = New CommonClasse
        Set TextBoxs(i).TextGrp = usfGAM.Controls("TextBox" & i)
        usfGAM.Controls("TextBox" & i).Tag = i
    Next i
    For i = 1 To 72
        Set Spins(i) = New CommonClasse
        Set Spins(i).SpinGrp = usfGAM.Controls("SpinButton" & i)
        usfGAM.Controls("SpinButton" & i).Tag = i
    Next i

    usfGAM.Show
End Sub

VBA sait maintenant que 20 boutons dans le UserForm sont numéroté de 1 à 20 (avec le préfixe CommanButton...)

72 TextBox et 72 Spins sont numérotés de 1 à 72

En plus j'ai rajouté parce que c'est bien pratique que les TextBox et ces SpinButtons ont un Tag qui correspond à leur non d'indice.

Je n'ai pas eu à le faire pour les buttons parce que leurs Captions ont le même indice...

Tout cela est possible parce que j'ai travaillé soigneusement... Les TextBox sont ordonnés soigneusement dans l'ordre des colonnes

Les Spins ont le même indice que les TextBox auquel il correspondent... et s'il y a des contrôles qui échappent complètement au système

exemple le SCORE... Ben... Tu les mets hors indice ou tu les renommes autrement (score1 et score2 par exemple...)

Et dans le le module de classe tu mets les procédures évènements des objets que tu as créé. Ça tu as su faire.

Ayant bien lu TOUSSA tu as surement maintenant compris pourquoi tu as des TextBox qui ne marchent pas : S'il n'y en a que 15 qui fonctionnent c'est que tu n'en a déclaré que 15 ! (Dans les Dim et/ou dans Sub ouvrirUF

Pour les TextBox il y a plusieurs possibilitésje n'en développerai qu'une :

Le module de classe identifie chaque textBox par son Tag (qui est identique à son indice) et appelle la Sub RevAct() en lui transmettant le paramètre i

Il faut que tu débrouilles avec cette procédure pour qu'elle traite que les boutons 1 à 21 d'une manière (en fonction des OptionButton) et les autres différemment. Une conditions If fera l'affaire :

If k <22 Then les boutons dépendent des OptionButton

Else iC = 64 quel que soit OptionButton

Bon si tu arrives pas à traiter ça tout seul pas la peine d'insister avec VBA : Va à la pêche !

Bon je te donne la soluce quand même mais le mieux serait que tu la découvres par toi même :

Ce n'est plus un problème de module de classe c'est juste du pur VBA...

Sub RevAct(k%)
Dim iC%
With usfGAM
      If k < 22 Then 'Boutons 1 à 21
            If .OptionButton1 Then
                  iC = 1
            ElseIf .OptionButton2 Then
                  iC = 22
            Else
                  iC = 43
            End If
      Else
            iC = 64
      End If
            f.Cells(Ligne, k + iC) = IIf(.Controls("TextBox" & k).Value <> Empty, .Controls("TextBox" & k).Value, "")
End With
End Sub

Hum... Aucun code n'est vérifié : C'est juste la théorie à toi de comprendre, essayer et de corriger...

Avec un peu de chance ça va marcher si ça ne marche pas tu reviens avec ce que tu as fais je déboguerai.

Mais il faut absolument que tu maitrises parce que c'est vraiment du VBA basique...

A+

Encore un grand merci pour tes explications !

J'y vois un peu plus clair et il est certain que cette methode est bien plus rapide...

Je retourne au boulot avec tes outils de travail et je reviens vers toi si besoin ( chose que je pense inévitable )

Encore merci pour ta patience et ta passion !

Bardeuf

Bonjour Galopin,

J'espere que tu vas bien, je reviens vers toi pour avoir ton aide...

J'ai uitlisé ton code pour mes TextBox de 1 a 21, qui incrementent les cellules de mon tableau de I a BL, en fonction du joueur choisi et de l'OptionBouton selectionné. Cela fonction parfaitement.

Neanmois je n'arrive pas trouver la suite du code, afin que mes TextBox de 22 a 25 incrementent les cellules de mon tableau de BM a BP en fonction du joueur choisi ( a noter que l'OptionBouton n'interviens que pour les cellules de I a BL).

J'aurais besoin aussi de ton aide pour les spinbouttons...mais je prefere y aller pas par pas...

Merci pour ta reponse et j'ai cru comprendre que tu es un grand amateur de Foot...Allez les Bleues

Il faudrait déjà commencer par dimension ner tes déclaration correctement (de 1 à 25...)

Ensuite dans le module de classe tu pourrais faire :

Private Sub TextGrp_Change()
Dim i%
i = CInt(TextGrp.Tag)
if i < 22 then
RevAct i
Else
TonAutreMacro i
End if
End Sub

Après pour le contenu de TonAutreMacro je ne peux pas t'en dire plus c'est à toi de voir et de tester...

A noter que si tu dois avoir un grand nombre de TextBox qui doivent réagir différemment, au lieu de If il faudrait peut-être mieux utiliser une structure

Select case i
Case < 22: RevAct i
Case Else: TonAutreMacro i
End Select

Comme ça quand tu auras 400 objets TORAPUKA ordonner tes Cases supplémentaires... :

Select case i
Case < 22: RevAct i
Case <26: TonAutreMacro i
Case <100: AutreMacro i
Case Else: EtUneAutre i
End Select

A+

Bonjour Galopin,

Merci pour ta reponse,

1 ) Dimensionner les declarations correctement de 1 a 25, reviens a modifier le module suivant de cette maniere :

Option Explicit

Public Ligne, f

Ou dois-je creer une autre ligne vu que les Textbox 22,23,24,25 sont independantes des CommandBoutton, ce qui ressemblerais plutot a ca :

Option Explicit

Public Ligne, f

???

2) Changer le module de classe :

End Sub

Je ne comprend pas qu'elle autre macro je dois ajouter et ou

Cela me semblais simple mais la je me sent largué...

Merci pour ton aide

Bardeuf

Je n'ai pas ouvert ton classeur de nouveau mais...

Tu as créé quelque part (dans un module standart) une macro (RevAct) qui effectue une action pour les TextBox 1 à 22

Si tes Textbox (22à 25) doivent avoir un comportement différent tu créées une autre Macro qui agit en conséquence de tes désirs avec un branchement conditionnel (If...Then...End if) dans le module de classe.

Si au contraire tous les TextBox doivent utiliser la macro RevAct alors tu laisses le module de classe comme il était à l'origine il n'y a que la déclaration à modifier :

Dim TextBox(1 To 25) As CommonClasse conviendra très bien.

A+

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