Macro pour coloration de ligne, qui se décolore à chaque cellule remplie

VH2011

XLDnaute Nouveau
Bonjour à tous,

Je cherche une macro qui me permettrait de colorer une ligne si je remplie une cellule de cette ligne.
Contrainte n°2 : je souhaite que chaque cellule sur cette ligne redevienne sans couleur lorsqu'elle est remplie.
Voir la pièce jointe qui a déjà quelques tests...
D'avance merci
 

Pièces jointes

  • Couleur Cellule.xlsm
    20.7 KB · Affichages: 56
  • Couleur Cellule.xlsm
    20.7 KB · Affichages: 63
  • Couleur Cellule.xlsm
    20.7 KB · Affichages: 61

Staple1600

XLDnaute Barbatruc
Re : Macro pour coloration de ligne, qui se décolore à chaque cellule remplie

Bonjour Annette

Rassures-toi, j'ai bien noté ta présence dans le fil mais ce matin je me suis réveillé en mode VBA ce qui explique pourquoi j'ai pas ouvert ta PJ et comme le titre du fil commence par Macro pour... , je "m'encraigne" dans la voie de VBA même si une MFC devrait pouvoir suffire ;)
 

Si...

XLDnaute Barbatruc
Re : Macro pour coloration de ligne, qui se décolore à chaque cellule remplie

Re

@ Annette : mais non, mais non, je t'ai bien croisée avec tes shadoks* ; il me semble que tu as ajouté, enlevé, donc remplacé un fichier au message #2 ;).
Je me suis demandé si... le dernier était le bon car en saisissant, par exemple, a en B2, b en D2 puis en vidant D2 jusque là ça va ! Dans la foulée, en saisisant x en G2, tout va bene mais en continuant, vide B2 et là ... tu perds la couleur.
Dans le doute je me suis abstenu.

@ Staple : je t'ai aussi aperçu;) et je m'étais posé la question (d'où mon "succinct").

Si... les cellules doivent être incolores avec une plage vide, on peut rajouter ton évènement pour essayer,
VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
  If R.Count > 1 Then Exit Sub
  If Intersect(R, [B2:G2]) Is Nothing Then Exit Sub
  If Application.CountBlank([B2:G2]) = 6 Then [B2:G2].Interior.ColorIndex = xlNone
End Sub

Private Sub Worksheet_Change(ByVal R As Range)
  Dim C As Range
  If R.Count > 1 Then Exit Sub
  If Intersect(R, [B2:G2]) Is Nothing Then Exit Sub
  For Each C In [B2:G2]
    C.Interior.ColorIndex = IIf(C = "", 6, xlNone)
  Next
  [B2].Select
End Sub
et du coup je laisse la solution par MFC à qui le désire.


* Shadok.jpg
 

Annette

XLDnaute Occasionnel
Re : Macro pour coloration de ligne, qui se décolore à chaque cellule remplie

Bonjour à tous,

Merci pour votre retour, je pensais être abandonnée ou à côté de la plaque avec ma proposition de solution par MFC, car la seule personne qui me semblait-il l'ai remarquée soit Modeste ... même le principal intéressè ne l'a pas vue...

Staple1600,
Effectivement, le titre est évocateur mais j'ai souhaité proposer une autre piste.
De plus, votre post7 n'a pas semblé prendre en compte ma proposition :(.

Si...,
Vous avez entièrement raison, je n'ai pas testé ma MFC jusqu'au bout, du coup ma proposition est bancale.
La votre est beaucoup plus efficace et répond, me semble-t-il à la finalité du résultat à obtenir sans macro.

Speel,
Je me suis sentie étrangère à toute la discussion ... d'où ma dernière remarque:(.

Quoiqu'il en soit, merci à vous pour ce retour, du coup ça va mieux :):eek::D.

VH2011,
Je crois que vous avez du choix ...

Cordialement
 

VH2011

XLDnaute Nouveau
Re : Macro pour coloration de ligne, qui se décolore à chaque cellule remplie

Bonsoir à tous,
Grand merci pour toutes ces réponses.


Annette
J'ai re-regardé votre post#2 par MFC qui effectivement fonctionne bien, je dirais quasi parfaitement à un détail près, qui m'a fait croire que la mfc ne fonctionnait pas :

Le détail c'est dans le cas où l'utilisateur ne remplit pas la 1ere cellule B2, dans ce cas la coloration ne fonctionne pas.
(il arrive que les cellules soient remplies dans un ordre aléatoire).

Sinon parfait car un besoin de mon tableau est que : si je vide totalement la ligne je souhaite que les cellules redeviennent non colorées.


Speel : post#12 macro4
Bingo !
Seul cafouillage : lorsqu'on efface les cellules, uch les couleurs disparaissent bizarrement :
Si j'efface les cellules une par une, seule une cellule se colorie alors que j'ai une puis deux puis trois ... cellules vides.
Si j'efface par cinq alors plus de couleur...


Si... post#13 Couleur Cellule VBA vs MFC.xlsm‎
La MFC fonctionne, sauf toujours ce besoin (mal formulé mea culpa) : si je vide tout, je souhaite que tout redevienne blanc.
La macro rempli bien, mais pour le vidage je la trouve capricieuse ;)


