Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

macro pour MFC sur colonnes

EloRocq

XLDnaute Nouveau
Bonjour,
Désolée si le sujet a déjà été abordé mais je ne trouve pas de réponse exacte et adaptable à mon problème et suivant mon niveau de maitrise du language VBA (je ne m'en suis pas servie depuis longtemps...).

J'ai un fichier Excel (v.2013) imposé par mon groupe pour mon travail. Ce fichier était très lourd et très lent (il faisait buger Excel à chaque fois) à cause de multiples mises en forme conditionnelles. J'ai réussi à tout supprimer (ce qui l'a rendu plus rapide mais toujours aussi lourd <4Mo) mais j'aimerais remplacer ces dernières par une macro.
le code couleur est simple :
- valeurs comprises entre 1 et 2 : vert
- valeurs comprises entre 3 et 4 : jaune
- valeurs comprises entre 8 et 9 : orange
- valeurs comprises entre 12 et 16 : rouge
la MFC doit concerner les colonnes Risque ("R") soit à partir de la colonne J, M, P, ...jusqu'à la colonne HF. Puis la colonne HG pour le résultat.

Pouvez vous m'aider ? pour l'instant je ne sais pas travailler dessus et cela me bloque dans mes taches.
Je vous joint le document pour visualisation.
Merci beaucoup !
Eloïse
 

Pièces jointes

  • RA vierge5.xlsx
    3.6 MB · Affichages: 88

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Bienvenue sur XLD,

Peux-tu essayer avec :

VB:
Option Explicit

Sub Coloriage()
    Dim Cel As Range
    For Each Cel In Range("H7:HH600")
        If Cel = 1 Or Cel = 2 Then Cel.Interior.Color = 5296274
        If Cel = 3 Or Cel = 4 Then Cel.Interior.Color = 65535
        If Cel = 6 Or Cel = 8 Or Cel = 9 Then Cel.Interior.Color = 49407
        If Cel = 12 Or Cel = 16 Then Cel.Interior.Color = 192
        Next Cel
    End Sub

A+ à tous
 
Dernière édition:

EloRocq

XLDnaute Nouveau
Bonjour,
Merci beaucoup pour l'accueil et la réponse.

La macro fonctionne. En revanche elle colorie toutes les colonnes, or je voudrais que seules les colonnes Risques (résultat PxG) se colorent. Soit les colonnes J, M, P...jusque HF puis la colonne HG.
Donc la plage est la bonne mais en excluant les colonnes "P" et "G". Je ne sais pas si je suis claire, désolée si ce n'est pas le cas.

Merci,
Eloïse
 

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Essaye avec :
VB:
Option Explicit

Sub Coloriage()
    Dim Cel As Range
    For Each Cel In Range("H7:HH600")
        If Cel = 1 Or Cel = 2 Then Cel.Interior.Color = 5296274
        If Cel = 3 Or Cel = 4 Then Cel.Interior.Color = 65535
        If Cel = 6 Or Cel = 8 Or Cel = 9 Then Cel.Interior.Color = 49407
        If Cel = 12 Or Cel = 16 Then Cel.Interior.Color = 192
        Next Cel
        Range("P7:P600").Interior.Color = -4142
    End Sub

Efface les données et relance la macro pour effacer les couleurs...

A+ à tous
 

EloRocq

XLDnaute Nouveau
Ca ne fonctionne pas, la couleur reste meme après avoir effacé la cellule et relancé la macro.
De plus, comment puis-je faire pour que la coloration ne concerne qu'une colonne sur 3 (les colonnes risques dans lesquelles sont les formules) ?
 

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Peux-tu essayer :

VB:
Sub Coloriage()
    Dim Cel As Range
    For Each Cel In Range("H7:HH600")
        If Cel = "" Then Cel.Interior.Color = -4142
        If Cel = 1 Or Cel = 2 Then Cel.Interior.Color = 5296274
        If Cel = 3 Or Cel = 4 Then Cel.Interior.Color = 65535
        If Cel = 6 Or Cel = 8 Or Cel = 9 Then Cel.Interior.Color = 49407
        If Cel = 12 Or Cel = 16 Then Cel.Interior.Color = 192
        Next Cel
        Range("P7:P600").Interior.Color = -4142
    End Sub

A+ à tous
 

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Peux-tu essayer :

VB:
Option Explicit

Sub Coloriage()
    Dim Cel As Range
    For Each Cel In Range("H7:HH600").SpecialCells(xlCellTypeFormulas, 23)
        If Cel = "" Then Cel.Interior.Color = -4142
        If Cel = 1 Or Cel = 2 Then Cel.Interior.Color = 5296274
        If Cel = 3 Or Cel = 4 Then Cel.Interior.Color = 65535
        If Cel = 6 Or Cel = 8 Or Cel = 9 Then Cel.Interior.Color = 49407
        If Cel = 12 Or Cel = 16 Then Cel.Interior.Color = 192
    Next Cel
    Range("P7:P600").Interior.Color = -4142
End Sub

A+ à tous
 

EloRocq

XLDnaute Nouveau
Génial ca fonctionne !
En revanche ce n'est pas automatique, il faut relancer la macro à chaque fois, est-ce normal ? n'y a t-il pas un moyen qu'elle se lance automatiquement ? (désolée je suis novice dans tout ça)
 

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Ajoute une image ou une forme et affecte lui la macro Coloriage car je crains qu'une événementielle rende ton fichier très "énervant" (près de 90 000 cellules concernées)

A+ à tous
 

EloRocq

XLDnaute Nouveau
C'est fait... mais je viens de découvrir un nouveau soucis... (c'est la que je me dis que ce n'est vraiment pas mon métier) : lorsque j'enregistre mon fichier Excel, je le ferme, je le ralume... la macro a disparu ?! comment est-ce possible ?
 

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Essaye quand même en mettant ce bout de code dans le module de la feuille "Risk...)



VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Call Coloriage
End Sub

A+ à tous
 

Discussions similaires

Réponses
9
Affichages
372
Réponses
6
Affichages
246
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…