Transfert mise en forme des cellules colorées d'une feuille vers l'autre

Bonjour,

Je vous prie de m'aider sur un sujet bloquant pour moi. Je ne connais pas bien les macros et votre aide sera précieuse pour moi.

Je vous expose la problématique. Dans le même classeur Excel, j'ai 2 feuilles: 'Planning' et 'Absences'. Dans 'Absences', j'ai des cases colorées. Actuellement, manuellement, on copie le contenu et la couleur des cases 'Absences' et on colle dans les cases correspondantes dans 'Planning'. L'idée c'est de ne plus renseigner à la main les absences sur le planning mais de le faire via la macro. J'ai besoin d'une macro qui identifierait sur la feuille 'Planning' les cases qui sont colorées sur 'Absences', et qui effacerait le contenu des cases concernées sur 'Planning' en récupérant le contenu et le couleur des cases 'Absence'.

L'ordre dans la liste des noms n'est pas le même, ainsi que le calendrier (pas de weekends sur la feuille Planning contrairement à la feuille Absence).

Je mets un exemple ci-joint.

Merci par avance pour vos retours.

10forum1.xlsx (10.64 Ko)

Salut Chevalier,

une piste d'un commencement de quelque chose d'original...
Les changements de couleur n'étant pas détectés comme événement par VBA, un clic dans une cellule-horaire dans 'Absences' déclenche un compte-à-rebours de 15" avant une MàJ de 'Planning'.
La date de cette cellule (ou de ces cellules si tu es rapide) s'inscrit en [A1].

Public Sub Coloration()
'
Dim sWkA As Worksheet, tSplit, rCel As Range, iColA%, iColP%
'
On Error Resume Next
Application.ScreenUpdating = False
Set sWkA = Worksheets("Absences")
'
tSplit = Split(sWkA.[A1], "/")
'
With Worksheets("Planning")
    For x = 0 To UBound(tSplit) - 1
        iColA = sWkA.Rows(1).Find(what:=CDate(tSplit(x)), lookat:=xlWhole, LookIn:=xlFormulas, searchdirection:=xlNext).Column
        iColP = .Rows(2).Find(what:=CDate(tSplit(x)), lookat:=xlWhole, LookIn:=xlFormulas, searchdirection:=xlNext).Column
        For y = 2 To sWkA.Range("A" & Rows.Count).End(xlUp).Row
            If sWkA.Cells(y, iColA).Interior.Color <> RGB(255, 255, 255) Then _
                Set rCel = .Columns(2).Find(what:=sWkA.Range("A" & y).Value, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext): _
                If Not rCel Is Nothing Then _
                    .Cells(rCel.Row, iColP) = sWkA.Cells(y, iColA): _
                    .Cells(rCel.Row, iColP).Interior.Color = sWkA.Cells(y, iColA).Interior.Color
        Next
    Next
    sWkA.[A1] = ""
    sWkA.Columns.AutoFit
    sWkA.[A1].Select
End With
'
Application.ScreenUpdating = True
'
End Sub
2chevalier.xlsm (21.45 Ko)


A+

Bonjour curulis57,

Ca a l'air d'être top ce que tu as fait. Merci pour ton retour rapide et efficace.

Par contre, vue que je suis loin d'être à ton niveau, je ne comprends pas tout:)

Je vois les dates s'afficher en A1 mais après le planning ne se met pas à jour...tu peux me guider un peu plus, stp?

Merci par avance.

Salut Chevalier,

ici, ça fonctionne très bien !
Tu cliques sur les cellules-horaire en 'Absences' mais... les couleurs sont-elles modifiées ? Si elles restent blanches, il ne se passera forcément rien...
Cela dit, pourquoi ne fais-tu pas cette modification directement dans 'Planning' ??


A+

Merci pour ton retour.

En fait, le fichier Absence est extrait directement depuis un logiciel. Il contient déjà toutes les couleurs. Dans une vrai extraction nous avons 80 lignes avec Nom Prenom sur 22 colonnes environ qui correspondent aux jours ouvrés du mois. Donc, le fichier Absence est volumineux. Et l'objectif c'est de propager les mêmes couleurs de la feuille Absence vers la feuille Planning tout en vidant les cases pour lesquelles on change de couleur afin de fusionner les informations des absences sur le fichier planning, et en automatique…Tu peux m'aider, stp?

Salut Chevalier,

