Public Withevents

Bonjour

Sur ce forum, j'ai téléchargé une application qui affiche une calculette et qui fonctionne en cliquant sur les touches...

Pour mieux comprendre son fonctionnement, je l'ai recréée à l'identique (userform et procédures) mais lorsque je veux l'initialiser, j'ai un message "objet spécifié introuvable". qui apparaît dés l'initialisation de la ligne " for b=0 to 10...."

De plus, habituellement, lors de la création d'un bouton de commande ou d'un optionButton, on lui affecte un événement (Click)

Or là , dans l'exemple téléchargé je n'ai trouvé aucun bouton GrChiffres et je l'ai donc recopié comme sur le modèle.

C'est peut-être une des caractéristiques du module de classe que je découvre....

Si quelqu'un pouvait me m'éclairer....

merci

'Contenu du module de classe ClasseBoutons

------------------------------------

Dim Btn(0 To 10) As New ClasseBoutons

Private Sub UserForm_Initialize()

End Sub

Bonjour,

Il vaudrait lieux fournir directement ton classeur avec ton UserForm... pour qu'on puisse tester.

Mais je suspecte quand m^me fortement le

...= Me("Chiffre" & b)

A+

Bonjour,

En attendant si celle que tu as téléchargé ne te convient pas ;

Un petit fichier test.

Il suffit d'exporter le userForm et le module de class correspondant pour l'importer ensuite dans ton fichier.

Tu pourras ensuite faire un bouton pour appeler la calculette.

118test-calculette.zip (17.56 Ko)

Bonjour,

C'est assez simple à comprendre, dans ton projet, tu rajoutes un module de classe et tu le nommes "ClasseBoutons" dans lequel tu colles le code ci-dessous (ceci a pour effet d'avoir un événement commun à tous les boutons) :

Public WithEvents GrChiffres As MSForms.CommandButton

Private Sub GrChiffres_Click()
    Calculette.Result = Calculette.Result & GrChiffres.Caption
End Sub

Sur ton UserForm, tu crées 10 boutons que tu nommes Chiffre0, Chiffre1, Chiffre2, etc... jusqu'à Chiffre9 (je ne sais pas pourquoi la boucle va de 0 à 10 car il n'y a que 10 chiffres dans le système ?) et dans ce formulaire, tu colles le code ci-dessous (boucle de 0 To 9) en ayant au préalable nommé ton UserForm "Calculette" et en ayant posé un contrôle Label ou TextBox nommé "Result" pour recevoir le résultat retourné par la procédure événementielle commune "GrChiffres" :

Dim Btn(0 To 9) As New ClasseBoutons

Private Sub UserForm_Initialize()

    Dim b As Integer

    'crée un groupe de boutons GrChiffres avec les boutons Chiffre0,Chiffre1...
    For b = 0 To 9: Set Btn(b).GrChiffres = Me.Controls("Chiffre" & b): Next b

    ' le formulaire suit la sélection
    Me.Top = ActiveWindow.Height / 2
    Me.Left = ActiveCell.Left + 150

End Sub

Pour le reste, je te laisse continué ou revenir si tu as d'autre questions !

à Théze

.. c'est justement cet exemple là (de galopin01) que j'ai téléchargé et qui fonctionne parfaitement quand je le teste mais quand je le reconstruis en me référant aux procédures existantes, ça coince comme expliqué au début. Le module de classe est pourtant créé mais l'affectation des 10 valeurs (de 0 à 9) ne se fait pas... j'ai un message "objet spécifié introuvable". qui apparaît dés l'initialisation de la ligne " for b=0 to 10...."

merci pour vos contributions.. je poursuis ma quête...

Re,

Mais tu vois bien que la boucle va de 0 à 10 alors que tu n'as que 10 boutons de chiffres (0 à 9) ! Dans ce cas, la boucle doit aller de 0 à 9 si ton premier bouton est nommé "Chiffre0" ou de 1 à 10 si ton premier bouton est nommé "Chiffre1".

Sinon, comme te le demande galopin01 (que je salut au passge ), poste le classeur que tu as fais pour voir !

à Théze

.. c'est justement cet exemple là (de galopin01) que j'ai téléchargé et qui fonctionne parfaitement quand je le teste mais quand je le reconstruis en me référant aux procédures existantes, ça coince comme expliqué au début.

Re, Dans ce cas si cela vient d'un des fichiers de Galopin01 tu fais la même chose : Tu exportes le Userform et le module de class

et tu les réimportes dans ton fichier

Comme çà aucun risque d'erreur de recopiage

...je voudrais surtout comprendre pourquoi ça coince…

en lançant le fichier joint restreint (module de classe, userform et initialize ) , il y aurait peut-être moyen de trouver l'anomalie...non ?

merci de t'intéresser à mon problème..

96afficheur.zip (12.60 Ko)

Bonjour,

En tout premier et comme je l'ai dis dans mon précédant message, tu doit faire correspondre la boucle donc, c'est 1 To 10 et non 0 To 10 :

Dim Btn(1 To 10) As New Classe1 '<--- en tête de module !

Private Sub UserForm_Initialize()

  ' Crée un groupe de boutons Num avec les boutons Chiffre0,Chiffre2,...
    For b = 1 To 10: Set Btn(b).Num = Me("CommandButton" & b): Next b

End Sub

ensuite, tes boutons se nomment "CommandButton1", "CommandButton2", etc... et non "Chiffre0", "Chiffre1", etc...

et enfin, le tableau doit être déclaré en tête de module et non dans la procédure Initialize" du formulaire

….ces petits changements ont réglé le problème…. ...l'afficheur apparait enfin à l'écran.. merci

si j'ai écrit 0, et "chiffre" c'est que j'ai recopié le modèle de Galopin01 qui fonctionnait ainsi...quant à la déclaration du tableau, j'ai du la postionner avant "Initalize" et comme ça ne marchait pas, j'ai du la bouger pour essayer autre chose... manque de "métier" et ...de réflexion... mea culpa . En tout cas, c'est sympa d'être revenu sur mon cas...Encore merci

et comme ça ne marchait pas, j'ai du la bouger pour essayer autre chose...

C'est ce que nous avons tous fait sans exception et le faisons encore donc ne te fais pas de soucis le dessus c'est tout à fait normal

Rechercher des sujets similaires à "public withevents"