Boucle pour changer contenu de plusieurs labels [Résolu]

Signaler
Messages postés
33
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2007
-
Messages postés
33
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2007
-
Bonjour,
Je bloque actuellement dans mon programme sur Excel.
Je vous explique mon problème : J'ai plusieurs labels (disons 3), qui se nomment respectivement Label1, Label2 et Label3.
Je souhaiterais changer le contenu de ces labels en utilisant une boucle For ... Next.
J'ai essayé quelque chose comme ça :
               For i = 1 To 3
                  Label(i).Caption = i
               Next
Mais ça ne marche pas...
Pouvez-vous m'aider ? Merci d'avance.

7 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Salut,
(Encore une fois: Le moteur de recherche aurait pu t'aider car c'est une question qui revients souvent)


Comme il n'y a pas la propriété index pour les controles en VBA, il faut s'y prendre différemment.


Voici un code qui incrit dans tout les labels d'un userform le mot Bonjour








Dim Ctrl As Object 

For Each Ctrl In Me.Controls 
    If TypeOf Ctrl Is MSForms.Label Then Ctrl.Caption = "BONJOUR" 
Next Ctrl 
 







<small> Coloration syntaxique automatique [AFCK]</small>

       














@+, Julien
Pensez: Règlement/STRONG>
Messages postés
33
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2007
3
Ok, ça marche bien !
Mais peux-tu m'expliquer le code s'il te plaît, je n'y comprends rien...
Merci.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
'Déclaration d'une variable de type Object


Dim Ctrl As Object 

'Boucle passant en revue tout les
'controles du Userform dans lequel
'tu places ce code (collection Me.Controls)
For Each Ctrl In Me.Controls 
    'Si le type du Control est Label
    '=> Alors ON modifie la propriété Caption
    If TypeOf Ctrl Is MSForms.Label Then Ctrl.Caption = "BONJOUR" 
Next Ctrl 
 







<small> Coloration syntaxique automatique [AFCK]</small>

       













@+, Julien
Pensez: Règlement/STRONG>
Messages postés
33
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2007
3
Ok, je comprends mieux.


Mais comment faire pour donner une propriété Caption différente à chacun des labels ?
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Re,

Essaie ceci.




Dim Ctrl As Object 

'Boucle passant en revue tout les
'controles du Userform dans lequel
'tu places ce code (collection Me.Controls)
For Each Ctrl In Me.Controls 
    'Si le type du Control est Label
    '=> Alors ON modifie la propriété Caption
    If TypeOf Ctrl Is MSForms.Label Then 
        'Selon le nom du Control
        Select Case Ctrl.Name 
            'Si c'est le Label1 => ..
            Case "Label1": Ctrl.Caption = "Ceci est le Label 1" 
            'Sinon
            Case Else: Ctrl.Caption = "Bonjour" 
        End Select 
    End If 

Next Ctrl 
 







<small> Coloration syntaxique automatique [AFCK]</small>

       














@+, Julien
Pensez: Règlement/STRONG>
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

Je préciserai même que si tu as plusieurs labels (par exemple 10) mais que tu souhaites modifier le texte de seulement 3, tu peux utiliser la propriété Tag.

Après pour gérer les évènements de type MouseMove, Click, etc..
que sur ces 3 labels, il faut passer par un Module de Classe, pas très complexe à faire.

Exemple :

<small> Coloration syntaxique automatique </small>

'ici dans un Module.
'N'appelle pas ton UserForm (lorsque tu en as besoins) mais la 
'procédure suivante

Dim Labels(1 To 3) As New LabelMoisClass  

Sub Attribuer_Controls()  
    ' pour le module de classe (evenement lbl_MouseMove 
    Dim ctl As Control  

    ' initialise le compteur de controle 
    Dim lblXYZCount As Integer  
    lblXYZCount = 0  

    ' le fait de mettre "lblXYZ" a la propriete Tag des controles 
    ' ca permet de trier  avec les autres (ex. tu as 20 labels, 
    ' tu veux que le Module de Classe s'applique 
    ' seulement a 3 labels, a ceux la tu leur mets la propriete Tag) 
    For Each ctl In NomDeTaForm.Controls  
        If ctl.Tag = "lblXYZ" Then  
            lblXYZCount = lblXYZCount + 1  

            Set Labels(lblXYZCount).lblXYZ = ctl  
        End If  
    Next ctl  
    NomDeTaForm.Show  'met le nom de ta form 

End Sub  

' ici à placer dans un Module de Classe (nommé ModuleLabels)

Public WithEvents lblXYZ As MSForms.Label  

Private Sub lblMois_MouseMove _  
    ByVal Button As Integer, ByVal Shift As Integer, _  
     ByVal X As Single, ByVal Y As Single)  

'bah le code que tu veux qu'il produise lors du survol sur tes LABELS;
'il suffit de dire lblXYZ.Caption = "Salut", par exemple, et ça s'affiche
'après le survol de la souris sur les labels

End Sub  

<small> Coloration syntaxique automatique </small>

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à ce
<font face="Courier N
Messages postés
33
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2007
3
Merci beaucoup de vos réponses précises et rapides !

A+