Éviter la répétition de macro

Etienne2323

XLDnaute Impliqué
Bonjour à tous,
je travaille actuellement avec un userform contenant une centaine de textbox. J'utilise les 4 macros suivantes pour chacun des textbox.
VB:
Private Sub TextBox25_AfterUpdate()
TextBox25.Value = Format(CDbl(TextBox25.Value / 100), "0.0%")
Call Total2
End Sub

Private Sub TextBox25_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox25.SetFocus
Me.TextBox25.SelStart = 0
Me.TextBox25.SelLength = Len(Me.TextBox25)
End Sub

Private Sub TextBox25_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Me.TextBox25.SetFocus
Me.TextBox25.SelStart = 0
Me.TextBox25.SelLength = Len(Me.TextBox25)
End Sub

Private Sub TextBox25_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = Asc(Point) Then
        If InStr(TextBox25, Virgule) = 0 Then
            KeyAscii = Asc(Virgule)
        Else
            KeyAscii = 0
        End If
    ElseIf InStr(entrees_decimales_permises, Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
    ElseIf InStr(TextBox25, Virgule) > 0 And KeyAscii = Asc(Virgule) Then
        KeyAscii = 0
    End If
     
    If KeyAscii = 13 Then SendKeys "{TAB}": KeyAscii = 0
End Sub

Les mêmes 4 macros sont ensuite répétées pour le Textbox26, ensuite le TextBox27, et ainsi de suite jusqu'à TextBox124.

J'aimerais savoir s'il existe une manière d'énumérer le nom de chacun des textbox dans un array par exemple (ou n'importe quelle autre possibilité) afin de ne pas être obligé de répéter 100 fois les mêmes codes en ne changeant que les numéros des textbox.

J'espère avoir été clair,

Merci d'avance,

Cordialement,

Étienne
 

Etienne2323

XLDnaute Impliqué
Re : Éviter la répétition de macro

Salut mercant76, le forum,
merci de la réponse rapide. Mais à moins de me tromper, la boucle ne pourrait pas fonctionner pour des événementielles comme ce que je présente plus haut. Je ne cherche pas à faire une loop sur tous les textbox, je cherche à ce que lorsqu'un textbox est modifié, ou s'apprête à l'être, alors les paramètres souhaités s'appliquent.

De plus, avec la quantité de paramètres, la boucle ralentirait beaucoup trop le processus.

Merci quand même pour la réponse.

D'autres idées ??

Cordialement,

Étienne
 

Pierrot93

XLDnaute Barbatruc
Re : Éviter la répétition de macro

Bonjour Etienne, Mercant

regarde du coté des modules de classe, mais les événements "afterupdate" et "beforeupdate" ne sont pas disponibles dans une classe pour les textbox...

bonne soirée
@+
 

Etienne2323

XLDnaute Impliqué
Re : Éviter la répétition de macro

Salut Pierrot, le forum,
merci de la réponse. Alors là, je dois avouer que tu me perds complètement avec les modules de classe. Je ne les ai jamais utilisés. Je suis totalement prêt à essayer ta piste de solution, mais comme un enfant qui commence à écrire, j'aurais besoin que tu me prennes par la main pour mettre en place une telle solution.

Merci encore !

Cordialement,

Étienne
 

YANN-56

XLDnaute Barbatruc
Re : Éviter la répétition de macro

Bonjour Etienne, mercant, et à ceux qui passeront par ici,

Etienne que je suis bienheureux de croiser à nouveau... :) :) :)

Je suis un peu étonné qu'avec ce que tu sais faire,
tu n'utilises pas un module de Classe pour tes TextBoxes! :confused:

Tu diviserais par 124 le nombre de lignes à utiliser...

En l'attente de ta réponse,

Amicalement.

Yann
 

Etienne2323

XLDnaute Impliqué
Re : Éviter la répétition de macro

Salut Yann,
le plaisir est réciproque.

En fait, mes connaissances de programmation sont purement autodidactes et se limitent plus ou moins aux problèmes que j'ai rencontré jusqu'à maintenant. Je crois que je me débrouille bien mais il y a encore un monde à apprendre devant moi ;) Et vraisemblablement, les modules de classe en font partie !

