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 Sub

Merci 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 Sub

Merci 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 !

Rechercher des sujets similaires à "conseil macro creation planning"