Redondance de code

Signaler
Messages postés
4
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
26 mai 2008
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour,

Je programme sous macro excel en VBA

Voila mon soucis:
J'utilise plusieurs (une dizaine) de label où je demande à l'utilisateur ce qu'il souhaite y inscrire après qu'il ai cliqué sur l'un de ces label et le fait reccommencer tant que la taille de la phrase inscrite est trop grande.
Le seul truc c'est que je re-écrit le code pour chaque label...type:

Private Sub Label1_Click()
Label1.Caption = InputBox("blablabla")    
With Label1
        .autosize = True
        .TextAlign = fmTextAlignCenter
        .Width = 63
        .WordWrap = True
        .SpecialEffect = fmSpecialEffectFlat
End With
Do While Label1.Height > 59.25
        Label.Caption = InputBox("blablabla")
Loop
With Label1
        .Width = 63
        .Height = 59.25
End With
End Sub


Private Sub Label2_Click()
Label2.Caption = InputBox("blablabla")
With Label4
        .autosize = True
        .TextAlign = fmTextAlignCenter
        .Width = 63
        .WordWrap = True
        .SpecialEffect = fmSpecialEffectFlat
End With
Do While Label4.Height > 59.25
        Label.Caption = InputBox("blablabla")
Loop
With Label4
        .Width = 63
        .Height = 59.25
End With
End Sub


Ce qui est lourd et qui plus est, je suis persuadé qu'il y a un moyen extreeeeeeeeeeeemement plus simple comme un appel de fonction ou autre.
Or je n'arrive pas à me débrouiller pour récupérer le chiffre qui suit le label (Label1, Label2, Label3...) et par conséquent je n'arrive pas avancer.

Quelqu'un aurait une indication sur la voie à suivre ou meme une astuce évitant le copier-coller de code basic.

Merci.

3 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
La propriété Name d'un label devrait te permettre d'en connaître le nom, non ?

Mais il y a plus simple dès lors que c'est le contrôle actif (ActiveControl)

Tu peux également faire une fonction, à laquelle tu passes comme paramètre le contrôle actif ...
Messages postés
14763
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 janvier 2021
151
Bonjour

En VB6, il y a les Indexs de controles.

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Sous Excel, si tu es sur un UserForm, utilise la collection Controls si tu veux utiliser un pseudo-index

Me.Controls("Label" & numero) pointera sur le Label en question.
Par contre, tu n'auras pas le choix que d'entrer un minimum de code redondant pour chaque Label puisque le paramètre Index n'existe pas sous Excel...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI