Bonjour
Pour info, je continue la mise en place d'un planning visuel de présences sur chantier (voir post Résolu http://www.developpez.net/forums/sho...d.php?t=485595 )
Je crée un planning par mois, avec en abscisses les dates (du 1 au 31 du mois), et en ordonnées, les chantiers avec pour chacun la liste de tous les ouvriers (1 ligne résumé pour le chantier, et 13 lignes pour les ouvriers).
Le remplissage de ce tableau-planning est déjà fait ("1" quand un tel ouvrier est présent sur un tel chantier à une telle date). Merci Pierre !
Vous verrez dans le code suivant que je souhaite colorer les cellules indiquant une présence (">=1").
J'avais d'abord créé une boucle sur les lignes, puis comme l'exécution de la macro était horriblement lente, je boucle sur la colonne (plus rapide car la date de référence reste la même dans chaque boucle).
Par contre, je ne peux changer de couleur de remplissage selon le chantier (premier chantier : planning en vert; 2è chantier: planning en bleu; etc).
Ou alors, il faut que je boucle sur chaque cellule, et non plus par ligne ou par colonne; ce qui allonge encore le temps d'éxécution.
Dans le code suivant, j'aimerais donc par exemple que le code RGB ne soit pas fixe comme ici:
mais bien qu'il varie selon le chantier, donc selon la ligne dans laquelle on se trouve. Par exemple comme ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 'Définit la couleur de fond de la cellule lorsque les conditions sont respectées With .FormatConditions(1) .Interior.Color = RGB(190, 0, 190) 'changer de couleur par chantier End With
Quelqu'un a une idée pour améliorer les performances de cette procédure (même si elle n'est sensée être exécutée qu'une seule fois par mois) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 'Définit la couleur de fond de la cellule lorsque les conditions sont respectées With .FormatConditions(1) .Interior.Color = RGB(10*NoDuChantier, 0, 10*NoDuChantier) 'changer de couleur par chantier End With
Voici le code complet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Sub MFCparColonne() Const ColonneDebutDate As Integer = 6 'Variable qui devra être déclarée publiquement, dans tout le projet Const LigneDate As Integer = 3 Dim FormuleConditionnelle As String Dim PlageChantier As Range Dim ContenuCelluleDate As String Dim DateAComparer As Long Dim i As Integer Dim NbreDeChantiers As Integer Dim NoLigne As Integer NbreDeChantiers = Worksheets("Chantiers").Range("G1").Value For i = ColonneDebutDate To (ColonneDebutDate + 30) 'Remplacer 30 par le nombre de jours du mois -1 (moins 1) Set PlageChantier = Range(Cells(5, i), Cells(NbreDeChantiers * 14 + 5, i)) 'De F5 à Fxxx où xxx = la dernière ligne de chantier ContenuCelluleDate = Cells(LigneDate, i).Value DateAComparer = DateValue(ContenuCelluleDate) With PlageChantier 'Supprime les MFC existantes .FormatConditions.Delete 'Ajoute la condition d'avoir au moins 1 ouvrier présent .FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="1" 'Ajoute une condition permettant de repérer les samedis et dimanches FormuleConditionnelle = "=ou(joursem(" & DateAComparer & ";2)=6;joursem(" & DateAComparer & ";2)=7)" .FormatConditions.Add Type:=xlExpression, Formula1:=FormuleConditionnelle 'Définit la couleur de fond de la cellule lorsque les conditions sont respectées With .FormatConditions(1) .Interior.Color = RGB(190, 0, 190) 'changer de couleur par chantier End With With .FormatConditions(2) .Interior.Color = RGB(240, 240, 240) 'grise les samedis et dimanches End With End With Next i End Sub
Partager