Boucle pour changer contenu de plusieurs labels

Résolu
lenemmasque Messages postés 33 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 23 mars 2007 - 25 juil. 2006 à 16:20
lenemmasque Messages postés 33 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 23 mars 2007 - 26 juil. 2006 à 08:25
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

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
25 juil. 2006 à 16:25
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>
3
lenemmasque Messages postés 33 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 23 mars 2007 3
25 juil. 2006 à 16:30
Ok, ça marche bien !
Mais peux-tu m'expliquer le code s'il te plaît, je n'y comprends rien...
Merci.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
25 juil. 2006 à 16:33
'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>
0
lenemmasque Messages postés 33 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 23 mars 2007 3
25 juil. 2006 à 16:35
Ok, je comprends mieux.


Mais comment faire pour donner une propriété Caption différente à chacun des labels ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
25 juil. 2006 à 16:44
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>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 juil. 2006 à 03:42
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
0
lenemmasque Messages postés 33 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 23 mars 2007 3
26 juil. 2006 à 08:25
Merci beaucoup de vos réponses précises et rapides !

A+
0
Rejoignez-nous