coloration cellule instantanément si cellule pleine

olivowitch

XLDnaute Junior
Bonjour,

Je voudrais un coup de main pour une macro de coloration :
Je souhaiterai que lorsque j'écris dans une cellule (pour toute une colonne), dès que je fais entrer ça colore des cellules de la même ligne ainsi que la cellule où j'ai écris.
Et lorsque j'efface le contenu de cette même cellule, la coloration s'enlève automatiquement.

J'avais pensé utiliser ce type de macro :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" And Target.Count = 1 And Not IsEmpty(Target) Then Call Coloration
End Sub


Mais je ne peux pas changer la Taregt.Adress = "$A$1" par quelque chose de type
For i = 1 to 100 (par exemple) puis
Cells(i, numéro de colonne)

Vous trouverez toute la macro dans le document en pièce jointe.

Merci et bonne journée
 

Pièces jointes

  • test_olivowitch.xlsm
    15.7 KB · Affichages: 155
  • test_olivowitch.xlsm
    15.7 KB · Affichages: 158
  • test_olivowitch.xlsm
    15.7 KB · Affichages: 172

Papou-net

XLDnaute Barbatruc
Re : coloration cellule instantanément si cellule pleine

Bonjour olivowitch,

Je n'ai pas bien compris les conditions pour colorer les cellules, mais je pense pouvoir être utile en te proposant de simplifier ton code :

Code:
Sub coloration()
Dim i As Byte
For i = 10 To 200
  Sheets("Feuil1").Range("B" & i & ":E" & i & ",G" & i).Interior.Color = 10092543
Next
End Sub
Sub effacer()
Dim i As Byte
For i = 10 To 200
  Sheets("Feuil1").Range("B" & i & ":E" & i & ",G" & i).Interior.Color = xlNone
Next
End Sub

Si les lignes de la plage sont fixes, on peut faire encore plus simple (et plus rapide) :

Code:
Sub coloration1()
Sheets("Feuil1").Range("B10:E200,G10:G200").Interior.Color = 10092543
End Sub
Sub effacer1()
Sheets("Feuil1").Range("B10:E200,G10:G200").Interior.ColorIndex = xlNone
End Sub

Espérant avoir été utile.

Cordialement.

Edit : bonjour Victor21
 

olivowitch

XLDnaute Junior
Re : coloration cellule instantanément si cellule pleine

Bonjour Victor21 et Papou-net, et Merci de votre aide.

Papou-net, je souhaiterai que la coloration d'une ligne se fasse lorsque je remplis une autre cellule :
exemple si je remplis A1, alors les cellules B1 à D1 se colore.
si j'efface le contenu de A1 alors la couleur des cellules B1 à D1 s'efface.
J'aurai pu passer par une solution avec If <> "" mais ça ne se faisait pas automatiquement après le remplissage de la cellule. Il fallait activer la macro.

Victor21, avec une MFC, ça fonctionne si :
Si je souhaite colorer une cellule de la colonne B si la cellule de la colonne E associée est remplie
--> je sélectionne les cellules que je souhaite colorer dans une colonne (exple B1 à B4)
--> MFC, nouvelle règle, avec la formule = E1<> ""
--> Puis je choisis la couleur

Cela fonctionne mais si je veux que ça ne colore plus uniquement 1 cellule associée (B1) mais plusieurs (B1, C1, D1), ça ne fonctionne pas même si je sélectionne avant de faire la MFC les cellules des 3 colonnes.

Voilà pourquoi j'essayais par macro.

Je vous remercie pour vos solutions.

Olivowitch
 

job75

XLDnaute Barbatruc
Re : coloration cellule instantanément si cellule pleine

Bonjour olivowitch, le fil, le forum,

Victor21, avec une MFC, ça fonctionne si :
Si je souhaite colorer une cellule de la colonne B si la cellule de la colonne E associée est remplie
--> je sélectionne les cellules que je souhaite colorer dans une colonne (exple B1 à B4)
--> MFC, nouvelle règle, avec la formule = E1<> ""
--> Puis je choisis la couleur

Cela fonctionne mais si je veux que ça ne colore plus uniquement 1 cellule associée (B1) mais plusieurs (B1, C1, D1), ça ne fonctionne pas même si je sélectionne avant de faire la MFC les cellules des 3 colonnes.

Vous ne semblez pas très à l'aise avec les MFC, alors je corrige votre texte :

Si je souhaite colorer une cellule des colonnes B à D si la cellule de la colonne E associée est remplie
--> je sélectionne les cellules que je souhaite colorer (exple B1: D4)
--> MFC, nouvelle règle, avec la formule = $E1<> ""
--> Puis je choisis la couleur

Cela fonctionnera (...)


Edit : heureux de te croiser JC :) j'ai trainé pour rédiger mon message, désolé.

A+
 
Dernière édition:

olivowitch

XLDnaute Junior
Re : coloration cellule instantanément si cellule pleine

Bonjour JCGL et Job75

Je vous remercie pour votre aide, c'est ce qui me manqué.

Je ne suis pas à l'aise avec le MFC mais pas uniquement ;)
Je travaille beaucoup à m'améliorer notamment grâce à XLD où je trouve + de 90% de ce que je recherche.

