Problèmes Macro VBA condition couleur

Moonshine

XLDnaute Nouveau
Bonjour à tous,
Je débute en VBA, mais j'essaie de faire plusieurs macros qui simplifieraient l'utilisation d'un tableau Excel.

Ma première macro devrait permettre our chaque ligne :
*si colonne M- colonne L = 0, alors mettre "/" avec couleur de police noire
*si colonne M - colonne L >0, alors mettre la valeur de la soustraction et couleur de police verte
*si colonne M - colonne L <0 alors mettre la valeur ABSOLUE de la soustraction et couleur de police rouge

Ce que j'ai fait (et qui ne marche pas) et ci-dessous :

Sub TriEc_F_11()

Dim i As Integer
Dim Nb_Lignes1 As Long
Dim Nb_Lignes2 As Long
Dim Nb_Lignes3 As Long
Dim N As Variant

i = 12
Nb_Lignes1 = Range("N65536").End(xlUp).Row
Nb_Lignes2 = Range("M65536").End(xlUp).Row
Nb_Lignes3 = Range("L65536").End(xlUp).Row

N.Value = Abs(Range("M" & i) - Range("L" & i))

Range("N12:N" & Nb_Lignes).ClearContents

For i = 12 To Nb_Lignes
If N.Value >= 1 Then
Range("N" & i).Value = N.Value And Range("N" & i).Font.ColorIndex = 3
End If
If N.Value <= -1 Then
Range("N" & i).Value = N.Value And Range("N" & i).Font.ColorIndex = 4
End If
If N.Value = 0 Then
Range("N" & i).Value = "/" And Range("N" & i).Font.ColorIndex = 1
End If

Next


End Sub


Ma seconde macro devrait permettre pour chaque ligne :
* si dans colonne N couleur de police = rouge, alors mettre le fond de la cellule colonne L en rouge
* si dans la colonne N couleur de police = vert, alors mettre le fond de la cellule colonne L en vert
*(si dans la colonne N couleur de police = noir, alors mettre le fond de la cellule colonne L en blanc)
* (si rien dans la cellule N, alors mettre fond de la cellule colonne L en blanc)
Voila ce que j'ai tenté, et qui ne marche pas :

Sub TriS_F_11()

Dim i As Integer
Dim Nb_Lignes As Long

Nb_Lignes1 = Range("N65536").End(xlUp).Row
Nb_Lignes2 = Range("L65536").End(xlUp).Row
i = 12

For i = 12 To Nb_Lignes
If Range("N" & i).Font.ColorIndex = 3 Then
Range("L" & i).Interior.ColorIndex = 3
End If
If Range("N" & i).Font.ColorIndex = 4 Then
Range("L" & i).Interior.ColorIndex = 4
End If
If Range("N" & i).Font.ColorIndex = 1 Then
Range("L" & i).Interior.ColorIndex = 2
End If

Next


End Sub


Peut être peut ton mettre les deux macros dans une seule?

Merci d'avance pour vos suggestions!
 

cbea

XLDnaute Impliqué
Re : Problèmes Macro VBA condition couleur

Bonjour Moonshine et le forum,

Voici une solution avec une seule procédure pour traiter les 2 cas :

Code:
Sub TestCell()
    Dim i As Long
    Dim LigDep As Long
    Dim Nb_Lignes As Long
    Dim Nb_Lignes1 As Long
    Dim Nb_Lignes2 As Long
    Dim Nb_Lignes3 As Long
    
    Dim varValM As Variant
    Dim varValL As Variant
    
    
    ' Ligne de départ et nombre de lignes à traiter
    LigDep = 12
    Nb_Lignes = 20
    
    ' Dernières lignes de chaque colonne
    Nb_Lignes1 = Range("N" & Cells.Rows.Count).End(xlUp).Row
    Nb_Lignes2 = Range("M" & Cells.Rows.Count).End(xlUp).Row    ' Non utilisé ?
    Nb_Lignes3 = Range("L" & Cells.Rows.Count).End(xlUp).Row    ' Non utilisé ?
    
    ' Effacer le contenu de la colonne N à partir de la ligne 12
    If Nb_Lignes1 >= LigDep Then Range("N" & LigDep & ":N" & Nb_Lignes1).ClearContents
    
    ' A partir de la ligne 12 jusqu'à la dernière
    For i = LigDep To Nb_Lignes
        ' Vérifier que le contenu des cellules soient numériques
        varValM = 0
        If IsNumeric(Range("M" & i).Value) Then varValM = Range("M" & i).Value
        varValL = 0
        If IsNumeric(Range("L" & i).Value) Then varValL = Range("l" & i).Value
        
        ' Initialiser le fond de couleur de la cellule L
        Range("L" & i).Interior.ColorIndex = xlNone
        
        Select Case varValM - varValL
            '*si colonne M- colonne L = 0, alors mettre "/" avec couleur de police noire
            '*(si dans la colonne N couleur de police = noir, alors mettre le fond de la cellule colonne L en blanc)
            Case 0
                Range("N" & i).Value = "/"
                Range("N" & i).Font.ColorIndex = 1
                Range("L" & i).Interior.ColorIndex = 1
                
            '*si colonne M - colonne L <0 alors mettre la valeur ABSOLUE de la soustraction et couleur de police rouge
            '* si dans colonne N couleur de police = rouge, alors mettre le fond de la cellule colonne L en rouge
            Case Is < 0
                Range("N" & i).Value = varValM - varValL
                Range("N" & i).Font.ColorIndex = 4
                Range("L" & i).Interior.ColorIndex = 4
        
            '*si colonne M - colonne L >0, alors mettre la valeur de la soustraction et couleur de police verte
            '* si dans la colonne N couleur de police = vert, alors mettre le fond de la cellule colonne L en vert
            Case Is > 0
                Range("N" & i).Value = varValM - varValL
                Range("N" & i).Font.ColorIndex = 3
                Range("L" & i).Interior.ColorIndex = 3
        End Select
    Next
End Sub
 

Moonshine

XLDnaute Nouveau
Re : Problèmes Macro VBA condition couleur

Un grand merci!! Il me reste juste un petit souci auquel je n'avais pas pensé : il peut parfois ne rien y avoir dans la colonne M, dans ce cas il faudrait que rien ne se passe (fond de L reste blanc et pas de valeur en N).
En gros, si colonne M = "", fond de L = blanc et N = ""
Mais vraiment merci, à part ce petit souci cela marche super bien
 

Moonshine

XLDnaute Nouveau
Re : Problèmes Macro VBA condition couleur

Encore une question cbea,
Au niveau du "Case Is" Je voudrais faire une condition si la différence de la colonne M et de la colonne L est comprise entre 0 et 5, alors...
Est-ce possible? j'ai essayé un "And" sans grand succès!

Merci d'avance!
 

Moonshine

XLDnaute Nouveau
Re : Problèmes Macro VBA condition couleur

Merci (il me manque qelques bases de syntaxes en vba)!
Je cherche à en faire un maximum toute seule, mais la j'ai un autre petit souci :

Case Is < 5
Range("N" & i).Value = Abs(varValM + 52 - varValL)

En fait je voudrais que lorsque M-L < 5, la valeur affichée en N soit valeur absolue de M+52 - L.

J'ai du faire une erreur de syntaxe encore...
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 101
Membres
104 031
dernier inscrit
RimeF