comme je saisis l'affaire, vous importez donc cette extraction dans la feuille 'Absence', j'imagine chaque jour, avec les dernières modifications et vous ne devez pas intervenir sur ces données, déjà complètes. Juste ?
Sur base de ton expérience de ces données (couleurs), y a-t-il souvent des corrections longtemps (1jour, c'est longtemps) après la date du jour ou, si tu préfères, peut-il encore y avoir des modifications de couleur pour des dates passées de plusieurs jours ?

Sur cette base et ces réponses, je propose ceci :
- l'extraction provoquant l'événement Change, la mise à jour s'effectue à ce moment... ou préfères-tu à une heure déterminée (par ex., le temps de midi (de ? à ?) ?
- la feuille 'Absence' est effacée entièrement après mise à jour de 'Planning'.

Tant qu'à faire, si nous pouvions avoir la feuille 'Planning' et une de ces fameuses extractions en bidouillant les noms, bien sûr, si nécessaire...


A+

Curulis57,

Je te remercie pour ton implication!!!

Alors, la feuille Abscence sera mise à jour une fois par semaine et effectivement on ne va plus intervenir sur les dates passées, on ne corrige plus rien. J’aurais préféré avoir un événement change provoquant la mise à jour plutôt que l heure fixe. Parfait pour effacer la feuille Abscence une fois la mise à jour réalisée. Les deux fichiers (version courte) sont déjà attachés au premier message...tu les vois?

Milles mercis

Salut Chevalier,

pour que tu puisses tester, il y a une copie de l'extraction dans la feuille 'TEST'.
Tu copies-colles l'extraction dans la feuille 'Absences' en [A1] pour démarrer la macro, laquelle se trouve dans le module VBA de 'Absences'.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim rCel As Range, iCol%, iColP%
'
On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False
'
With Worksheets("Planning")
    For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
        For iCol = 2 To Cells(1, Columns.Count).End(xlToLeft).Column
            If Cells(x, iCol).Interior.Color <> RGB(255, 255, 255) And Weekday(CDate(Cells(1, iCol)), vbMonday) < 6 Then _
                Set rCel = .Columns(2).Find(what:=Range("A" & x).Value, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext): _
                If Not rCel Is Nothing Then _
                    iColP = 0: _
                    iColP = .Rows(2).Find(what:=CDate(Cells(1, iCol)), lookat:=xlWhole, LookIn:=xlFormulas, searchdirection:=xlNext).Column: _
                    If iColP > 0 Then _
                        .Cells(rCel.Row, iColP) = Cells(x, iCol): _
                        .Cells(rCel.Row, iColP).Interior.Color = Cells(x, iCol).Interior.Color
        Next
    Next
    Cells.Delete
    .Activate
End With
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub
6chevalier.xlsm (26.10 Ko)


A+

Bonjour, je réponds un peu tard

mais comme j'ai travaillé, je te propose ma programmation

j'ai été obligé de supprimer les fusion de cellules

Curulis57,

C'est de la magie!!! Mais qu'est-ce que tu es fort! Bravo et milles mercis!!!

Salut Chevalier,

tant mieux !
Dans ces cas-là, abracadabra...


A+

Curulis57 bonjour,

J'espère que vous allez bien?

Je reviens vers vous suite à un petit soucis avec le sujet sur lequel vous m'avez déjà beaucoup aidé.

Le fichier des absences (ci-joint le fichier forumextractionrh) que j'ai reçu aujourd'hui a un format légèrement différent (c'est ce format qui sera utilisé pour le futur)de celui que je vous ai donnée dans l'exemple (ci-joint planning-absence.xlsm). Et du coup, la mise à jour ne se fait pas. Est-ce que je peux vous demander de m'aider, s'il-vous-plaît?

Mon problème est que dans le fichier "forumextractionrh" les abscences dans la journée sont reparties en 2 parties (matin et après-midi). Dès fois une personne peut-être absente une matinée, mais l'après-midi elle travaille et on ne doit pas effacée sa journée en la coloriant mais en ajoutant juste le créneau 15h-17h. Si la personne est absente que l'après-midi, il faut lui affecter le créneau du 09h-11h.

Donc, 2 problèmes on va dire:

dans le fichier Forumextractionrh nous avons la notion des mi-journée que nous ne souhaitions pas intégrer dans le planning, et dans le fichier Forumextractionrh les noms et le prénoms sont renseignés en deux colonnes distinctes…

Merci par avance pour votre aide...

0planningforum.xlsx (14.89 Ko)
0macro.txt (4.32 Ko)

Salut Chevalier,

je regarde ça dès que possible !


A+

3planningforum.xlsx (14.89 Ko)
3macro.txt (4.32 Ko)

Merci

Bonsoir @curulis57…est-ce que tu penses pouvoir m’aider?

Merci par avance

Salut Chevalier,

déso pour le délai : un fichier perso qui prend du temps...

Même si je saisis le souci, ton nouveau format ne s'accompagne pas d'un exemple de planning avec le résultat souhaité en fonction des diverses présences (matin ou après-midi).
Pige pas trop comment tu te représentes cela concrètement.
Donc, comme tu l'utilises maintenant depuis quelques jours, tu peux certainement m'envoyer un fichier illustrant la nouvelle donne !?


A+

Bonjour Curulis57,

Merci pour votre retour.

Alors, je souhaiterais que la feuille planning dans le fichier Proposition Planning reste telle comme elle l'est. Par contre, je souhaiterais remplacer le contenu de la feuille Absence (par celui qui est dans l'absence.zip ci-joint)

Dans la nouvelle feuille absences nous avons à gérer une nouvelle notion : matin et après-midi. Une personne peut être absente le matin, alors elle devrait avoir dans la feuille Planning un créneau de travail pour l'après-midi 14h-16h, et pareil si elle absente l'après-midi, elle devrait avoir un créneau le matin 09h-11h.

Je voudrais que le macro procède de la façon suivante :

-> si dans la feuille Absences, pour le même jour, le couleur la Case 1 (matin)=le couleur de la Case 2 (après-midi) = couleur rose (télétravail) ou rose avec les barres (télétravail en attentes de validation) ou blanc (présence), alors, rien mettre à jour sur la feuille Planning ,

-> si dans la feuille Absences, pour le même jour, le couleur la Case 1 (matin)=le couleur de la Case 2 (après-midi)= le couleur différent du couleur rose (télétravail) ou rose avec les barres (télétravail en attentes de validation) ou blanc (présence), alors colorer du couleur de l'absence la case du jour concerné dans la feuille Planning, tout en effaçant le créneau déjà renseigné dans la case (à l'identique de ce que vous avez fait)

