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 d'une cellule selon sa valeur (en vba)


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut changer la couleur du texte d'une cellule selon sa valeur (en vba)
    Bonjour,

    Mon classeur excel peut s'ouvrir sous deux profils d'utilisateurs qui ne voient pas les même feuilles.

    De plus sur certaines de ces feuilles je souhaite changer la couleur du texte afin que celui-ci soit en quelque-sorte "masqué" (même couleur que le fond).

    En gros dans la colonne (n:n) si une cellule contient "facturation", le texte de cette cellule devra être blanc et celui situé en offset(0,2) aussi. je souhaite fair cela pour toutes les pages de la fin du classeur.

    Auriez-vous une idée ? merci d'avance

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2012
    Messages : 84
    Points : 42
    Points
    42
    Par défaut
    Bonjour une mise en forme conditionnelle fera l'affaire !
    selectionne ta cellule ensuite Format mise en forme conditionnelle le valeure de la cellule == égale à === "machin" ==== Format == Police == Blanc

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    merci! j'y avais pensé! mais si lorsque j'ouvre le profil 1 je souhaite que ce soit en blanc et lorsque j'ouvre le profil 2 je souhaite que ce soit en rouge, je suis pas sur que une MFC fonctionne.. c'est pourquoi j'avais pensé à du vba!

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2012
    Messages : 84
    Points : 42
    Points
    42
    Par défaut
    t'as essayé ??!!
    sinon pour le code VBA voilà une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
            Formula1:="0"
        Selection.FormatConditions(1).Font.ColorIndex = 2

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    Bonjour,

    j'ai testé le bout de code en ayant rajouté avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Fiche").Range("Facturation").Select
    et il me dit pour cette même ligne : "la méthode select de la classe Range a échoué".

    ma plage "Facturation comprend toutes les cellules dont je souhaite changer le fond.. auriez-vous une idée de l'erreur ?

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    Bonjour à tous,

    A essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Goto Reference:="Facturation"
    Cordialement.

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    merci! je dois le placer à la place de mon .select ?

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    Oui,

    Cette instruction remplace le Sheets'("Feuil1").Range("A1").Select
    ensuite, mettre l'instruction "Selection. etc.

  9. #9
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    Merci pour ton aide, je l'ai inséré à mon code mais il ne se passe rien du tout..

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    Etrange, car avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Application.Goto Reference:="Facturation"
        Selection.Font.ColorIndex = 2
    S'il y a du texte dans cette plage nommée, il devient invisible (blanc sur blanc)

    Est-ce bien une plage nommée ? Par Insertion ... Nom ... Définir

    Chez moi, cela fonctionne sous Excel 2000.

  11. #11
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonjour à tous,

    "Facturation" ne désigne ni une plage/range, ni même une variable... C'est juste le contenu à comparer (voir post 1).

    Il faut parcourir ta colonne grace à une boucle et faire la comparaison au passage.

    Bertrand

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    Alors, j'ai testé les deux lignes de code et cela fonctionne si je l'effectue sur une feuille! merci

    en revanche si je l'insère à une boucle for pour le faire sur toutes les feuilles cela ne fonctionne pas.. il me surligne la seconde ligne "propriété ou méthode non gérée par cet objet.. une idée ? voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        For i = 21 To Worksheets.Count
                With Worksheets(i)
                .Visible = True
                .CommandButtonValidation.Visible = False
                .CommandButtonSave2.Visible = False
                .CommandButtonSave.Visible = True
                .Application.Goto Reference:="Facturation"
                Selection.Font.ColorIndex = 2
                End With
                Next i
    Ps : Bonjour Bertrand, je viens de voir ton post! c'est vrai qu'au départ ce n'était pas une plage nommée mais j'en ai créé une car je n'y parvenais pas avec une boucle qui regardait la valeur de la cellule..

  13. #13
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonjour,

    ça me parait pourtant pas trop complexe mais j'ai peut-être mal saisi

    Essaies ce code (pour tous les onglets du classeur - à voir pour faire à partir du onglet n° x) :

    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
    23
    24
    Sub changement_de_format_sur_une_colonne()
     
    Dim FL1 As Worksheet, NoCol As Integer
    Dim NoLig As Long
     
    NoCol = 14 'lecture de la colonne n:n
     
    'parcours tous les onglets du classeur
    For Each FL1 In Worksheets
     
        'parcours toutes les cellules de la colonne
        For NoLig = 1 To Columns(NoCol).Cells.Count
     
            'déclenche le changement si la condition est remplie
            If FL1.Cells(NoLig, NoCol).Value = "facturation" Then
     
                FL1.Cells(NoLig, NoCol).Font.ColorIndex = 2
                FL1.Cells(NoLig, NoCol).Offset(0, 2).Font.ColorIndex = 2
     
            End If
        Next
    Next
     
    End Sub
    Bertrand

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    Bonjour Bertrand,

    Oups, désolé.
    C'est bien ce que je croyais avoir compris dès le 1er post (mot "Facturation" dans des ranges) ; mais par la suite, je pensais qu'il avait nommé une plage "Facturation", pour les grouper.


    Bonjour blackstrange,

    On ne peut pas nommer, a priori, des plages successives sur plusieurs feuilles avec le même nom. Ce sera la dernière plage définie qui sera validée.

    Il faut se reporter au post de Bertrand.

  15. #15
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    Merci à tous les deux! je comprends mieux désormais pourquoi ne fonctionne pas.. je vais donc tester le code de bertrand et l'adapter et je vous dis si je rencontre des difficultés!

    merci!

    Re! j'ai essayé le code, alors si je l'applique pour toutes les feuilles de mon classeur pour l'ensemble de la colonne (qui est i et non plus n), cela met beaucoup de temps mais fonctionne.
    j'ai essayé de l'adapter pour les 150 premières lignes et pour les feuilles de 21 à la fin (nombre pas connu) :
    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
    23
    24
    Sub CouleurTexte()
     
    Dim i As Integer
    Dim NoCol As Integer
    Dim NoLig As Long
     
    NoCol = 9 'lecture de la colonne i:i
     
    'parcours tous les onglets du classeur
    For i = 21 To Sheets.Count
        'parcours toutes les cellules de la colonne
        For NoLig = 1 To 150
     
            'déclenche le changement si la condition est remplie
            If Sheets(i).Cells(NoLig, NoCol).Value = "Facturation" Then
     
                Sheets(i).Cells(NoLig, NoCol).Font.ColorIndex = 2
                Sheets(i).Cells(NoLig, NoCol).Offset(0, 1).Font.ColorIndex = 2
     
            End If
        Next
    Next i
     
    End Sub
    mais là j'ai une erreur à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(i).Cells(NoLig, NoCol).Font.ColorIndex =2
    erreur définit par l'application ou par l'objet.. auriez-vous une piste ?

  16. #16
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Regardes la valeur de i au moment de l'erreur et vérifie si cet index de feuille existe

  17. #17
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    i = 21 qui existe bien : première feuille à modifier.. :/

    Ps : si j'execute la macro seule elle fonctionne, si je l'appelle dans le reste de mon code cela ne fonctionne pas..

  18. #18
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    au cas ou tu navigues dans plusieurs classeur, ajoute le classeur devant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thisworkbook.Sheets(i).Cells(NoLig, NoCol).Font.ColorIndex = 2

  19. #19
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    je ne travaille que dans un seul classeur..

    --> je l'ai indiqué mais cela ne fonctionne toujours pas..

  20. #20
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    est elle appelée par une fonction?

Discussions similaires

  1. [XL-2003] Changer la couleur de fond d'une cellule selon condition
    Par iIncoming dans le forum Excel
    Réponses: 6
    Dernier message: 03/03/2013, 09h33
  2. Modifier la couleur du texte d'une cellule d'un tableviewer.
    Par tatemilio2 dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 27/06/2008, 08h28
  3. [DisplayTag] Comment changer la couleur du texte d'une colonne
    Par azur_34 dans le forum Taglibs
    Réponses: 8
    Dernier message: 06/08/2007, 17h39
  4. Changer la couleur du texte d'une Checkbox
    Par Masmeta dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/12/2006, 08h56
  5. Réponses: 2
    Dernier message: 03/02/2005, 23h42

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