VBA - colorer ligne selon valeur cellule
guigui -
Bonjour,
J'ai un tableau Excel avec une feuille par semaine.
Sur chaque feuille,
Une demande de travaux est faite par mon service : Chaque ligne décrit une des taches à réaliser dans la semaine, différentes informations sont complétées dans les colonnes C à I.
Puis, quand le travail est effectué par un autre service, les colonnes K à N sont complétées. En colonne L, les cellules sont initialement vides. Puis quand les travaux sont réalisés, on écrit "Fait" dans cette colonne.
Je souhaiterais implanter un code VBA qui permettrait de colorer les colonnes C à N en vert, quand la cellule L de cette même ligne est remplie en "Fait".
Je souhaiterais que ce code se fasse automatiquement sur toutes les feuilles de mon classeur.
Je ne sais pas si je suis très claire... Je peux envoyer mon fichier Excel si besoin.
J'ai fais du VBA, il y a longtemps, et je n'y arrive plus :(
Merci pour votre aide
- VBA - colorer ligne selon valeur cellule
- Partager photos en ligne - Guide
- Aller à la ligne dans une cellule excel - Guide
- Colorer cellule excel selon valeur - Guide
- Excel compter cellule couleur sans vba - Guide
- Mètre en ligne - Guide
11 réponses
Bonjour, en effet je l'avais initialement fait avec la mise en forme conditionnelle.
Mais le problème est que le fichier est utilisé par de nombreuses personnes. A chaque fois qu'une nouvelle feuille est créée, c'est une duplication d'une autre feuille. Puis tous le monde fait tout un tas de copier coller dans tous les sens, ce qui change la MFC, et il faut donc chaque semaine que je refasse les règles de MFC.
Je souhaiterais passer par le VBA pour éviter d'avoir à refaire cette tache tout le temps...
Bonjour,
Donc si c'est une duplication de la feuille avec MFC la copie aura aussi la MFC ,!
Vous avez certainement créer une feuille modèle que les gens puissent copier...!
Bonjour,
En fait, selon les semaines et la complexité des taches, il y aura parfois 3 lignes pour les taches du lundi, 2 lignes pour les taches du mardi, 4 lignes pour les taches du mercredi, etc. Ce pour une semaine.
Mais la semaine suivante, il n'y aura peut être qu'une ligne pour la tache du lundi, 3 pour le mardi et 3 pour le mercredi.
De plus, ce planning est constamment remanié, suite à des modifications, problèmes de transports, etc.
Alors, les cellules de la demande de travaux du lundi S35 seront copié collé sur la S36 (autre feuille), et ça met alors tout un bazar ... :(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionAlors, la feuille d'après créée différemment, avec beaucoup de manipulation de tout le monde (document accessible par 150 personnes), la MFC est complètement changée...
Bonjour,
A voir vos différentes images, il semble que vous avez des cellules fusionnées, ce qui n'est pas compatible avec la MFC!
Sans avoir un exemple à disposition , je ne peux pas en faire plus (surtout si il faut passer par VBA).
Oui en colonne A et B j'ai des cellules fusionnées. Mais je ne colore qu'à partir de la cellule C.
Du coup il n'y a pas de souci?
J'ai essayé de joindre mon fichier Excel sur le forum, mais ça ne semble pas fonctionner... Savez vous si c'est normal?
Et pourquoi pas mettre dans l'event Workbook_Open, une macro qui efface toutes les MFC puis applique sur chaque onglet la mise en forme voulue ?
Exemple :
Private Sub Workbook_Open() Dim ws As Worksheet For Each ws In Worksheets ws.Cells.FormatConditions.Delete With ws.Range("C:N") .FormatConditions.Add xlExpression, , "=$L1=""Fait""" .FormatConditions(1).Interior.Color = vbGreen .FormatConditions(1).StopIfTrue = False End With Next ws End Sub
Bonjour,
Je pense que ceci devrait fonctionner et sera valable à la fois avec et sans espace :
Private Sub Workbook_Open() Dim ws As Worksheet For Each ws In Worksheets ws.Cells.FormatConditions.Delete With ws.Range("C:N") .FormatConditions.Add xlExpression, , "=SUPPRESPACE($L1)=""Fait""" .FormatConditions(1).Interior.Color = vbGreen .FormatConditions(1).StopIfTrue = False End With Next ws End Sub
Si ça ne fonctionne pas je regarderai ça dans l'après midi