Je vais avoir besoin d'un coup de main les amis pour bâtir tout ça !

En vous remerciant beaucoup,

Étienne
 

YANN-56

XLDnaute Barbatruc
Re : Éviter la répétition de macro

Bonjour Etienne, mercant, Pierrot, et à ceux qui passeront par ici,

Pierrot! Je suis désolé; je ne t'avais pas vu.... Heureux itou de te savoir là. :)

De mon coté, je suis disposé à aiguiller Etienne,
mais au regard de ta compétence, je te laisse la main.

Amicalement.

Yann

P.S. Je reste attentif, et si besoin ...
 

Etienne2323

XLDnaute Impliqué
Re : Éviter la répétition de macro

Bonjour à tous,
je viens de tomber sur l'exemple suivant : Ce lien n'existe plus

En suivant cet exemple, je vais essayer de bidouiller quelque chose. Je vous tiens au courant !

Encore une fois, un gros merci pour le coup de main !

Cordialement,

Étienne
 
Dernière édition:

Etienne2323

XLDnaute Impliqué
Re : Éviter la répétition de macro

Rebonjour à tous,
je viens de mettre en place mon module de classe. Ça fonctionne bien avec les keypress et les mouse down. Par contre, comme le mentionnait Pierrot dans sont message #4, le beforeupdate et afterupdate ne sont pas disponibles en suivant cette méthode. Existe-t-il une alternative ?

Merci encore,

Étienne
 

Pierrot93

XLDnaute Barbatruc
Re : Éviter la répétition de macro

Re, bonsoir Yann:)

essaye peut être avec l'événement change.... j'avais commencé ceci... pour les textbox 25 à 28...
dans le module de l'usf :
Code:
Option Explicit
Private MesObjets() As New Classe1
Private Sub UserForm_Initialize()
Dim i As Byte
For i = 1 To 4
    ReDim Preserve MesObjets(1 To i)
    Set MesObjets(i).tb = Me.Controls("TextBox" & i + 24)
Next i
End Sub

dans le module de classe :
Code:
Option Explicit
Public WithEvents tb As MSForms.TextBox
Private Sub tb_Change()
Static b As Boolean
If b Then Exit Sub
b = True
tb.Value = Format(tb.Value / 100, "0.0%")
With tb
    .SetFocus
    .SelStart = 0
    .SelLength = Len(tb)
End With
b = False
End Sub
Private Sub tb_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
With tb
    .SetFocus
    .SelStart = 0
    .SelLength = Len(tb)
End With
End Sub

A voir, pour afficher ton format pourcentage cela risque de pas être top....
 

YANN-56

XLDnaute Barbatruc
Re : Éviter la répétition de macro

Etienne,

Bienvenue sur Excelabo.net | www.excelabo.net

C'est bien! Mais cette façon de faire est sclérosante! :mad:

Pour le cas précis: O.K., Mais quant à l'adapter à ses propres besoins;
il y a du boulot coté souplesse et comprenette!!!

De mon coté, je la fais genre "Plouc"!
Mais au moins les vaches y retrouvent facilement leurs veaux

Je vais tenter de retrouver un de mes exemples (Cela ne va pas être de la tarte)
Mais, au moins les "...Update" seront inutiles, car l'on peut faire autrement.

Amicalement.

Yann.

Crotte de bique!......... Encore doublé par Pierrot :)
 
Dernière édition:

Etienne2323

XLDnaute Impliqué
Re : Éviter la répétition de macro

Salut Pierrot,
merci de la réponse.

Par contre, dès que je mets en place, j'obtiens le message que j'ai placé en pièce jointe.

Merci encore,

Étienne

Edit : Quel idiot, j'avais oublié de renommer le module de classe. Toutes mes excuses !!!
 

Pièces jointes

  • Image.JPG
    Image.JPG
    36.8 KB · Affichages: 120
  • Image.JPG
    Image.JPG
    36.8 KB · Affichages: 130
  • Image.JPG
    Image.JPG
    36.8 KB · Affichages: 131
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 354
Messages
2 087 548
Membres
103 588
dernier inscrit
Tom59300Tom