Re: Renseigner des TextBox ou Label dans une feuille
Bonsoir à tous, bonsoir Jacques.
Bon, je ne sais pas ce qui s'est passé, mais mon message n'est pas passé. Alors je me le retappe. Evidemment, il était long!
2 possibilités selon que tu utilises les contrôles de la boite à outil contrôles de VBA, où les contrôles de la boite à outils Formulaires.
1- Boite à outils contrôles
Tu utilises tes contrôles exactement comme dans un userform, sauf que ces contrôles, au lieu d'appartenir à un userform, appartiennent à ta feuille:
With Sheets("Tool_Entete")
.Label1 =résultat.TextBoxCableurs
.TextBox1= "'" & résultat.TextBoxReferenceProduit
.Label2= résultat.TextBoxVersion
...etc
End With
Ah oui, au fait, par clic droit sur le contrôle sur ta feuille, tu as accés à Propriétés, ce qui t'ouvre une fenêtre exactement comme celle des propriétés sous VBA, et tu donnes notamment à ton contrôle le nom que tu veux.
En plus, si tu vas dans le code de ta feuille sous VBA, tu verras que tu auras accès aux procédures événementielles de chacun des contrôles insérés sur cette feuille (exactement comme avec un userform!)
2- Boite à outil formulaire
L'enregistreur de macro donne, lorsque l'on remplit un label par exemple:
Activesheet.Shapes("Label1").select
Selection.characters.Text="Blablabla"
Problème: tu ne connais pas le nom (pas de boite de propriétés disponibles pourle contrôle comme pour les controles VBA). En revanche, dans ta feuille, si tu sélectionnes ton contrôle, tu peux lui donner un nom dans la zone de nom de ta feuille excel (comme quand on donne un nom à une plage de cellule). Bizarrement, par défaut, le nom était "Etiquette 1", alors que dans le code, c'était "Label1". Mais tu peux lui donner n'importe quel nom. Je te conseille de donner un nom très explicite.
Maintenant, passer par une sélection n'est pas très élégant. Or c'est indispensable, car Activesheet.Shapes("Label1").characters.Text="Blablabla" provoque une erreur.
Reste une solution pour éviter de sélectionner successivement tous les contrôles: passer par une variable objet.
Ce qui donne pour toi:
Dim Contrôle as shape
With Sheets("Tool_Entete")
Set Contrôle=.shapes("TonContrôle1")
Contrôle.TextFrame.Characters.Text = =résultat.TextBoxCableurs
Set Contrôle=.shapes("TonContrôle2")
Contrôle.TextFrame.Characters.Text == "'" & résultat.TextBoxReferenceProduit
Set Contrôle=.shapes("TonContrôle3")
Contrôle.TextFrame.Characters.Text == résultat.TextBoxVersion
...etc
End With
Voilà. Reste à faire ton choix.
La première solution est plus simple et ouvre des perspectives intéressantes (procédures événementielles, modification des propriétés des contrôles)
Mais ces contrôles provoquent des Bugs sous Mac. Alors pour penser à Jean-Marie, si le fichier doit être utilisé sous Mac, il faut opter pour la seconde solution.
Allez, j'espère que cette fois, mon long monologue ne passera pas à la trappe!
Bonne soirée à tous.
Laurent.