mise en forme conditionnelle

pierro77

XLDnaute Nouveau
Bonjour à tous,

Je bloque actuellement sur un problème de mise en forme conditionnelle. Je m'explique. Je voudrais développer une macro qui me permet de faire les choses suivantes :
J'ai dans ma colonne D des infos qui varient => FSR, CFM...
A chaque ligne je veux que :
Si on a "FSR" et si les valeurs dans la ligne sont >=4 alors il faut que ça soit coloré en vert
Si on a "CFM" et si les valeurs dans la ligne sont >=12 alors il faut que ça soit coloré en vert
Si on a "FSR" et si les valeurs dans la ligne sont <=4 alors il faut que ça soit coloré en rouge
Si on a "FSR" et si les valeurs dans la ligne sont <=12 alors il faut que ça soit coloré en rouge

J'ai commencé à écrire une macro je n'arrive pas à conclure :
Code:
Sub MFC()
Dim mycell As Range
Dim i As Integer
Application.ScreenUpdating = False
i = 1
    For Each mycell In Range("E2:AA" & Range("E65536").End(xlUp).Row)
        
        If mycell.Value >= 4 And Cells(i, 4) = "FSR" Then
        mycell.Interior.ColorIndex = 4
        
        If mycell.Value >= 12 And Cells(i, 4) = "CFM" Then
        mycell.Interior.ColorIndex = 4
        i = i + 1
        End If
    Next
Application.ScreenUpdating = True
End Sub
 

JCGL

XLDnaute Barbatruc
Re : mise en forme conditionnelle

Bonjour à tous,

Peux-tu essayer :

VB:
Option Explicit


Sub MFC()
    Dim Cel As Range
    Dim i As Integer
    Application.ScreenUpdating = False


    For Each Cel In Range("E2:AA" & Range("D65536").End(xlUp).Row)
        For i = 1 To Range("D65536").End(xlUp).Row
            If Cel.Value >= 4 And Cells(i, 4) = "FSR" Then Cel.Interior.ColorIndex = 4
            If Cel.Value >= 12 And Cells(i, 4) = "CFM" Then Cel.Interior.ColorIndex = 4
            If Cel.Value < 4 And Cells(i, 4) = "FSR" Then Cel.Interior.ColorIndex = 3
            If Cel.Value < 12 And Cells(i, 4) = "CFM" Then Cel.Interior.ColorIndex = 3
            If Cel = "" Then Cel.Interior.ColorIndex = xlNone
        Next i
    Next Cel
    Application.ScreenUpdating = True
End Sub

A + à tous
 

pierro77

XLDnaute Nouveau
Re : mise en forme conditionnelle

Bonjour,

Merci pour ta réponse rapide. Pour l'instant, j'ai l'impression que l'instruction ne fonctionne que sur CFM (qui se met bien en vert comme dans les instructions). Pour le reste, c'est en rouge. Par exemple les valeurs de FSR ne passent pas du tous en vert lorsque >4.
N'y aurait il pas un pb dans l'enchainement des if?

Merci de votre aide précieuse
 

pierro77

XLDnaute Nouveau
Re : mise en forme conditionnelle

Bonjour,

Je vous mets en pièce jointe le fichier excel qui me pose problème.
Les valeurs dans la colonne D sont variable => CFM, FSR, SS43, SS39... et jamais placée au même endroit.
Par exemple, je voudrais que lorsque dans une ligne, en D on a FSR, l'ensemble des cellules (dans la même ligne) qui sont supérieures ou égale à 4 soit colorisé en vert.
Pour l'instant, quelque soit la case dans le tableau où on a un résultat supérieur à 4, le résultat est colorisé en vert. La condition FSR n'a pas l'air de rentrer en ligne de compte.

Merci pour votre aide
 

Pièces jointes

  • synthèse fitting.xls
    51.5 KB · Affichages: 39
  • synthèse fitting.xls
    51.5 KB · Affichages: 38
  • synthèse fitting.xls
    51.5 KB · Affichages: 39