La difficulté vient par exemple d'éléments comme ce $ dont je ne comprenais pas encore trop l'utilisation.

Je vous remercie encore et je vous souhaite une bonne journée.

Olivowitch
 

Papou-net

XLDnaute Barbatruc
Re : coloration cellule instantanément si cellule pleine

Bonjour à tous,

Olivowitch,

Pour répondre exactement à ta question, une seule macro événementielle suffit dans ce cas.

La voici :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lg As Byte
If Target.Column <> 7 Then Exit Sub
cancel = True
Lg = Target.Row
Select Case Target.Value
  Case Is <> ""
    Range("B" & Lg & ":E" & Lg & ",G" & Lg).Interior.Color = 10092543
  Case Else
    Range("B" & Lg & ":E" & Lg & ",G" & Lg).Interior.ColorIndex = xlNone
End Select
End Sub
Rien d'autre à faire, mais si tu y tiens, tu peux toujours conserver les macros coloration et effacer, ce qui donne :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 7 Then Exit Sub
cancel = True
If Target.Value = "" Then Effacer Target.Row Else Coloration Target.Row
End Sub

Sub Coloration(Lg As Long)
  Range("B" & Lg & ":E" & Lg & ",G" & Lg).Interior.Color = 10092543
End Sub

Sub Effacer(Lg As Long)
  Range("B" & Lg & ":E" & Lg & ",G" & Lg).Interior.ColorIndex = xlNone
End Sub
Ceci dit, la solution par mise en forme conditionnelle convient parfaitement, à condition de tenir compte des remarques de JCGL et job75, que je salue tout particulièrement.

Espérant avoir répondu.

Cordialement.
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : coloration cellule instantanément si cellule pleine

Bonjour à tous,
Salut Job :),
Salut Papou-Net :),


Je vous remercie pour votre aide, c'est ce qui me manqué.

Je ne suis pas à l'aise avec le MFC mais pas uniquement ;)
Je travaille beaucoup à m'améliorer notamment grâce à XLD où je trouve + de 90% de ce que je recherche.

La difficulté vient par exemple d'éléments comme ce $ dont je ne comprenais pas encore trop l'utilisation.

Je vous remercie encore et je vous souhaite une bonne journée.

Olivowitch

Voilà un exemple à suivre par beaucoup de "demandeurs".
Bravo

A++ les amis "copieurs" Arf Arf :cool:

A+ à tous
 

VH2011

XLDnaute Nouveau
Re : coloration cellule instantanément si cellule pleine

Bonjour,
vous avez presque répondu à ma recherche :

je souhaiterais que lorsque j'écris dans une cellule entre B et G par exemple, toutes les cellules vides se colorent.
Et ne se décolore lorsqu'elle ne sont plus vides.

Voir pièce jointe j'espère plus parlante.

D'avance merci
 

Pièces jointes

  • couleur de ligne change.xlsm
    14.2 KB · Affichages: 66

Staple1600

XLDnaute Barbatruc
Re : coloration cellule instantanément si cellule pleine

Bonsoir à tous

VH2011
vous avez presque répondu à ma recherche
Et là je réponds comment à ta demande ?;)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim p As Range
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Columns("B:G")) Is Nothing Then
Set p = Range(Cells(Target.Row, "B"), Cells(Target.Row, "G"))
p.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 36
End If
End Sub
 

VH2011

XLDnaute Nouveau
Re : coloration cellule instantanément si cellule pleine

Bonsoir Staple

Le code que vous proposez ne fonctionne pas.
- bug lorsque l'on rempli la dernière cellule vide entre b et g
- la couleur reste si je vide les cellules

On y était presque !
 

Pièces jointes

  • couleur de ligne change (1).xlsm
    17.2 KB · Affichages: 61

Staple1600

XLDnaute Barbatruc
Re : coloration cellule instantanément si cellule pleine

Bonsoir à tous

VH2011
Et comme ceci ?
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim p As Range
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Columns("B:G")) Is Nothing Then
Set p = Range(Cells(Target.Row, "B"), Cells(Target.Row, "G"))
On Error Resume Next
p.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 36
End If
End Sub
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Columns("B:G")) Is Nothing Then
Target.Interior.ColorIndex = IIf(IsEmpty(Target), 36, xlNone)
End If
End Sub

Le code que vous proposez ne fonctionne pas.
Si il fonctionnait.
Mais mal ;)
(Libre à vous dans ce cas de chercher à ce qu'il fonctionne mieux ;) )
 

VH2011

XLDnaute Nouveau
Re : coloration cellule instantanément si cellule pleine

Whoua ! excellent
Des semaines que je cherchais !

Seul souci, ce code fonctionne ... mais disons mal !

Explication : les cellules se colorent juste avec un clic à l'intérieur, sans même avoir le temps d'entrer une valeur.

Hss ça devient vite très coloré !

Et avec mes maigres connaissances en vb je suis à court !

Autre souci : je n'ai plus la possibilité de revenir en arrière fonction annuler.

Encore un pti coup de pouce ?
 

Pièces jointes

  • couleur de ligne change (2).xlsm
    20.7 KB · Affichages: 67

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote