"Vider" des labels

  • Initiateur de la discussion Hervé
  • Date de début
H

Hervé

Guest
Bonjour tout le monde.

Bon. dans un UF j'ai 46 labels (j'aime la démesure!!!!). je souhaiterai les vider tous un une seule opération en évitant 46 fois : UF.LABEL46.caption ="".

D'avance merci pour vos réponses.

bye bye

hervé
 
@

@+Thierry

Guest
Salut Hervé, Arnaud, le Forum

C'est tout à fait çà, Arnaud, j'utilise toujours "ce truc dans ce style", mais il fonctionne encore mieux si on déclare CTLR !

Sub TheCommand_Click ()
Dim CTRL As Control

...

Bonne Soirée
@+Thierry
 
H

Hervé

Guest
bonjour tlm,

Merci arnaud pour l'exemple et thierry pour le complement.

Question subsidiaire : Si je voulais vider que certains labels par exemple du label 1au label 30. dois-je passer par une boucle.

merci de vos réponses.

bye bye
Hervé
 
@

@+Thierry

Guest
Bonjour Hervé, Arnaud, Le Forum

Oui tu peux bien sûr, mais en fait il te faut ruser un peu....

Soit tu as nommé tes Labels d'une manière conventionnelle exemple :

Lbl001, Lbl002, Lbl003, Lbl004,.......... Lbl046,... Lbl101,....Lbl999, ... (lol),

Et tu fais une boucle comme ceci :

Private Sub CommandButton1_Click()
Dim CTRL As Control
Dim TheNum As Integer '(Byte suffit si 46 Labels)

For Each CTRL In Me.Controls
If TypeOf CTRL Is MSForms.Label Then
TheNum = Val(Right(CTRL.Name, 3))
Select Case TheNum
Case 1 To 30
CTRL = ""
Case 31 To 46
CTRL.ForeColor = &HFF0000
Case Else
CTRL.Font.Italic = True
End Select
End If
Next
End Sub

On peut aussi procéder complétement différemment grace à une Excellente astuce de Ti qui me l'a fait découvrir il y a un bail, et qui me sert quasiment dans tous mes UserForms, c'est la Proriété Tag (En Mode Design du VBE, Fenêtre Propriété du Label => Propriété : "TAG" ... Indiquer par Exemple "LblZoneA" pour tous les Labels qui doivent avoir une Action Commune et "LblZoneB" pour une autre Série de Labels qui ont une autre Action, puis rien pour les autres Labels ...

On peut alors faire ceci

Private Sub CommandButton2_Click()
Dim CTRL As Control

For Each CTRL In Me.Controls
If CTRL.Tag = "LblZoneA" Then
CTRL = ""
ElseIf CTRL.Tag = "LblZoneB" Then
CTRL.ForeColor = &HFF0000
End If
Next CTRL
End Sub

Ce qui est interressant avec cette méthode "Tag de Ti" c'est que l'on pourrait (sous réserve que les controls acceptent les méthodes) faire une seule boucle pour en même temps intervenir sur des Labels et des CheckBox (par exemple) si tous on été "Tagué" avec le même "Tag" ou une portion du Tag...

Exemple on a "Tagué" les Labels "LblZoneA" et d'autres "LBLZoneB" puis des CheckBoxs "CbxZoneA" et d'autres "CbxZoneB" ... ce genre de macro fera le reste :

Private Sub CommandButton2_Click()
Dim CTRL As Control

For Each CTRL In Me.Controls
If (Right(CTRL.Tag, 5) = "ZoneA" Then
CTRL = ""
ElseIf (Right(CTRL.Tag, 5) = "ZoneB" Then
CTRL.ForeColor = &HFF0000
End If
Next CTRL
End Sub

On notera que la Propriété "Caption" n'étant pas celle par défaut d'une CheckBox j'ai été obligé de l'indiquer....

Et bien entendu, avec ces moyens que je dévoile ici, on peut faire un "Mix" des deux méthodes, ce qui rend vraiment un UserForm interactif... pour s'en rendre compte il y a une démo assez impressionnante que j'avais faite :

=> Fichier Téléchargeable Ce lien n'existe plus

=> Fil de Discussion Lien supprimé

Il y a eu ensuite plusieurs version d'ailleurs de cette démo, que hélas, je ne suis jamais parvenu à faire correspondre aux besoins de l'intervenant car il m'a fait partir sur des mauvaises bases de développement, mais à titre de Démo il y a vraiment de quoi faire !!!

Voilà Herve, je pense que ta question subsidiare sera pleinement satisfaite !!

Bonne Appétit
@+Thierry
 
@

@+Thierry

Guest
ARf !!!

On notera que la Propriété "Caption" n'étant pas celle par défaut d'une CheckBox j'ai été obligé de l'indiquer....

Et........ Evidemment je ne l'indique pas dans le code que j'ai collé !!! Ah la la ces développeur toujours la tête dans les nuages !!!

Private Sub CommandButton2_Click()
Dim CTRL As Control

For Each CTRL In Me.Controls
If (Right(CTRL.Tag, 5) = "ZoneA" Then
CTRL.Caption = ""
ElseIf (Right(CTRL.Tag, 5) = "ZoneB" Then
CTRL.ForeColor = &HFF0000
End If
Next CTRL
End Sub

Sorry et bon app !!!
@+Thierry
 

Discussions similaires

Réponses
5
Affichages
522
Réponses
16
Affichages
509

Statistiques des forums

Discussions
312 215
Messages
2 086 325
Membres
103 179
dernier inscrit
BERSEB50