Mettre Label en couleur

Bonjour le forum,

En cours de construction d'un petit fichier pour mon travail, je me permet de venir vers vous pour de l'aide, car ce que je voudrais faire dépasse mes compétences, et malgrés mes recherches je n'y arrive pas. Je joint un fichier simplifié comme exemple.

Résumé de ce que j'aimerai :

Sur l'UF Effarouche :

il y une image ou se trouve dessus 10 Label.

Chaque Label contient une référence de repère.

j'aimerai à l'aide des données (ou autres, tableau à créer peu être) à partir de la ligne 15 de la feuille (Base jour") mettre en couleur ces 10 Label (Label par Label) par rapport à la colonne G (Nbr espèce), Colonne S (Localisation) et en feuille ("Liste BD") Colonne AA les références couleur pour les Label.

J'ai mis les références couleur en feuille ("Liste BD") ne sachant pas ou les mettre exactement, donc il est possible de changer de place.

J'espère que mes explications sont assez claire, pas facile d'expliquer. N'hesitez pas à demander des détails si necessaire.

Par avance , merci à vous

Cordialement

39pompaerov0.xlsm (223.06 Ko)

bonjour,

Voici une fonction qui retourne la couleur en fonction du Nbre.

Pour la localisation et l'affectation à un label particulier, je ne vois rien qui précise l'influence de ces données...

Function COLORLABEL&(i%)
Dim N&
Select Case i
Case Is > 50: N = 8384
Case Is > 40: N = 8447
Case Is > 35: N = 16639
Case Is > 30: N = 24831
Case Is > 25: N = 33023
Case Is > 20: N = 41215
Case Is > 15: N = 49407
Case Is > 10: N = 57599
Case Is > 5: N = 65535
Case Is > 0: N = 13431551
End Select
COLORLABEL = N
End Function

[Nota] Il va falloir que tu te mettes rapidement à optimiser ton code parce que 1000 lignes c'est déjà pas mal : VBA va pas tarder à couiner...

A+

Bonjour galopin01

Merci d'avoir pris mon post en considération, c'est sympa.

Pour franc, tu me parle un technique pour mon niveau d'amateur .

Si je comprend ton code, il faut que dans les Label il y ai un chiffre , pour activer la couleur, non ?

Si c'est oui, pour moi il n'y aura aucune info dans les Label.

J'imagine :

  • Chaque Label sera vide et transparent
  • Dans les données à partir de la ligne 15 (pour la journée) on fais référence à la localisation et le nombre d'espèce correspondent à localisation pour mettre en couleur les Label.

Exemple pour la Localisation GD80B7.4.A (si il a dans les données à partir de la ligne 15) :

Nb Espèce 4 I Loc GD80B7.4.A

Nb Espèce 1 I Loc GD80A6.2.B

Nb Espèce 6 I Loc GD80B7.4.A

Nb Espèce 2 I Loc GD80B6.2.A

Nb Espèce 8 I Loc GD80B7.4.A

Loc GD80B7.A = 18 Espèce alors Label x (correspondent au lieu du GD80B7.4.A) se met à la couleur (orange clair par ex) prédéfini du tableau réf couleur.

On ajoute

Nb Espèce 1 I Loc GD80A6.2.B

Nb Espèce 9 I Loc GD80B7.4.A

ce qui amène pour GD80B7.4.A le nb espèce à 27 donc Label x passe en marron (par ex).

Est il possible de faire ça ?

directement avec la feuille ("Base jour") ou bien créer un petit tableau sur une feuille qui résume tout cela. J'avoue que je me lance dans des choses hyper compliqué pour moi .

Tu dis :

[Nota] Il va falloir que tu te mettes rapidement à optimiser ton code parce que 1000 lignes c'est déjà pas mal : VBA va pas tarder à couiner...

Tu commences à me faire peur

Donc ça va pas tarder à bloquer, si je comprends !! C'est vrai que j'ai pris exemple sur divers modèle à droite et à gauche. Comme tu as plus le voir je ne suis qu'un amateur, je pensai avoir fais du mieux possible pour évider cela justement, mais non grrrr.

Si tu le souhaites je suis preneur d'aide pour améliorer tout ça.

Bon, j'arrête mon blabla pour le moment

Cordialement

Non pas besoin de texte dans les label...

Moi je ne peux pas deviner à quel label correspond Loc GD80B7.A

Si toi tu sais alors tu écris

Labelx.BackColor =COLORLABEL(18)

Pourquoi Labelx et pas Labely ?

Donc ça va pas tarder à bloquer... OUPA ! ça dépend surement de la quantité de RAM de ta bécane et d'autres paramètres que je ne maîtrise pas mébon...

De mon temps on apprenait qu'une bonne macro devait tenir dans un écran (sans scroller... !) Là tu fais un peu fort !

J'ai pas trop épluché... Je vais voir si je peux te donner des pistes ça ne sera jamais que des pistes parce que quand même on est un peu NO_LIMIT là !

A+

Mais !! c'est que tu m'inquiètes vraiment sur mes macros

Le (18) correspond à quoi stp ?

encore merci pour ton aide.

Je sais pas j'ai pas vérifié, c'est toi qui l'a écrit !

Nb Espèce 6 I Loc GD80B7.4.A

Nb Espèce 2 I Loc GD80B6.2.A

Nb Espèce 8 I Loc GD80B7.4.A

Loc GD80B7.A = 18 Espèce alors Label x ...

A+

Bon, je rame un peu la !!!!

Voila se que j'ai fais, mais !!!! marche pas.

Plage [Col_Nbre] correspond à la feuille ("Base jour") Colonne G (G15;;;NBVAL(G:G)

Plage [Col_Localisation] correspond à la feuille ("Base jour") Colonne S (S15;;;NBVAL(S:S)

Plage [List_Localisation] correspond à la feuille ("Liste BD") Colonne Q (Q2;;;NBVAL(Q:Q)

Dans la feuille ("Liste BD") en colonne R j'ai mis cette formule

=SOMME.SI.ENS(Col_Nbre;Col_Localisation;List_Localisation)

, qui permet de comptabiliser le nombre d'espèces par localisation (ça a l'aire d'être bon)

Ta macro Function COLORLABEL est dans un module.

puis dans Initialize (pour le moment faire essai) j'ai fais

Me.Label98.BackColor = COLORLABEL(Sheets("Liste BD").Range("R2").Value)
Me.Label99.BackColor = COLORLABEL(Sheets("Liste BD").Range("R3").Value)
Me.Label100.BackColor = COLORLABEL(Sheets("Liste BD").Range("R4").Value)
ect...

Il y a que 10 Label.

Mais marche pas, je ne suis vraiment pas doué.

Dans le Initialize mettre au début :

Private Sub UserForm_Initialize()
Dim i%, K&, Y As Boolean 'la suite sans changement
'##Initialisation correspondant au haut de la feuille

puis au milieu... Après Label70 et avant les Combos remplacer par :

                        Me.Label70.Caption = Range("U2")
'*******************************************************
   For i = 2 To 11
      Y = IIf(Sheets("Liste BD").Cells(i, 18).Value > 0, True, False)
      Me.Controls("Label" & i + 96).BackStyle = IIf(Y, 1, 0)
   If Y Then
      K = COLORLABEL(Sheets("Liste BD").Cells(i, 18).Value)
      Me.Controls("Label" & i + 96).BackColor = K
   End If
   Next i
'*******************************************************
  Me.ComboBox21.Value = Range("D3")

... Mais j'ai dans l'idée que ça va pas te plaire : Les Labels ne peuvent pas être colorés ET transparents !

A+

Et bien figure toi, que ça a l'aire d'être se que j'attendais que cela face

Après avoir exécuté tes conseils les Labels prennent bien les couleurs

Petites questions pour savoir de quoi je parle par la suite ?

  • A quoi correspond le + 96 ?
  • Est il possible de créer un
Sub yyyy ()

ton code

End sub

et mettre le nom de la Sub dans Initialize à la place du code actuel ou la ou j'en ai besoin ?

-Au lieu de BackColor mettre BorderColor ?

c'est juste pour faire des essais de présentation de manière à que ça soit plaisant au visuel.

-Puis j'en déduis qu'il faut évider d'ajouter d'autres Label maintenant ?

Je vais tenter de tester mes question tout de même.

Merci

A+


Sachant qu'il s'agit d'un fichier modèle donc il me l'adapter sur fichier original.

Oui c'est possible.

J'ai testé avec :

Private Sub SpecShow()
Dim i%, K&, Y As Boolean
   For i = 2 To 11
      Y = IIf(Sheets("Liste BD").Cells(i, 18).Value > 0, True, False)
      Me.Controls("Label" & i + 96).BorderStyle = IIf(Y, 1, 0)
   If Y Then
      K = COLORLABEL(Sheets("Liste BD").Cells(i, 18).Value)
      Me.Controls("Label" & i + 96).Font.Name = "Webdings"
      Me.Controls("Label" & i + 96).Font.Size = 36
      Me.Controls("Label" & i + 96).TextAlign = 2
      Me.Controls("Label" & i + 96).BorderColor = K
      Me.Controls("Label" & i + 96).Caption = "n"
      Me.Controls("Label" & i + 96).ForeColor = K
   End If
   Next i
End Sub

Je trouve que le BorderColor et BorderStyle ne sont pas convaincant on peut les supprimer...

En revanche tu me diras ce que tu penses du reste...

i : c'est le N° de ligne de Cells

Le N° des Label est différent : +96 c'est la différence entre i et ce N° de Label.

Cela suppose que les N° de Labels se suivent...

A+

Bonjour Galopin01

Le réveil est agréable se matin

Extraordinaire !! Je ne pensais pas pouvoir arriver à se résultat, c'est génial. grâce à toi bien sur. C'est la que l'on voit les personnes qui maitrise, LES PRO pour être simple.

Sinon j'avais testé mes questions, en effet ça marche, faut juste maitriser un peu.

Je suis arrivé à adapter cela sur mon fichier original.

C'est vrai que je rejoins tes propos du début, en disant qu'il faudrait optimiser mes code, Perso, je pensais les avoir optimisé mais ça a pas l'aire.

A priori j'aurai un soucis de croisement de formule (je suppose) car quand je clôture la journée finale, il y a ma feuille ("Base jour") qui est comme protégé.

Maintenant que le fichier est bien avancé, voudrais tu m'aider à optimiser mes codes afin de gagner en rapidité d'exécution et en place coté macros ? Si oui, je te fais parvenir le fichier original et me permettrai de voir des vrais codes.

Merci

Cordialement

bonjour,

Tu peux, mais je ne promet rien... Et il faudra sans doute être patient : En ce moment j'ai déjà un truc un peu comme ça : ça fait déjà 2 jours que je suis dessus et je fais sans doute y passer le WE...

C'est toujours bien trop long au gré des utilisateurs qui n'imaginent pas l'investissement que ça représente...

Je te met mon mail en MP.

A+

Merci

Confirme, si tu as bien reçu le MP avec la PJ, stp. Car je n'ai jamais travailler avec la MP. merci

Ok c'est bon.

A+

Rechercher des sujets similaires à "mettre label couleur"