[VBA Excel] Remplir 50 labels en une seule commande ? [résolu]

Remplir 50 labels en une seule commande ? [résolu] [VBA Excel] - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 08-12-2004 à 18:01:29   

Reply

Marsh Posté le 08-12-2004 à 18:39:50    

pq t'as pas fais un groupe de label ? avec ca ta boucle était ok.

Reply

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.

Reply

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

Reply

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+

Reply

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

Reply

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 !

Reply

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 !

Reply

Marsh Posté le 08-12-2004 à 20:18:14    

sorry j'avais pas vu que c'était du VBA Excel  :sweat:  
 
je sais pas si c'est possible...


Message édité par push le 08-12-2004 à 20:19:13
Reply

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

Reply

Marsh Posté le 08-12-2004 à 20:31:55   

Reply

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

Reply

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+


Message édité par galopin01 le 08-12-2004 à 21:02:59
Reply

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+

Reply

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+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed