Transformer un planning en listing

Bonjour à tous,

Je viens solliciter votre aide pour une macro permettant de transposer (1) un planning (sous forme de tableau) en listing & (2) selon un code, attribuer des horaires de début, fin et un temps de pause.

Etant débutant dans VBA, j'ai parcouru les différents sujets sur le forum et trouvé quelques pistes en téléchargeant des solutions proposées à d'autres membres sur des problématiques qui s'en rapprochaient et en modifiant et testant le code proposé mais sans obtenir quelque chose de satisfaisant.

Voici ma problématique détaillée (cfr. le fichier en PJ pour une meilleure visualisation) :

Je pars d'un planning (Feuille "Planning") contenant le Nr de la personne (A), son nom (B), un lieu (C), Un code pour son Shift (F, H, J, L, N, P, R) et son rôle (G, I, K, M, O, Q, S) selon un jour (ligne 2) ou une date (ligne 3).

Je dois transposer ce planning dans un listing (Feuille "listing) pour le faire correspondre aux différentes colonnes qui y sont présentes.
Les colonnes D ("Start Hours"); E ("End Hours"); F ("Pause") étant la résultante du code du Shift (Colone H) et du Rôle (Colone "A) :

Exemple pour la ligne 3 de la feuille "Listing" :

Le shift 3 est généralement de 10h à 14h avec 30 min de pause, peu importe le jour de la semaine
Toutefois, quand le shift 3 est presté dans le Rôle "Magasin", le shift du lundi est modifié en 10h à 14h30. Les autres jours conservent l'horaire 10h - 14h

Voici mon état d'avancement dans le code VBA :

Sub Test_plan()

i = 2
Nom = 0
Shift = 0
Role = ""

With Sheets("Planning")

For ligne = 5 To .Range("A5").End(xlDown).Row
Nom = .Cells(ligne, 2).Value

If Role <> .Cells(ligne, 7).Value Then
Role = .Cells(ligne, 7).Value
Dag = .Cells(3, 6).Value
Bureau = .Cells(ligne, 3).Value
Shift = .Cells(ligne, 6).Value

i = i + 1
Sheets("Listing").Cells(i, 1) = Role
Sheets("Listing").Cells(i, 2) = Nom
Sheets("Listing").Cells(i, 3) = Dag
Sheets("Listing").Cells(i, 7) = Bureau
Sheets("Listing").Cells(i, 8) = Shift

End If

Next ligne

End With

End Sub

Le code VBA que j'ai actuellement inscrit les personnes dans ce listing (sans tenir compte des colonnes D, E, F. Je ne suis pas encore arrivé jusque-là) pour la première date (Celle du 31-05).

Toutefois, j'ai déjà une problématique dans cette première partie :

La ligne 9 de la feuille "Planning" se retrouve dans la feuille listing ("Dylan" -> Ligne 7) tandis que les lignes 10-11-12 non alors que aucune de ces 4 lignes n'a quelque chose d'indiqué dans la colonne "G" : Rôle.

Le but ici étant que si rien n'est présent dans la colonne "G" alors le planning ne doit pas s'inscrire dans la feuille "listing" pour le jour en question.


Dans un deuxième temps
, une fois l'ensemble des lignes parcourues pour le rôle inscrit en colonne "G" de la feuille "Planning", j'aimerais appliquer le même procédé à la colonne G + 2 (donc "I") et ainsi de suite jusqu'à la colonne "S"

Et enfin,

Selon le rôle et le code du shift, appliquer dans la feuille "Listing" un horaire de début, de fin et temps de pause selon le jour identifié.
Exemple pour 2 Rôles dans la feuille "Correspondance Code Shift" (La disposition de ce tableau peut être modifiée si nécessaire).

Un grand merci d'avance pour votre aide, vos conseils et explications.

En espérant que mes explications soient claires, je reste à l'affut de vos réponses et besoins de précision si nécessaire.

Excellente journée,

9test-planning.xlsm (21.69 Ko)
Rechercher des sujets similaires à "transformer planning listing"