Redondance de code

cs_Masco Messages postés 4 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 26 mai 2008 - 26 mai 2008 à 15:06
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 27 mai 2008 à 23:46
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

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 mai 2008 à 15:13
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 ...
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 mai 2008 à 15:16
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
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
27 mai 2008 à 23:46
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
0
Rejoignez-nous