Remplir 50 labels en une seule commande ? [résolu] [VBA Excel] - VB/VBA/VBS - Programmation
Marsh Posté le 08-12-2004 à 18:39:50
pq t'as pas fais un groupe de label ? avec ca ta boucle était ok.
Marsh Posté le 08-12-2004 à 18:58:49
Bonsoir,
Le code suivant donne la caption 1 a 50 à tes 50 premiers labels...
A adapter selon ton cas...
Sub Test()
For i = 1 To 50
Z = "Label" & i
Worksheets(1).OLEObjects(Z).Object = i
Next
End Sub
A+
PS: ne fonctionne pas si les labels sont groupés.
Marsh Posté le 08-12-2004 à 19:22:37
Re...
S'il y a d'autres OleObject dans ton userform, il peut-être utile de récupérer auparavant le N° d'index OleObject de ton 1er Label avec le code suivant...
Sub A_Test()
'1) ProgId (pour retenir uniquement les contrôles Label)
'2) Object (remplace la propriété Caption pour ce genre de contrôle)
'**************************
Dim O As OLEObject, i%
For Each O In ActiveSheet.OLEObjects
If O.progID = "Forms.Label.1" Then
MsgBox O.Index
Next
End Sub
Ensuite tu adaptes la première procédure (Test) avec les N° d'index récupérés.
...Il y a peut-être plus simple, mais c'est ce que j'ai trouvé de mieux dans un cas identique et surtout si tes captions sont susceptibles de changer à chaque appel...
Cordialement
Marsh Posté le 08-12-2004 à 19:48:08
Merci pour vos réponses rapides !
M'en vais tester tout ça...
push : peux-tu me donner un peu plus de précision sur ce que j'y gagne à grouper mes labels ?
galopin01 : j'vais bouquiner ta solution avec l'aide (F1) car je ne maîtrise pas trop les OLEObject...
Je reviens si je galère trop.
A+
Marsh Posté le 08-12-2004 à 19:51:58
bein si tu groupes tes labels, tu les identifies par leur indice respectif, label(0) label(1) label(2) ... donc c'est ultra simple d'attaquer tout un groupe de label dans une boucle, dans ton cas un truc du genre
For ligne = 1 To 50
label(ligne-1).caption = cells(ligne, 1)
Next Ligne
Marsh Posté le 08-12-2004 à 20:00:28
Ok, merci c'est clair...
Je fais les tests dès demain !
A+
Et dire que j'allais me taper les 50 lignes de code !
Marsh Posté le 08-12-2004 à 20:14:14
euh .... on peut indexer les controles en VB mais je pense pas qu'on puisse le faire en VBA !
Marsh Posté le 08-12-2004 à 20:18:14
sorry j'avais pas vu que c'était du VBA Excel
je sais pas si c'est possible...
Marsh Posté le 08-12-2004 à 20:31:55
Quant aux objets OLE , l'appel fonctionne uniquement pour ceux concus dans une feuille Excel et non dans un Userform ...
Marsh Posté le 08-12-2004 à 20:43:12
essaye ca
For i = 0 To UserForm1.Controls.Count - 1
If Left(UserForm1.Controls.Item(i).Name, 5) = "Label" Then
UserForm1.Controls.Item(i).Caption = cells(i,1)
End If
Next i
Marsh Posté le 08-12-2004 à 20:56:20
Bonsoir,
Mais c'est bien sûr...
Je me retire sur la pointe des pieds.
Merci Gargamail, effectivement j'avais bien monté mon truc sur
Feuille...
A+
Marsh Posté le 08-12-2004 à 21:02:19
Super ! Merci pour cette solution que je vais vite tester.
Le truc c'est que mes labels sont dans un MultiPage et que seuls les labels présents sur la première page m'intéresse.
Je ne sais pas si ta solution ne va pas scanner tous les labels du Userform... enfin je vais l'adapter en conséquence.
L'idée n'est pas mauvaise en tout cas !!!
A+
Marsh Posté le 08-12-2004 à 21:21:20
Bon, j'ai pas testé ta soluce mais sur un autre forum on m'a dit d'essayer ça :
For ligne = 1 To 50
Me.Controls("label" & Ligne).caption = cells(ligne, 1)
Next Ligne
J'ai fais le test et ça roule : c'est exactement ce que je voulais (après l'avoir adapté).
Merci encore pour vos réponses !
A+
Marsh Posté le 08-12-2004 à 18:01:29
Bonjour,
Je dispose de plusieurs Userforms dont l'un d'eux possède une liste et de nombreux labels. Supposons que
quand je sélectionne un objet de ma liste, cela affiche le détail de celui-ci dans les différents labels.
Maintenant supposons que mes labels se nomment "label1" , "label2" , ... ; le "label1" devant afficher la
cellule "cells(1,1)" , tout comme le "label2" devant afficher la cellule "cells(2,1)" , ...
Ainsi, mon code ressemble à : (ce n'est qu'un exemple)
label1.caption = cells(1, 1)
label2.caption = cells(2, 1)
label3.caption = cells(3, 1) [le .caption étant facultatif]
...
label50.caption = cells(50, 1)
Jusqu'ici rien de compliqué...
Voilà, ma question est très simple : est-il possible de coder cette action en utilisant une boucle ?
Quelque chose qui ressemblerait à :
For ligne = 1 To 50
label(ligne).caption = cells(ligne, 1)
Next Ligne
Je sais que cette syntaxe ne fonctionne pas mais je voudrais simplement savoir si un code y ressemblant est
possible ou si je dois taper les 50 lignes de code de mes 50 labels ???
J'ai essayé des syntaxes du style : "label & ligne" mais ça ne fonctionne pas non plus...
J'attends vos réponses avec impatience.
Merci d'avance.
Message édité par zbod le 08-12-2004 à 21:22:03