Staple1600 post#14
Effectivement je vais essayer de re-formuler les besoins de mon tableur, en essayant d'être le plus clair possible :


Pour situer l'utilisation du tableur:
c'est un outil de suivi d'actions, où l'utilisateur vient entrer chaque nouvelle action, sur la dernière ligne vide.
Les cellules de B à G sont donc du type : date, n° action, client, désignation, référence... plus de 20 colonnes au total...

Donc le tableau est incrémenté par la fin ("le bas"), et donc les cellules sont à l'origine vides donc non colorées.
Le but de la manœuvre de coloration est donc de signaler visuellement qu'une cellule n'est pas remplie.
Le remplissage de chaque cellule est nécessaire mais est espacé dans le temps selon l'avancement de l'action... (je ne souhaite pas mettre de verrouillage type obligation de remplir...)

Donc : à l'origine les cellules vides sont sans couleur.
L'utilisateur commence à remplir par n’importe quelle cellule de la ligne.
Aussitôt les cellules vides de la ligne entamée se colorient.
Chaque cellule remplie revient en "aucun remplissage"
Lorsque la ligne complète est remplie, elle est donc redevenue sans couleur.

Si l'utilisateur efface une ligne, cette dernière retrouve son état initial : "aucun remplissage".


Voilà tout !
J'espère avoir réussi à exprimer les besoins explicites et implicites du sujet !

Dans l'attente de vous lire encore merci pour votre aide
Bien cordialement à tous,
 

Si...

XLDnaute Barbatruc
Re : Macro pour coloration de ligne, qui se décolore à chaque cellule remplie

salut

@ Speel, sélectionne une ligne dont au moins une cellule n’est pas vide et supprime la ...
Si l'utilisateur efface une ligne, cette dernière retrouve son état initial : "aucun remplissage".

@ VH2011, tu as fait l'effort de joindre un fichier dès la première demande, bien, mais il ne représentait qu'une partie de ton but final. Si tu avais bien précisé les choses dès le départ,
Donc le tableau est incrémenté par la fin ("le bas"), et donc les cellules sont à l'origine vides donc non colorées.
Le but de la manœuvre de coloration est donc de signaler visuellement qu'une cellule n'est pas remplie.

Donc : à l'origine les cellules vides sont sans couleur.

Si l'utilisateur efface une ligne, cette dernière retrouve son état initial : "aucun remplissage".
tu aurais eu à tester* :
Code:
Private Sub Worksheet_Change(ByVal R As Range)
  Dim P As Range, C As Range
  Set P = Cells(R.Row, 2).Resize(1, 6)
  If Intersect(R, P) Is Nothing Then Exit Sub
  If R.Count > 1 And Application.CountBlank(Selection) = Selection.Count Then Selection.Interior.ColorIndex = xlNone: Exit Sub
  If Application.CountBlank(P) = 6 Then
    P.Interior.ColorIndex = xlNone
  Else
    For Each C In P: C.Interior.ColorIndex = IIf(C = "", 36, xlNone): Next
  End If
End Sub
plus vite cependant, tu nous aurais privés de ces échanges de dialogue entre intervenants.

Petite réponse pour mettre un terme j'espère à ces échanges de courtoisie que j'évite afin d'économiser mon temps.
C’est raté ;) et tu comprendras certainement ce que Staple voulait dire :D!

* tu aurais intérêt à convertir la plage source en Tableau pour limiter le champ d'opération de l’évènementielle.
 

Pièces jointes

  • Couleur Cellule- Si.xlsm
    18 KB · Affichages: 18

Speel

XLDnaute Occasionnel
Re : Macro pour coloration de ligne, qui se décolore à chaque cellule remplie

@ Speel, sélectionne une ligne dont au moins une cellule n’est pas vide et supprime la ...

Bonjour,
Ca marche parfaitement !


dicton du jour : Si les questions t’agacent, n'y réponds pas :)
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 206
dernier inscrit
diambote