VBA : Tableau planning, colorer plage de cellules en fonction d'initial

Bonjour à tous,

Avant de vous expliquer plus précisément le problème j'ai tenté de le réaliser via la MFC, mais sans succès. J'ai seulement trouvé des solutions pour la coloration de lignes ou de colonnes mais pas l'association des 2. Ce qui me pousse à penser qu'il serait plus judicieux de passer par le VBA. A ce sujet je suis débutant, mais souhaite comprendre la démarche à suivre.

Explication du résultat :

Vous trouverez ci-dessous le principe de planning :

23planning.xlsm (18.63 Ko)

Dans ce tableau nous avons par groupe de 4 lignes, un "Poseur" et en colonnes les jours de la semaine, CT (initial conducteur travaux), et une colonne colorée pour indiquer les poseurs qui vont travailler en équipe durant la semaine.

Je souhaiterais qu'en inscrivant par exemple les initiales "XY" en C9, la plage de cellules de B9:C12 soit de la couleur "Z". En farfouillant sur internet j'ai pu trouver quelque chose, mais qui est trop bridé (sans aucune variable - voir macro "couleur_Conduc"). Ce tableau pourra comporter jusqu'à une vingtaine de poseurs

L'idée de la macro en l'écrivant en français est que :

> Début de la macro à partir de C9

> Si cellule C9 contient initial "XY" alors B9:C12 doit être de la couleur "Z"

> La macro doit s'appliquer à partir de la cellule C9 :

* A tous les intervalles de lignes +4 (cad : ligne ; 13, 17, 21, 25,...)

* A tous les intervalles de colonnes + 3 (cad : colonne ; F, I, L et O)

Ce qui peut amener au résultat que si I13 contient initial "XY" alors H13:I16 sera de la couleur "Z"

Autres informations pour mieux comprendre la tableau :

> Les groupes "Poseur" comportent 4 lignes puisqu'il s'agit du nombre maximum de tâches qu'ils peuvent réaliser dans la journée.

> Dans une même journée il peut y avoir plusieurs tâches et plusieurs CT, je souhaite simplement pour une meilleure présentation que le premier CT attribué à la journée remplisse toute la plage de cellules du poseur (ex : B9:C12) de la même couleur.

J'espère avoir été assez clair dans mes explications, si ce n'est pas le cas n'hésitez pas à me questionner.

Je vous remercie par avance de votre aide. Pour reprécision, je cherche à comprendre le fonctionnement

Nota : possible qu'il n'y ait pas de réponse de ma part du 01/11 au 04/11

Bonne journée

Bonjour,

Je regarde à ça

Salut Pedro,

Merci pour ton intérêt si rapide

Salut Pedro,

Merci pour ton intérêt si rapide

Voilà ton code révisé :

Sub Attribuer_couleur_poseurs()

Dim Lig As Byte 'déclaration du type de données de la variable (ici "Byte" = nombre entier positif <= 255)
Dim Col As Byte

For Col = 3 To 15 Step 3 'Parcourir les colonnes 3 à 15 avec un pas de 3
    For Lig = 9 To 25 Step 4 'Parcourir les lignes 9 à 25 avec un pas de 4
        With Sheets("Feuil1") 'Tout objet commençant par "." se rattache à cette feuille
            If IsEmpty(.Cells(Lig, Col)) Then .Range(.Cells(Lig, Col - 1), .Cells(Lig + 3, Col)).Interior.ColorIndex = 0
            If .Cells(Lig, Col) = "KK" Then .Range(.Cells(Lig, Col - 1), .Cells(Lig + 3, Col)).Interior.ColorIndex = 15
            If .Cells(Lig, Col) = "CLK" Then .Range(.Cells(Lig, Col - 1), .Cells(Lig + 3, Col)).Interior.ColorIndex = 38
         End With
    Next Lig
Next Col

End Sub

Je trouve ça un peu lourd pour juste un peu de mise en forme, et il est surement possible de se débrouiller en MFC. Mais ça te donne au moins un aperçu d'une possibilité en VBA...

Super je te remercie pour cette réponse très rapide.

J'ai bien saisi comment le modifier pour l'adapter à mes besoins, mettre un appel de la macro pour modification automatique et transformer en RGB.

Par tout hasard la variable "Byte" est-elle en rapport avec l'indice de coloration RGB qui est de 255 max ?

Je passe le sujet en résolu, merci encore

Par tout hasard la variable "Byte" est-elle en rapport avec l'indice de coloration RGB qui est de 255 max ?

Le rapport est indirect... Il s'agit juste d'un type de données économe en mémoire (1 octet, là où une variable non déclarée en prends >16 octets). Le RGB l'utilise, comme de nombreuses autres instructions (par exemple la table ASCII, qui s'arrête également à 255).

Ok c'est bien saisi pour le type de données économe en mémoire.

Moins pour la table ASCII.

Je vais me pencher sur la lecture du VBA pour bien comprendre les bases.

La table ASCII n'a pas de rapport avec ton sujet, c'est juste qu'elle s'arrête aussi à 255. Sous Excel, c'est la fonction =CAR(n°) ou son opposé =CODE(caractère) qui te renvoie le n° du caractère dans cette table.

J'aurais juste un petit complément à vous demander de nouveau.

Comment faire pour que la macro puisse s'appliquer à toutes les feuilles qui commenceront par la lettre "S" ?

Merci d'avance

J'aurais juste un petit complément à vous demander de nouveau.

Comment faire pour que la macro puisse s'appliquer à toutes les feuilles qui commenceront par la lettre "S" ?

Merci d'avance

Sub Attribuer_couleur_poseurs()

Dim Lig As Byte 'déclaration du type de données de la variable (ici "Byte" = nombre entier positif <= 255)
Dim Col As Byte, F As Byte

For F = 1 To Sheets.Count
    With Sheets(F) 'Tout objet commençant par "." se rattache à cette feuille
        If .Name Like "S*" Then
            For Col = 3 To 15 Step 3 'Parcourir les colonnes 3 à 15 avec un pas de 3
                For Lig = 9 To 25 Step 4 'Parcourir les lignes 9 à 25 avec un pas de 4
                    If IsEmpty(.Cells(Lig, Col)) Then .Range(.Cells(Lig, Col - 1), .Cells(Lig + 3, Col)).Interior.ColorIndex = 0
                    If .Cells(Lig, Col) = "KK" Then .Range(.Cells(Lig, Col - 1), .Cells(Lig + 3, Col)).Interior.ColorIndex = 15
                    If .Cells(Lig, Col) = "CLK" Then .Range(.Cells(Lig, Col - 1), .Cells(Lig + 3, Col)).Interior.ColorIndex = 38
                Next Lig
            Next Col
        End If
    End With
Next F

End Sub

Impeccable ça marche au poil, merci encore

Bonjour à tous,

Je me permets de relancer mon sujet, puisqu'après utilisation et modification du codage de Pedro pour mon besoin, fonctionne correctement.

J'ai pu intégrer dans la Feuil2 de l'explorateur VBA un code pour appeler la macro "Couleur" après modification de certaines cellules.

Puisque ce tableau est amené à avoir les 52 semaines de l'année, le nombre de feuilles devient conséquent et les lenteurs à l'exécution des modifications de cellules apparaissent.

Y a t il une solution pour éviter les ralentissements sans suppression de l'appel de la macro ?

Je me doute qu'après les modifications que j'ai pu apporter, il doit y avoir quelques aberrations

Merci d'avance pour vos retours

Problème résolu, j'ai simplement exécuté la macro sur la feuille active

Rechercher des sujets similaires à "vba tableau planning colorer plage fonction initial"