Simplifier code + problème code pour lancer macro

Bonjour le forum,

15calendrier-copie.zip (514.15 Ko)

Dans le fichier ci-joint j'ai réalisé un code pour que les jours de maintenance des machines s'affichent en rouge dans les cellules voulues dans la feuille "calendrier". Il fonctionne très bien avec mes besoins et j'aurais bien aimé savoir comment le simplifier afin d'éviter les itérations de "if". (module 4)

Egalement toujours dans cette feuille j'aimerais qu'en sélectionnant la cellule "C1": année , "C2" :ID Machine et "G2":ID personnel que mon code se lance automatiquement mais uniquement quand la personne sélectionne les 3 données des listes déroulantes dans ces cellules. Mon code se lance correctement mais fonctionne peu importe si ses 3 conditions sont remplies ce qui m'embête car j'ai comme projet de refaire un autre code pour uniquement la cellule C1: année et la cellule G2 ID personnel.

En vous remerciant à l'avance.

Bonne fin de week-end

Bonsoir,

une idée de structure avec des Select Case :

If Range("C1") = 2018 Then
    Select Case Range("C2")
        Case 1
            Select Case Range("G2")
                Case 6
                    Range("H23").Interior.Color = RGB(255, 0, 0)
                Case 7
                    Range("X28,P17").Interior.Color = RGB(255, 0, 0)
                Case 9
                    Range("J19").Interior.Color = RGB(255, 0, 0)
                Case 10
                    Range("R12").Interior.Color = RGB(255, 0, 0)
            End Select
        Case 2
            Select Case Range("G2")
                Case 4
                    Range("L23").Interior.Color = RGB(255, 0, 0)
                Case 11
                    Range("V29").Interior.Color = RGB(255, 0, 0)
            End Select
        Case 3
            Select Case Range("G2")
                Case 3
                    Range("T23").Interior.Color = RGB(255, 0, 0)
                Case 12
                    Range("N24").Interior.Color = RGB(255, 0, 0)
                Case 11
                    Range("X27").Interior.Color = RGB(255, 0, 0)
            End Select
        Case 4
            Select Case Range("G2")
                Case 9
                    Range("V10,H31").Interior.Color = RGB(255, 0, 0)
                Case 2
                    Range("X34").Interior.Color = RGB(255, 0, 0)
            End Select
        Case 5
            Select Case Range("G2")
                Case 9
                    Range("V32").Interior.Color = RGB(255, 0, 0)
                Case 4
                    Range("N22").Interior.Color = RGB(255, 0, 0)
                Case 3
                    Range("D8").Interior.Color = RGB(255, 0, 0)
            End Select
        Case 6
        ' etc...
ElseIf Range("C1") = 2019 Then
    ' etc...
End If

Pour le deuxième point il faudrait que lors d'un changement de valeur sur une cellule cela efface les données des autres afin de n'avoir qu'un sens de remplissage et de pouvoir faire un test sur ce remplissage :
Si C1 modifiée, alors C2 et G2 effacés
Si C2 modifiée, alors G2 est supprimé
Si G2 modifiée, alors la surveillance événementielle n'efface rien et recherche la donnée correspondante aux trois données. Si sur les trois données C2 = "" alors c'est la deuxième procédure qui sera lancée...

un truc comme cela, non ?

@ bientôt

LouReeD

Bonsoir @Loureed,

Un grand merci pour ce code qui fonctionne avec merveille en plus d'être plus concis que le mien.

Effectivement c'est une très bonne idée je vais essayer cela.

Encore merci et bonne soirée.

Bonsoir,

merci pour ce retour et vos remerciements !

Un code plus concis, faut voir car il y en a des lignes et une structure plus "propre" de IF aurait fait l'affaire.
C'est plus le fait de séparer les conditions qui fait que c'est plus propre, non ?

@ bientôt

LouReeD

Oui en séparant les conditions grâce à l’utilisation de « Case » est selon moi plus propre que tous mes « if » imbriqués car on s’y perd plus facilement.

cordialement,

Tom

Rechercher des sujets similaires à "simplifier code probleme lancer macro"