Conseil macro pour la création d'un planning
Bonjour à tous,
Dans le cadre de la création d’un planning sur Excel pour le travail, j’ai besoin d’une macro qui permet de changer une zone de couleur en fonction d’un champ.
Mes connaissances en VBA étant très limitées j’ai réussi à bidouiller une macro mais malheureusement ça ne fait pas totalement mon bonheur.
Ce champ est limité à 10 possibilités proposées sous forme d’un menu déroulant.
J’ai crée une macro qui permet de faire ça (voir ci-dessous)
Le principe est simple :
La cellule I5 propose les champs suivants :
-disponible, intervention confirmée, intervention à confirmer, atelier, formation, congés, jour férié, intervention étranger confirmée, intervention étranger à confirmer, divers.
Une fois le champ sélectionné, j’appuie sur un bouton lié à la macro qui colore ma sélection « I2 à I8 ». Chaque champ est lié à une couleur.
En théorie ça fonctionne, mais cette méthode ne peut être appliquée à grande échelle. En effet ça nécessiterait de faire une macro par personne par semaine soit plus de 500.
Est-il possible de réutiliser ma macro et de « l’automatiser » pour n’en faire qu’une par personne ?
J’ai juste besoin de changer à chaque fois le champ et la plage correspondante et j’aimerais éviter de faire la même opération pour chaque jour.
Vous trouverez ici le fichier Excel que j’utilise :
ça sera probablement beaucoup plus parlant de jeter un coup d’œil au fichier.
Juste en dessous vous pouvez voir en exemple ma macro utilisée :
Sub couleurs_s1()
' couleurs_s1 Macro
'Dim Ref As Range
Set Ref = ActiveCell
If Range("I5") = "congés" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "formation" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "atelier" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "intervention confirmée" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "intervention à confirmer" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "disponible" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "jour férié" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "intervention étranger à confirmer" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.79981688894314
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "intervention étranger confirmée" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
End If
If Range("I5") = "divers" Then
Range("I2:I8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
Ref.Select
End SubMerci beaucoup pour votre aide !
Nicolas
Bonjour
Une solution mais qui peut être perfectible pour la zone "contrôlée"
Actuellement c'est n'importe quelle cellule dans la feuille
Code à coller dans le code la feuille
Clic droit sur l'onglet de la feuille ---> Visualiser le code
Ensuite tu y colles cette macro
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Select Case Target
Case "disponible"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Case "intervention confirmée"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Case "intervention à confirmer"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Case "atelier"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Case "formation"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Case "congés"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
Case "jour férié"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
Case "intervention étranger confirmée"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
Case "intervention étranger à confirmer"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.79981688894314
.PatternTintAndShade = 0
End With
Case "divers"
With Target.Offset(-3, 0).Resize(7, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Select
End SubMerci pour cette réponse.
Que dois-je faire une fois le code copié dans VBA ?
En effet dans ma boite de macro ça ne me reconnait aucune macro une fois que j'ai copié ton code.
Bonjour
Comme c'est une macro évènementielle, elle ne sera opérationnelle que lorsque tu modifieras ta liste de validation
Banzai64 a écrit :Bonjour
Comme c'est une macro évènementielle, elle ne sera opérationnelle que lorsque tu modifieras ta liste de validation
Désolé pour ma connaissance légère en VBA.
Dans ma macro de base j'utilisais une macro classique que je lançais avec un bouton.
De quelle liste de validation parles-tu ? Que dois-je faire précisément ?
Merci !
Bonjour
Nico67800 a écrit :Le principe est simple :
La cellule I5 propose les champs suivants :
-disponible, intervention confirmée, intervention à confirmer, atelier, formation, congés, jour férié, intervention étranger confirmée, intervention étranger à confirmer, divers.
Une fois le champ sélectionné, j’appuie sur un bouton lié à la macro qui colore ma sélection « I2 à I8 ». Chaque champ est lié à une couleur.
Moi j'ai modifié cette partie
Une fois le champ sélectionné,
j’appuie sur un bouton lié à la macro quicolore ma sélection « I2 à I8 »
Lorsque tu modifies cette cellule la zone correspondante change de couleur, et cela pour n'importe quelle cellule qui à cette liste
Oui merci j'ai compris ça fonctionne parfaitement !
Une dernière question :
Si je souhaite ajouter davantage de cellules sur mon planning, est ce que la macro fonctionnera pour les nouvelles cellules concernées ? En gros est-ce que la macro s'applique à tous les champs de la feuille ?
Bonjour
Nico67800 a écrit :Si je souhaite ajouter davantage de cellules sur mon planning, est ce que la macro fonctionnera pour les nouvelles cellules concernées ?
Réponse déjà donnée
Banzai64 a écrit :Actuellement c'est n'importe quelle cellule dans la feuille
Merci beaucoup pour toutes ses réponses !