-> si dans la feuille Absences le couleur la Case 1 (matin) n'est pas le même que le couleur de la Case 2 (après-midi) :

----> si c'est la case 1 (matin) est rose (télétravail), rose avec les barres (télétravail en attentes de validation), blanc (présence), alors dans la feuille Planning, mettre 09h-11h en gras à la place du créneau déjà renseigné pour le jour en question,

----> si c'est la case 2 (après-midi) qui est rose (télétravail), rose avec les barres (télétravail en attentes de validation), blanc (présence), alors dans la feuille Planning, mettre 14h-16h en gras à la place du créneau déjà renseigné pour le jour en question.

Les couleurs concernés sont en PJ, ainsi que les deux fichiers.

Merci beaucoup pour votre aide, j'ai bcp travaillé sur ce sujet car il est très important pour moi, mais je n'arrive pas. J'espère que vous allez y arriver et merci encore.

7abscences.zip (4.11 Ko)
couleurs

Salut Chevalier,

premier jet de la nouvelle version.
- il me faut une année en [A1] : si pas présente dans l'extraction, ce sera l'année en cours d'office !
- vérifier la correspondance entre l'orthographe des noms des mois utilisés dans l'extraction et celle du code (accents ou non) !
- le "P" d'une absence prévisionnelle et/ou "A" d'une demande d'annulation doivent-ils être affichés dans le planning ?
- pas de "Absence en attente" ou "Demande d'annulation" dans ton exemple. Comme tu ne touches plus aux jours déjà encodés dans le planning, comment faudrait-il traiter ces couleurs et trames ? Ici, par défaut, ce sera la couleur sans la trame.

Même principe que le fichier précédent : tu colles l'extraction (ici, en feuille 'TEST' pour ... le test) en 'Absences' [A1] pour démarrer la macro.

8chevalier-v2.xlsm (39.17 Ko)


A+

Bonjour Curulis57,

C'est parfait pour moi!!!vous êtes vraiment géniale...merci!

Alors, je souhaiterais gérer le "P" d'une absence prévisionnelle/"Absence en attente" de la même façon que les autres absences.

Pour les "A" d'une demande d'annulation, je souhaiterais faire comme si elles n'étaient pas la (ne pas tenir compte du tout).

J'ai deux petites questions, si vous me permettez:

1) Il peut arriver que la même personne (avec le même nom et prénom) soit renseignée sur plusieurs lignes dans la feuille planning (au cas où elle a une deuxième ligne pour le créneau supplémentaire en plus de la ligne du créneau principal). Actuellement, les couleurs des absences ne se mettent que sur la 1ère ligne...c'est possible que le macro vérifie si la personne a d'autres lignes dans la feuille Planning, puis mettre à jour?

2) Dans la feuille planning, pour les cases colorées, en commentaire c'est possible d'afficher la désignation de l'absence afin de voir à quoi correspond le couleur?

Merci par avance.

Rechercher des sujets similaires à "transfert mise forme colorees feuille"