IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Changer la couleur du texte dans des labels sous condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Changer la couleur du texte dans des labels sous condition
    Bonjour,
    J'ai 297 labels dans une userform numérotés dans l'ordre de 1 à 297. J'aimerais que la couleur du texte à l'intérieur de chacune d'elle devienne rouge si la cellule contient le texte RP.
    J'ai essayé avec la fonction LEN mais je patauge.
    Quelqu'un peut-il m'aiguiller svp?
    Merci par avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Points : 262
    Points
    262
    Par défaut
    Essaies ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, labelX.Caption, "RP") > 0 Then labelX.ForeColor = RGB(255, 0, 0)
    La fonction Instr() renvoi la position de la chaine de caractère recherchée, donc si elle renvoi 0, la chaine n'est pas contenue.


    Pour plus d'informations sur les chaines de caractères tu peux aller voir ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1
    Msgbox "Quelle est la différence entre un corbeau ?", vbQuestion
    goto 1

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut oui mais ...
    Bonjour Alpha et merci.
    Je vais me pencher sur cette fonction mais d'aprés ce que je comprend, il faut que j'inclue un If par label, ce qui risque de faire un code assez lourd. Car losque j'insère ce code dans une fonction, si je laisse "LabelX, j'obtiens une erreur de type "Variable non définie".
    J'aimerais que la fonction balaye tous les Label et que lorsque l'un d'eux contient le texte recheché, il le passe en rouge.
    Je pense qu'il y aurait bien un truc que je n'ai pas pas caption...pardon, capté
    Merci de t'être penché sur ma question et bonne continuation

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Points : 262
    Points
    262
    Par défaut
    Voila le code complet à placer dans ton userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Option Explicit
     
    Private Sub userform_initialize()
        Call TestLBL
    End Sub
     
     
    Private Sub TestLBL()
     
        Dim Ctrl As Object
        For Each Ctrl In Me.Controls 'Boucle sur tout les contrôles de l'userform
            If TypeOf Ctrl Is MSForms.Label Then 'Si le control est un label
                If InStr(1, Ctrl.Caption, "PR") > 0 Then 'Si le text de ce label contient "PR" aors
                    Ctrl.ForeColor = RGB(255, 0, 0)  'On colorie le texte du label en rouge
                Else 'sinon
                    Ctrl.ForeColor = vbBlack ' on colorie le texte du label en noir
                End If
            End If
        Next Ctrl
    End Sub
    Si tu veux appliquer le code si l'on clique sur un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Bouton1_Click()
        Call TestLBL
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1
    Msgbox "Quelle est la différence entre un corbeau ?", vbQuestion
    goto 1

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Revoilà l'emm... de service
    Merci Alpha, avec tes explications je comprend le code.
    Néanmoins, ce n'est pas la première fois que cela m'arrive, j'ai déjà un "Private Sub UserForm_Initialize()". Alors, comme j'ai compris qu'on ne pouvait pas en intégrer deux, j'essai de l'intégrer dans celui que j'ai déjà mais ça ne fait rien. Voici ce que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub UserForm_Initialize()
    Dim Nb As Byte, i As Byte
    Dim Sem As Integer
    Dim DteDeb As Date
    Dim Tb
     
    With Worksheets("Feuil1")
        DteDeb = .Range("A11")
        Nb = Val(.Range("B2"))
        If Nb > 1 Then
            Tb = .Range("E2").Resize(Nb, 1).Value
     
            Sem = DateDiff("ww", DteDeb, Date, vbMonday)
            Organise Tb, Sem
            For i = 1 To Nb
                Me.Controls("Label" & 9 * i - 7).Caption = Tb(i, 1)
            Next i
        Else
            Me.Label1.Caption = .Range("E2")
        End If
    End With
    End Sub
    Si j'integre
    aprés END WITH aucun label ne s'écrit en rouge pas plus que su je le met en début de Sub.
    Aurais-tu une idée stp?

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Points : 262
    Points
    262
    Par défaut
    Je ne suis pas certain d'avoir totalement saisie ta demande.

    Mais je crois que cela devrait te mettre sur la bonne voix

    Partons du principe que tu as 10 labels sur ton userform.
    Chacun d'eux va prendre la valeur d'une des cellules "Feuil1" contenue entre la ligne 2 et 11 (plage "A2:A11"). Et si la valeur de la cellule de droite (plage "B2:B11") est "RP" alors le label se colore en rouge.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub userform_initialize()
     
        Dim Ws As Worksheet
        Set Ws = ThisWorkbook.Worksheets("Feuil1")
        Dim i As Long
     
        With Ws
            For i = 2 To 11
                Controls("Label" & i).Caption = .Cells(i, 1)
                If .Cells(i, 2) = "RP" Then ' ou If InStr(1, .cells(i,2), "PR") > 0 Then si PR est contenu dans une chaine
                    Controls("Label" & i).ForeColor = RGB(255, 0, 0)
                End If
            Next i
        End With
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1
    Msgbox "Quelle est la différence entre un corbeau ?", vbQuestion
    goto 1

  7. #7
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2021
    Messages : 7
    Points : 13
    Points
    13
    Par défaut interrogation personnelle
    Bonjour & Bravo,

    la formule testée fonctionne parfaitement, mais je cherche personnellement à l'appliquer à un seul label en particulier

    La raison est que ce label est utilisé comme zone de Message dans un userform, et, en fonction du résultat en retour d'une saisie je souhaite que les couleurs s'inversent pour alerter l'utilisateur d'une saisie à compléter. voire même en prenant le fond d'origine et couleur noire sil n'y a pas d'erreur et fond Blanc ecriture rouge si la saisie est incorrecte ?

    J'espère être clair, entous cas , merci de votre attention

    Et je trouve pas. ?

  8. #8
    Membre expérimenté
    Inscrit en
    Décembre 2002
    Messages
    836
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 836
    Points : 1 320
    Points
    1 320
    Par défaut
    Bonjour, comme tu utilises un userform, je suppose que tu utilises un textbox pour la saisie. Tu peux donc vérifier la validité de la valeur entrée à la sortie du textbox, tu peux donc utiliser l'évènement _Exit.
    Voici donc un petit exemple pour te donner une idée et une piste de travail. Imaginons que tu veux une valeur numérique dans ton textbox, on vérifie et si ce n'est pas le cas on change les couleurs du label.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Not IsNumeric(TextBox1.Value) Then
            Label1.BackColor = vbWhite
            Label1.ForeColor = vbRed
            Cancel = True
        Else
            Label1.BackColor = vbWhite
            Label1.ForeColor = vbBlack
        End If
    End Sub

  9. #9
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2021
    Messages : 7
    Points : 13
    Points
    13
    Par défaut MERCI MERCI
    Citation Envoyé par Franc Voir le message
    Bonjour, comme tu utilises un userform, je suppose que tu utilises un textbox pour la saisie. Tu peux donc vérifier la validité de la valeur entrée à la sortie du textbox, tu peux donc utiliser l'évènement _Exit.
    Voici donc un petit exemple pour te donner une idée et une piste de travail. Imaginons que tu veux une valeur numérique dans ton textbox, on vérifie et si ce n'est pas le cas on change les couleurs du label.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Not IsNumeric(TextBox1.Value) Then
            Label1.BackColor = vbWhite
            Label1.ForeColor = vbRed
            Cancel = True
        Else
            Label1.BackColor = vbWhite
            Label1.ForeColor = vbBlack
        End If
    End Sub

    Merci de cette réponse rapide et bien adaptée. Dans les faits j'utilise une évènement after valid, mais je suppose que cela reviens au même. je constate qu'il me manque cruellement des connaissances de langage, mais cela viendra, eten attendant heureusement que les développeurs chevronnés sont là pour diffuser leurs précieux conseils.

    Je file à mon cours de guitare et te tiendrais au courant de mon résultat.
    Bonne journée

    Jean Jacques

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Changer la couleur du texte dans un chat entre client et serveur
    Par chafer dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/02/2015, 08h51
  2. Couleur de texte dans un label
    Par frederic.touyeras dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 30/06/2011, 21h02
  3. changer la couleur du text dans les labels de mon hta
    Par patricktoulon dans le forum VBScript
    Réponses: 4
    Dernier message: 29/03/2011, 19h57
  4. changer la couleur du texte dans ma balise
    Par cdevl dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 20/08/2008, 17h37
  5. Changer la couleur du texte dans un Jbutton
    Par jojo57 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/12/2006, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo