Planning automatisés avc changements d'horaires
Bonjour à toutes & à tous,
voici quelque temps, j'avais déjà posté mon planning Excel...
Il a un peu évolué depuis, pour rappel:
c'est un Planning à la semaine.
C'est un planning pour les ouvriers d'un garage, il y a 4 équipes: 3 équipes à 3 postes (matin - après midi - nuit) & 1 équipe à 2 postes (matin - après midi), chaque ouvrier à un cycle qui change selon le n° de semaine choisi.
J'aimerais que quand je change le n° de semaine, les travailleurs changent de poste automatiquement selon le cycle qui leurs est attribué...
Mon problème est que tout le personnel ne s'affiche pas dans les colonnes et qu'il y a toujours des cellules vides à l'affichage, J'aimerais que tout les noms se suivent pour garder de la place...
Mon classeur est composé de 6 feuilles:
- La feuille C qui est mon calendrier
- La feuille BD dans laquelle je mets les noms du personnel (elle me sert de base)
- La feuille CYCLE GARAGE dans laquelle un cycle est attribué à chaque ouvrier
- Les feuilles CONGÉS où j'encode les infos qui seront retransmises dans le planning (Un congé, maladie,...)
- La feuille PLANNING, c'est la feuille qui va être alimentée grâce aux différentes infos que j'encoderais dans les feuilles CONGÉS et qui est la feuille que j'imprimerais pour l'affichage.
Je vous remercie d'avance pour votre aide.
Christopher
Bonsoir
Remplaces la macro de la feuille "Planning" par celle-ci
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lg As Long
Dim I As Integer
Dim Poste As Integer
Dim Ligne
' Se baser sur la cellule AL49
If Not Intersect(Range("AL49"), Target) Is Nothing And Target.Count = 1 Then
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
' Effacer les 3 zones d'inscription
Range("A48:A60,M48:M60,Y48:Y60") = ""
' Inscrire le numéro de la 1ère ligne pour les équipes
Ligne = Array(0, 48, 48, 48)
' Calcul du quantième de l"année de la date en F47 + le décalage dans la page GARAGE CYCLE
Lg = Range("F47") - DateSerial(Year(Range("F47")), 1, 1) + 2
With Sheets("CYCLE GARAGE")
For I = 3 To 31
Poste = Val(.Cells(Lg, I))
If Poste > 0 And Poste < 4 Then
If Trim(.Cells(1, I)) <> "" Then
Cells(Ligne(Poste), 1 + ((Poste - 1) * 12)) = .Cells(1, I)
Ligne(Poste) = Ligne(Poste) + 1
End If
End If
Next I
Application.EnableEvents = True
End With
End If
End Submerci pour l'aide "express" que vous m'avez apporté.
Christopher