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 ...
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
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 !
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 .. ?