CISCO

XLDnaute Barbatruc
Re : mise en forme conditionnelle

Bonjour

N'ayant pas ton fichier réel sous les yeux, je ne sais si cela sera applicable. Regardes toujours le fichier en pièce jointe. Cela te donnera peut être des idées.

@ plus
 

Pièces jointes

  • synthèse fitting.xls
    67.5 KB · Affichages: 40
  • synthèse fitting.xls
    67.5 KB · Affichages: 42
  • synthèse fitting.xls
    67.5 KB · Affichages: 41

JCGL

XLDnaute Barbatruc
Re : mise en forme conditionnelle

Bonjour à tous,

Peux-tu essayer ceci :

VB:
Option Explicit


Sub MFC()
    Dim Cel As Range
    Dim i As Integer
    Application.ScreenUpdating = False




    For Each Cel In Range("E2:AA" & Range("D65536").End(xlUp).Row)
        For i = 1 To Range("D65536").End(xlUp).Row
            If Cel.Value >= 4 And Cells(i, 4) = "FSR" Then Cel.Interior.ColorIndex = 4
            If Cel.Value < 4 And Cells(i, 4) = "FSR" Then Cel.Interior.ColorIndex = 3
            If Cel.Value >= 12 And Cells(i, 4) = "CFM" Then Cel.Interior.ColorIndex = 4
            If Cel.Value < 12 And Cells(i, 4) = "CFM" Then Cel.Interior.ColorIndex = 3
            If Cel = "" Or Cel = 0 Then Cel.Interior.ColorIndex = xlNone
        Next i
    Next Cel
    Application.ScreenUpdating = True
End Sub

A+ à tous
 

pierro77

XLDnaute Nouveau
Re : mise en forme conditionnelle

Re Bonjour,

Ca marche très bien. Il faudrait que je puisse maintenant intégrer cette mise en forme conditionnelle à ma macro précédente pour ne pas perdre à chaque fois que je fais des mise à jour, cette mise en forme conditionnelle.

Merci en tout cas :D
 

pierro77

XLDnaute Nouveau
Re : mise en forme conditionnelle

Re bonjour JCGL,

Je m'adressais dans mon post précédent à CISCO.
La première macro s'appelle "consolide" et me permet d'importer des données de plusieurs fichier d'un répertoire dans mon fichier de synthese.
En fait, je voudrais que la mise en forme conditionnelle (avec les conditions énoncées précédemment) se fasse automatiquement pour toutes lignes de mon tableau lorsque j'importe ces données, sachant que le nombre de ligne de donnée varie suivant le nombre de fichier que j'ai dans mon répertoire.
C'est un peu compliqué mais j'essaye d'être le plus clair possible

Merci à toi JCGL en tout cas pour ton aide
 

CISCO

XLDnaute Barbatruc
Re : mise en forme conditionnelle

Bonjour

Si la colonne Sample Type ne change pas de position, il ni a pas de problème.
Si le nombre de lignes varie, il suffit de définir la plage d'action de la MFC sur une plage plus grande. Pour le moment, elle l'est sur $E$2:$AA$13, mais tu peux l'étendre à $E$2:$AA$13000... Si ton fichier est vraiment très grand, il faudra peut être voir à améliorer cela pour que cela ne prenne pas trop de temps de travail..

@ plus
 

Si...

XLDnaute Barbatruc
Re : mise en forme conditionnelle

salut

et Si... tu rajoutes quelques lignes à ta première macro ?
Code:
...
  compteur = compteur + 1
  'contrôler la feuille de travail pour cet ajout
  Dim C As Range
  For Each C In Range("E2:AA" & Range("D65536").End(xlUp).Row)
    If Cells(C.Row, 4) = "FSR" Or Cells(C.Row, 4) = "CFM" Then
      C.Interior.ColorIndex = IIf(C < 4, 3, 4)
    End If
  Next
  Workbooks(nf).Close False
...
 

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia