Colorer des lignes en f(d'un écart de jour)
Bonjour,
Petit paragraphe pour contextualiser un peu :
Je suis étudiant en alternance dans une régie d'eau et d'assainissement, j'ai pour mission de développer un outil afin de faciliter saisie/exploitation de données issues de relevés hebdomadaires par des agents sur les ouvrages d'eau potable tel que des captages, réservoirs ou encore des forages donc jusqu'à maintenant j'ai réussi à m'en sortir, malgré mes lacunes en codage (en effet je débute totalement), j'ai fait une première version dans laquelle je voulais regrouper tous les ouvrages, mais le fichier commençait "à peser" l'ouverture devenait lente (environ 30 secondes alors que seulement 4 étaient formatés, malgré un codage qui fonctionne) du coup, j'ai testé une seconde option qui consiste à scinder en différents classeurs, un principal (menu ou accueil) et les autres, un par commune où des ouvrages sont présents, en les faisant interagir entre eux jusqu'ici tout va bien sauf que je bloque, ci-joint le fichier simplifié pour expliquer mon problème.
Alors c'est le classeur principal, il aura une image représentant le territoire de la communauté de communes des formes avec nom de commune + lien hypertexte pour ouvrir le classeur correspondant pour saisir les données relevées. Ensuite sur sa droite, mon casse-tête, sur les colonnes N à S.
Colonne N : Nom de la commune
Colonne O : Nom de l'ouvrage
Colonne P : écart de jour entre la date du jour (=AUJOURDHUI()) et la date du dernier relevé
Colonne Q : date du dernier relevé
Colonne R : date du prochain relevé (=Q*+7)
Colonne S (sera cachée) : date du dernier relevé envoyé depuis les classeurs "annexes" correspondant à chaque ouvrages (à l'activation de la feuille la valeur S est copié dans Q)
Donc pour le moment, je ne travaille que sur 4 ouvrages pour me familiariser avec les codes et trouver les bons avant de les dupliquer, avec ce fichier je suis en mode bricolage vu que le code s'active quand la feuille1 s'active, pour mes tests je change manuellement mes valeurs dans S, je vais sur feuil2 puis revient sur feuil1 ^^
Je veux que pour chaque ligne sur les colonnes de N à R une couleur soit attribuée en fonction de sa valeur sur la colonne Q :
<6 = bleu
7;8 = vert
>9 = rouge
Donc j'ai testé ceci :
Private Sub Worksheet_Activate()
'reservoir beaulieu
Range("S2").Select
Selection.Copy
Range("Q2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Range("P2").Value > 8 Then
Range("N2:R2").Select
Selection.Interior.Color = RGB(237, 55, 55)
End If
If Range("P2").Value < 7 Then
Range("N2:R2").Select
Selection.Interior.Color = RGB(122, 222, 233)
End If
If Range("P2").Value = 8 Then
Range("N2:R2").Select
Selection.Interior.Color = RGB(99, 208, 82)
End If
If Range("P2").Value = 7 Then
Range("N2:R2").Select
Selection.Interior.Color = RGB(99, 208, 82)
End If
Calculate
End Sub
Voici le code pour ma première ligne,il fonctionne mais j'aimerai faire quelque chose de plus simple car tout ça pour un seul ouvrage quand j'en aurai 50, j'ai peur que ça soit trop lourd et pas forcément très pertinent si quelque chose plus simple existe.
Voilà je suis preneur de tout les conseils, si vous me conseillez un code je serai ravi d'avoir un commentaire un peu détaillé sur les "fonctions" utilisées, en effet je ne suis pas là pour faire un copier/coller puis torcher le truc, non je veux comprendre ce que je vais écrire.
Merci d'avance pour ceux qui prendront le temps de lire mon pavé
Au plaisir de vous lire !
Bonjour,
pourquoi pas une simple MFC pour tes couleurs ?
Tant de cellules que ça concernées ?
eric
Ça fonctionnerait si je cherchais à modifier la couleur d'une seule cellule, ici j'aimerai mettre en forme plusieurs cellules sur la même ligne en fonction d'une seule, après j'ai essayé avec une MFC, ça fonctionnait pour les cellules de la colonne P, mais je ne sais pas faire pour mettre en forme les voisines
Un peu de lecture alors : http://www.mdf-xlpages.com/modules/smartsection/item.php?itemid=62 Références Relatives & Absolues
Bonjour, merci mais je suis désolé je ne comprend pas trop, l'utilité des références relatives et absolue parce que les MFC se font sur les cellules d'après leur propre valeur ?! Et ici c'est mettre en forme des cellules (texte,date,nombre) en fonction d'une seule
Chabson a écrit :Bonjour, merci mais je suis désolé je ne comprend pas trop, l'utilité des références relatives et absolue parce que les MFC se font sur les cellules d'après leur propre valeur ?! Et ici c'est mettre en forme des cellules (texte,date,nombre) en fonction d'une seule
Bonjour,
Je n'ai pas lu le reste (encore) mais ceci est faux !
On doit considérer que le mode normal de mise en place d'une MFC est par formule !
Le reste n'est que soit simplification introduite par Microsoft, qui dispense de formuler dans les cas simples, soit des effets particuliers qui peuvent être intéressants bien que généralement limités, mais dans des cas particuliers...
Dans ce contexte, le type de référence est primordial dans une formule conditionnelle (rappelons qu'une formule destinée à définir les conditions d'application d'une MFC est analogue à une formule utilisant une fonction SI mais dont on ne formulerait que la condition [sans le SI], les membres valeursivrai et valeursifaux n'ayant pas à être formulés car traduits par application ou non de la MFC).
Cordialement.
Re !
Il pourrait être utile d'écrire ton code en ce que j'appellerai volontiers VBA normal (opposé au galimatias enregistré
Mais le problème lui-même relève de MFC standard...
Cordialement.
Bonjour,
je suis désolé je ne comprend pas trop, l'utilité des références relatives et absolue parce que les MFC se font sur les cellules d'après leur propre valeur ?!
Une MFC par formule se réfère à ce qui est indiqué dans la formule, encore heureux.
Donc si tu indiques une colonne absolue elle se référera à quoi ?
eric
Re ! Salut Eric !
A titre purement didactique, ta procédure (sous réserve d'info manquante sur l'alimentation de la colonne S, mais ce n'est pas l'objet...). L'évènement Activate est a-priori mal choisi, on basculera donc sur Change, et on sera sélectif...
[Mais il reste qu'une MFC est à privilégier...]
Private Sub Worksheet_Change(ByVal Target As Range)
Dim clr, n%
If Target.Column <> 19 Or Target.Row = 1 Or Target = "" Then Exit Sub
n = Target.Row
Me.Range("Q" & n) = Target
clr = Array(RGB(122, 122, 233), RGB(99, 208, 82), RGB(237, 55, 55))
With Me.Range("N" & n).Resize(, 5)
Select Case Me.Range("P" & n).Value
Case Is < 7: .Interior.Color = clr(0)
Case 7, 8: .Interior.Color = clr(1)
Case Is > 8: .Interior.Color = clr(2)
End Select
End With
End SubCela change un peu de l'enregistreur... Note aussi que pour comprendre ce qu'on écrit quand on code, on indente, cela permet de lire sans effort...
Cordialement.
Bonjour la Compagnie,
Chabson a écrit :Bonjour, merci mais je suis désolé je ne comprend pas trop, l'utilité des références relatives et absolue parce que les MFC se font sur les cellules d'après leur propre valeur ?! Et ici c'est mettre en forme des cellules (texte,date,nombre) en fonction d'une seule
étudie ces 2 MFC pour comprendre ...
bonjour
macro a mettre dans un Module
a tester
Sub TestCouleur()
'reservoir beaulieu
Application.ScreenUpdating = False
For L = 2 To Range("N" & Rows.Count).End(xlUp).Row
Range("S" & L).Copy
Range("Q" & L).PasteSpecial xlPasteValues
Select Case Range("P" & L).Value
Case Is < 7
Range("N" & L & ":R" & L).Interior.Color = RGB(122, 222, 233)
Case 7, 8
Range("N" & L & ":R" & L).Interior.Color = RGB(99, 208, 82)
Case Is > 8
Range("N" & L & ":R" & L).Interior.Color = RGB(237, 55, 55)
End Select
Next
Application.CutCopyMode = False
End SubA+
Maurice
mais ceci est faux !
C'est bon j'ai compris ! Je ne savais pas que l'on pouvait mettre en forme à l'aide de formules, j'utilisais les règles prédéfinies alors que j'aurai du aller dans "nouvelle règle" et choisir "utiliser une formule pour déterminer quelles cellules le format sera appliqué", d'où l'importance de la référence absolue !
Il pourrait être utile d'écrire ton code en ce que j'appellerai volontiers VBA normal (opposé au galimatias enregistré
)
Effectivement je bidouille en recopiant des enregistrement sur une autre feuille pour arriver à mes fins ^^ mais comme je l'ai dit je suis totalement débutant dans le domaine et livré à moi même, c'est pourquoi j'ai choisi de m'inscrire sur ce forum
En tout cas merci beaucoup à vous, effectivement pas besoin de s'embêter avec du VBA pour ça !
PS : Question pratique du forum, donc je vais valider comme quoi j'ai eu ma réponse mais si par la suite j'ai d'autres questions est ce que je reprend ce sujet que je modifie ou bien je peux en créer un nouveau ?
Démarrer un nouveau topic, un ancien avec plusieurs échanges est peu lu.
eric