Macro palliative aux MFC sous Excel 2003 Worksheet_Change

  • Initiateur de la discussion Initiateur de la discussion zadwarf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

zadwarf

XLDnaute Nouveau
Bonjour à tous,

J'ai un problème, j'ère depuis près de deux jours sur les forums, et là, je sèche...

Je voudrais faire une sorte de MFC via macro qui se rafraichirait a chaque changement de contenu de cellule.

Je m'explique : j'ai cinq statut de 0 à 4 qui sont affichés par une fonction et je dois, en fonction de ces statuts, coloriser les cellules de manière suivante, a cahque changement de statut la cellule doit changer de couleur :

4 RGB(128,0,0)
3 RGB(255,204,0)
2 RGB(150,150,150)
1 RGB(0,128,0)
0 (vide) hachuré

J'avais trouvé le bout de code suivant :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns(14)) Is Nothing Then
        If (Target.Value = 1) Then
        Target.Interior.Color = RGB(0, 128, 0)
        ElseIf (Target.Value = 2) Then
        Target.Interior.Color = RGB(150, 150, 150)
        ElseIf (Target.Value = 3) Then
        Target.Interior.Color = RGB(250, 204, 0)
        ElseIf (Target.Value = 4) Then
        Target.Interior.Color = RGB(128, 0, 0)
        ElseIf (Target.Value = 0) Then
        Target.Interior.Pattern = xlPatternLightUp
        End If
End If

End Sub

Mais je sèche...

Merci D'avance.

P.S. je remplirais ma présentation dès ce soir
 

Pièces jointes

Re : Macro palliative aux MFC sous Excel 2003 Worksheet_Change

Bonjour,

Je ne maîtrise pas très bien l'évenement Worksheet_Change et ses arguments mais d'apèrs moi, tu ne devrais pas te servir de Target. En effet, Target est à utiliser dans le cadre d'une modification manuelle de ta feuille, or tu sembles vouloir observer les modifications d'un résultat de formule.

Pourquoi ne faire procéder comme ceci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    i = 1
    While Cells(i, 14) <> ""
        Select Case Cells(i, 14)
        Case 1
            MsgBox "yop"
            Cells(i, 14).Interior.Color = RGB(0, 128, 0)
        Case 2
            Cells(i, 14).Interior.Color = RGB(150, 150, 150)
        Case 3
            Cells(i, 14).Interior.Color = RGB(250, 204, 0)
        Case 4
            Cells(i, 14).Interior.Color = RGB(128, 0, 0)
        Case 0
            Cells(i, 14).Interior.Pattern = xlPatternLightUp
        End Select
        i = i + 1
    Wend
End Sub

Edit : Je n'ai pas pu ouvrir ton fichier exemple car je n'ai qu'Office XP
 
Re : Macro palliative aux MFC sous Excel 2003 Worksheet_Change

Bonjour Dadwarf, bonjour le forum,

Ton code actuellement fonctionne parfaitement mais uniquement sur la colonne 14 (N) à cause de cette ligne :
Code:
If Not Intersect(Target, Columns(14)) Is Nothing Then
qui signifie : Si l'intersection de la cellule modifiée (Target) et de la colonne 14 n'est pas vide...

En ouvrant ton fichier il est difficile de savoir où tu veux en limiter l'action... Tu pourrais faire comme ça :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range 'déclare la variable pl (PLage)
 
Set pl = Sheets("Sheet1").Range("ta_plage") 'définit la plage pl (tu adapteras...)
If Not Intersect(Target, pl) Is Nothing Then
'... reste du code
End Sub

Ou, si tu veux que ça marche partout, tu supprimes le If... End If.

[Édition]
Bonjour Geotrouvepas on s'est croisé...
 
Dernière édition:
Re : Macro palliative aux MFC sous Excel 2003 Worksheet_Change

Merci à vous pour vos réponses ;-)

Je viens de me rendre compte que j'ai filé un exemple foireux... -_-'

J'ai effectivement besoin que la macro s'applique sur la colonne N, 14 donc...

J'espere que le fichier joint sera plus parlant.
 

Pièces jointes

Re : Macro palliative aux MFC sous Excel 2003 Worksheet_Change

Yep

Je viens d'essayer mais quand je change le numéro indirectement via la liste déroulante qu'il y a en colonne M, ca change le numéro mais ne colore pas la cellule.

Je suis complètement dépassé, jusqu'ici j'ai réussi à bricoler chaque chose mais là ca me dépasse...
 
Re : Macro palliative aux MFC sous Excel 2003 Worksheet_Change

Bonjour à tous,

Si les résultats de ta colonne 14 sont les résultats de calculs, le soucis est dû que l'évènement Change ne se déclenche qu'en saisissant des données dans la cellule, pas sur recalcul d'une formule
Il faudrait passer par l'évènement Worksheet_Calculate, et parcourir toutes les cellules de la colonne 14 pour leur attribuer la couleur appropriée
 
Re : Macro palliative aux MFC sous Excel 2003 Worksheet_Change

Re,
Salut Tototiti,

Ton fichier de démo est verrouillé donc impossible de test ma macro mais avec ça, ça devrait marcher :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    ThisWorkbook.Sheets("Roadmap").Unprotect "TonMotdepasse"
    For i = 13 To 67
        Select Case Cells(i, 14)
        Case 1
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Color = RGB(0, 128, 0)
        Case 2
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Color = RGB(150, 150, 150)
        Case 3
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Color = RGB(250, 204, 0)
        Case 4
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Color = RGB(128, 0, 0)
        Case 0
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Pattern = xlPatternLightUp
        End Select
        i = i + 1
    Next
    ThisWorkbook.Sheets("Roadmap").Protect "TonMotdepasse"
    Application.ScreenUpdating = True
End Sub

A placer impérativement dans "Feuil2(Roadmap)" et non pas dans Thisworkbook comme tu l'avais fait. Et n'oublie pas de placer ton mot de passe dans le code.

Bonne fin de journée à tous.
 
@ GeoTrouvePas : Merci tu m'otes une sérieuse épine du pied j'ai modifié ton bout de code comme suit en le mettant dans la feuille qui va bien :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    For i = 11 To 67
        Select Case Cells(i, 14)
        Case 1
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Pattern = none
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Color = RGB(0, 128, 0)
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Font.Color = RGB(0, 0, 0)
        Case 2
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Pattern = none
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Color = RGB(150, 150, 150)
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Font.Color = RGB(255, 255, 255)
        Case 3
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Pattern = none
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Color = RGB(250, 204, 0)
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Font.Color = RGB(0, 0, 0)
        Case 4
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Pattern = none
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Color = RGB(128, 0, 0)
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Font.Color = RGB(255, 255, 255)
        Case 0
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Pattern = none
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Pattern = xlPatternLightUp
        Case ""
            ThisWorkbook.Sheets("Roadmap").Cells(i, 14).Interior.Pattern = none
        End Select
    Next i

End Sub

Et ca marche du feu de dieu ! 😎

Un trés grand merci à vous tous, j'espère que ca servira à d'autres personnes
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
905
Réponses
1
Affichages
845
Réponses
0
Affichages
1 K
Retour