Multiple Label / Caption

Bonjour à vous ,

J'ai un UserForm avec 75 Label...

Chacun sont nommé :

MO1

MO2

MO3

MO25

DO1

DO2

DO25

Ci-dessous mon code:

Function Ouverturechoix()
If MsgBox("Souhaitez-vous accéder à la feuille de Saisie ? Si non, Fiche", vbYesNo + vbQuestion, "Saisie ou Ficher") = vbYes Then
    If Application.Caption = ("MO1_25") Then
    'Nom de l'exploitation
    UserForm2.ComboBox1.Value = Feuil1.Range("O4").Value
    ElseIf Application.Caption = ("DO1_25") Then
    UserForm2.ComboBox1.Value = Feuil1.Range("O6").Value
    ElseIf Application.Caption = ("EL1_25") Then
    UserForm2.ComboBox1.Value = Feuil1.Range("O8").Value
    End If
'recherchev Parcelle dans T1:U75 affiche 2ième colonne
'recherchev de culture
'Nom de la Parcelle
UserForm2.ComboBox2.Value = Application.VLookup(Application.Caption, Range("T1:U75"), 2, False)
'Culture
UserForm2.ComboBox6.Value = Application.VLookup((Application.Caption), Range("T1:V75"), 3, False)
UserForm2.Show
Else
Feuil5.Range("D8") = Application.VLookup((Application.Caption), Range("T1:U75"), 2, False)
Sheets(Feuil5.Name).Select
End If
End Function

Mon soucis c'est Application.Caption ça donne le nom de mon fichier excel tandit que j'aimerai qu'il me sorte le nom caption du label sur lequel je clic. Genre Label1 son caption c'est MO1, il doit me resortir MO1...

Je pourrait mettre Label1.caption mais ça va fonctionner pour une seul label. Est-il possible que ça fonctionne pour mes 75 label ?

Merci beaucoup d'avance !!!

Bonjour,

de quel façon Function Ouverturechoix() est appelé ?

Bonjour,

Dans chacun de mes 75 label j'écris ouverturechoix

J'ai essayé avec

 OLEObjects

avec :

ActiveControl.Object.Caption

Mais sans réussite peut être l'ai-je mal écris...

CI-joint un Fichier exemple avec seulement 12 label ...

26multiple-label.xlsm (29.03 Ko)

Bonjour à tous,

Pour ce type d'action, un module de classe est préférable.

Voici une démo avec un usf à 20 labels, le clic sur label est géré dans le module de classe par une seule procédure, ici "Lbl_click"

Ca évite d'écrire plusieurs fois le même code

Pierre

Private Sub Lbl_click()
    MsgBox Lbl.Name
End Sub
32demo-class.xlsm (26.31 Ko)

Bonjour pierrep56,

Oulaa !!

J'ai du mal à comprendre tout le code ça ne ressemble pas à ce que je souhaite enfin j'ai pas l'impression mais ça s'y rapproche du coup il faut que j'essai de bidouiller tout ça avec le excel que je vous ai partagé.

Le code est relativement simple.

1/ Dans le module "Accueil" il y a une variable publique "Coll_Usf As Collection"

C'est une collection dans laquelle on peut placer des objets divers comme par exemple ici des labels.

2/ Ensuite on crée un module de classe qu'on nomme comme on veut, ici je l'ai appelé "Class_Sebyg"

A l'intérieur on déclare un objet public qui réagira aux événements : "Public WithEvents Lbl As MSForms.Label" qui est relié à un label quelconque

Dans ce module l'événement clic est déclaré et va afficher le nom de l'objet.

On peut aussi afficher son caption :

Private Sub Lbl_click()
    MsgBox Lbl.Name & " " & Lbl.Caption
End Sub

et en faire ce qu'on veut après.

3/ Enfin quand on ouvre l'usf, on initialise les labels en les déclarant les uns après les autres comme éléments de la Class_Sebyg

Tient en relisant le code proposé il y a une ligne de trop, on peut écrire plus simplement :

