Colorer une plage de cellules en ligne, si non vides

degap05

XLDnaute Impliqué
Bonjour,
J'ai cherché sur le forum, mais je n'ai pas trouvé......:confused:

Je souhaiterais que les cellules A,B,C,D de chaque ligne soit colorées lorsque la cellule 8 (H) est renseignée, mais uniquement si elles ne sont pas vides.

Private Sub Worksheet_Change(ByVal Target As Range)
Lig = Target.Row
' Si la saisie est faite sur les cellules la colonne 8 (H)
If Target.Column = 8 Then
If Target.Value <> "" Then
Range(Cells(Lig, 1), Cells(Lig, 4)).Interior.ColorIndex = 33
End If
End If
End Sub


Merci de votre aide.
 
G

Guest

Guest
Re : Colorer une plage de cellules en ligne, si non vides

Bonjour:

Avec ceci:

Code:
lig = Target.Row
    ' Si la saisie est faite sur les cellules la colonne 8 (H)
    If Target.Column = 8 Then
        If Target.Value <> "" Then
            Range(Cells(lig, 1), Cells(lig, 4)).Interior.ColorIndex = 33
        Else
            Range("A" & lig & ":D" & lig).Interior.ColorIndex = [COLOR="YellowGreen"]xlNone[/COLOR]
        End If
    End If

Une méthode plus simple consiste à sélectionner les colonnes A à D et appliquer un format conditionnel (Menu format/mise en forme conditionelle) Dans la zone condition choisir 'La formule est' et dans l'autre zone mettre la formule : =$H1<>"" puis choisir le format désiré et valider.

J'ai volontairement adopter une autre manière de faire référence aux colonnes A à D car elle me semble plus lisible que par les index. Mais bien-sûr rien empêche d'employer: Range(Cells(lig, 1), Cells(lig, 4)).Interior.ColorIndex = xlNone

bonne journée
 
Dernière modification par un modérateur:

Spitnolan08

XLDnaute Barbatruc
Re : Colorer une plage de cellules en ligne, si non vides

Bonjour,

Sibien compris, par exemple :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Lig = Target.Row
' Si la saisie est faite sur les cellules la colonne 8 (H)
If Target.Column = 8 And Target.Value <> "" Then
    For i = 1 To 4
        If Cells(Lig, i) <> "" Then Cells(Lig, i).Interior.ColorIndex = 33
    Next
End If
End Sub
Cordialement

Edit : pas vu Hasco but not the same
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Colorer une plage de cellules en ligne, si non vides

Bonjour

Si je peux me permettre dans le cas de macro sur

Private Sub Worksheet_Change(ByVal Target As Range)

j'essaie de toujours faire un test du nombre de cellules modifiées car en cas de tirer-glisser ça bug
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Colorer une plage de cellules en ligne, si non vides

Re

Oui mais là tu n'appliques pas ta macro

Peut-être ainsi
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
lig = Target.Row

' Si la saisie est faite sur les cellules la colonne 8 (H)
If Target.Cells.Count > 1 Then
    For Each c In Target
        If c.Column = 8 And c.Value <> "" Then
            lig = c.Row
            For i = 1 To 4
                If Cells(lig, i) <> "" Then Cells(lig, i).Interior.ColorIndex = 33
            Next
        End If
    Next
Else
    If Target.Column = 8 And Target.Value <> "" Then
        For i = 1 To 4
            If Cells(lig, i) <> "" Then Cells(lig, i).Interior.ColorIndex = 33
        Next
    End If
End If
End Sub
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Colorer une plage de cellules en ligne, si non vides

Re

ou sans test
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range

' Si la saisie est faite sur les cellules la colonne 8 (H)
For Each c In Target
    If c.Column = 8 And c.Value <> "" Then
        lig = c.Row
        For i = 1 To 4
            If Cells(lig, i) <> "" Then Cells(lig, i).Interior.ColorIndex = 33
        Next
    Else
        Range("A" & lig & ":D" & lig).Interior.ColorIndex = xlNone
    End If
Next

End Sub
 

Spitnolan08

XLDnaute Barbatruc
Re : Colorer une plage de cellules en ligne, si non vides

Re,

encore une petite pour la route Hasco...:D;)
Code:
Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range

' Si la saisie est faite sur les cellules la colonne 8 (H)
For Each c In Target
    If c.Column = 8 And c.Value <> "" Then
        lig = c.Row
        For i = 1 To 4
            Cells(lig, i).Interior.ColorIndex = IIf(Cells(lig, i) <> "", 33, xlNone)
        Next
    End If
Next
End Sub
Cordialement
 
Dernière édition:

degap05

XLDnaute Impliqué
Re : Colorer une plage de cellules en ligne, si non vides

Bonjour, merci à tous, j'ai testé la plupart de vos solutions, mais elles ne donnent pas satisfaction. En effet, il s'agit de colorer la plage de cellules sur chaque ligne, de A,B,C,D, si l'on rempli la cellule de la colonne 8 (H), à condition que chaque cellules en A,B,C,D soient remplies.

Je joins un fichier

Merci.
 

Pièces jointes

  • degap05.zip
    8 KB · Affichages: 99
  • degap05.zip
    8 KB · Affichages: 75
  • degap05.zip
    8 KB · Affichages: 79
G

Guest

Guest
Re : Colorer une plage de cellules en ligne, si non vides

bonjour,

Une réponse concernant la mise en form conditionnelle.

Pour remplir tous les critères, la formule sera:

=ET($H1<>"";NBVAL($A1:$D1)=4)

A bientôt
 

Spitnolan08

XLDnaute Barbatruc
Re : Colorer une plage de cellules en ligne, si non vides

Re,

D'accord avec la solution d'Hasco qui semble la plus appropriée.
Sinon en VBA :
Code:
Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, Plage As Range
Dim Lig As Single
' Si la saisie est faite sur les cellules la colonne 8 (H)
For Each c In Target
    If c.Column = 8 And c.Value <> "" Then
        Lig = c.Row
        Set Plage = Range(Cells(Lig, "A"), Cells(Lig, "D"))
        Plage.Interior.ColorIndex = IIf(WorksheetFunction.CountA(Plage) = 4, 33, xlNone)
    End If
Next
End Sub
Cordialement
 

Discussions similaires

Réponses
1
Affichages
229

Statistiques des forums

Discussions
312 017
Messages
2 084 640
Membres
102 626
dernier inscrit
Abdoulaziz_17