Private Sub UserForm_Initialize()
Dim Usf_Class As Object, i As Integer

    Set Coll_Usf = New Collection' pour instancier la collection
    For i = 1 To 20
        Set Usf_Class = New Class_Sebyg  '  nouvelle instance de la classe
        Set Usf_Class.Lbl = Me.Controls("Label" & i) '  on place le label dans un objet Lbl
        Coll_Usf.Add Usf_Class  '  on ajoute ce nouvel objet à la collection
    Next i
End Sub

Maintenant, on peut aussi prévoir d'autres événements : click, change, mousedown, mousemove, etc ...

pour exemple ici un exemple de module de classe copié/collé d'une de mes appli, pour montrer qu'on faire des traitements plus ou moins complexes à l'intérieur de modules de classe

Bref les modules de classe, c'est bon, mangez-en.

Pierre

PS : Juste une remarque de méthode sur le code de ton 1er message :

* En VBA, une function est sensée retourner une valeur.

* ici il semble que le code ne fasse uniquement que du traitement. Il serait donc mieux que ça soit fait dans une procédure Sub

Salut à tous une solution toute bête

Function Ouverturechoix(strTag As String)
    If MsgBox("Souhaitez-vous accéder à la feuille de Saisie ? Si non, Fiche", vbYesNo + vbQuestion, "Saisie ou Ficher") = vbYes Then
    Select Case strTag
        Case "MO1_25"
            'Nom de l'exploitation
            UserForm2.ComboBox1.Value = Feuil1.Range("O4").Value

        Case "DO1_25"
            UserForm2.ComboBox1.Value = Feuil1.Range("O6").Value

        Case "EL1_25"
            UserForm2.ComboBox1.Value = Feuil1.Range("O8").Value
        Case Else

        End Select

        'recherchev Parcelle dans T1:U75 affiche 2ième colonne
        'recherchev de culture
        'Nom de la Parcelle
        UserForm2.ComboBox2.Value = Application.VLookup(Application.Caption, Range("T1:U75"), 2, False)
        'Culture
        UserForm2.ComboBox6.Value = Application.VLookup((Application.Caption), Range("T1:V75"), 3, False)
        UserForm2.Show
    Else
        Feuil5.Range("D8") = Application.VLookup((Application.Caption), Range("T1:U75"), 2, False)
        Sheets(Feuil5.Name).Select
    End If

    End Function

Et dans le code de ton label

Private Sub Label1_Click()
    Ouverturechoix Label1.Tag
End Sub

l'utilisation de Select Case rends le code plus clair n'est-il pas ?

Merci pierrep56, ça fait 2H que je me prend la tête

Quand je click sur mon bouton 1 de ma feuille je lui ai mis la macro usf il ne veux même plus ouvrir mon userform1.show... le truc basique pourtant en VBA

Bref je comprend pas je me prend trop la tête à l'adapter sur mon fichier, je verrai ça demain matin.

Si toute fois tu vois l'erreur que j'ai faite je suis preneur.

Bonne soirée à vous !

20multiple-label.xlsm (31.24 Ko)

Bonjour,

C'est simple, dans ton exemple l'usf comporte 12 labels la boucle doit donc être

For i = 1 To 12

(et non to 20)

Pierre

Bonjour pierrep56,

Punaise c'était ça !!!

Comme excel me mettait en jaune UserForm1.show je me suis dit que c'était à ce niveau que j'avais une erreur mais laquelle impossible de trouver

Ça fonctionne a un détail près, il me met pas le 'Nom dans mon UserForm2.ComboBox1

(Et un petit plus, si je veux pas passer par le "Bouton 1", je peux afficher mon UserForm1 dans la plage de cellule ("F4:H7") par exemple ?

Ou alors pour que ce soit fixe sur ma feuille sans passer par un USF peut être qu'il aurait mieux valu que je passe par 75 ActiveX CommandButton ?

Mais du coup le code de pierrep56 ne fonctionne plus et ce que je souhaite n'est peut être plus possible .. ?

Rechercher des sujets similaires à "multiple label caption"