Erreur VBA sur un Worksheet_Change
Bonjour,
J'ai un petit code VBA pour colorier quelques cellules lorsqu'un mot spécifique est ajouté sur la ligne 4.
Tous fonctionne bien sauf... que si je supprime une colonne, il m'indique un message d'erreur.
J'ai remarqué que si la cellule 4x (x étant une colonne entre B et Z) + une ou plusieurs autres cellules, il m'indique cette erreur.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B4:Z4")) Is Nothing Then
If Target = "Gelé" Then
Range(Cells(3, Target.Column), Cells(17, Target.Column)).Interior.Color = RGB(166, 166, 166)
Cells(10, ActiveCell.Column).Interior.Color = RGB(0, 0, 0)
ElseIf Target = "A clôturer" Then
Range(Cells(3, Target.Column), Cells(17, Target.Column)).Interior.Color = RGB(204, 102, 255)
Cells(10, ActiveCell.Column).Interior.Color = RGB(0, 0, 0)
ElseIf Target = "En cours" Then
Range(Cells(3, Target.Column), Cells(17, Target.Column)).Interior.Color = RGB(204, 255, 204)
Cells(10, ActiveCell.Column).Interior.Color = RGB(0, 0, 0)
ElseIf Target = "Att client" Then
Range(Cells(3, Target.Column), Cells(17, Target.Column)).Interior.Color = RGB(255, 204, 153)
Cells(10, ActiveCell.Column).Interior.Color = RGB(0, 0, 0)
ElseIf Target = "Lancement" Then
Range(Cells(3, Target.Column), Cells(17, Target.Column)).Interior.Color = RGB(255, 255, 204)
Cells(10, ActiveCell.Column).Interior.Color = RGB(0, 0, 0)
Else
Range(Cells(3, Target.Column), Cells(17, Target.Column)).Interior.Color = RGB(255, 255, 255)
Cells(10, ActiveCell.Column).Interior.Color = RGB(0, 0, 0)
End If
End If
Application.CutCopyMode = False
End SubJ'ai beau chercher, je n'arrive pas à voir où est l'erreur.
Pouvez vous m'aider?
Merci.
Bonjour,
Une question : Tu enclenche une macro par l'évènement modification et tu supprimes les colonnes qui est une modification. Tu trouves ça logique ?
Bonjour,
Merci pour ta réponse.
Je mets en pièce jointe le fichier, même s'il y a beaucoup de code qui ne sert à rien pour mon problème.
Mon fichier est assez dynamique, les colonnes se déplacent si l'on double clic sur une case de la ligne 1, c'est pour ça que je reçois régulièrement le message d'erreur.
En faite, j'aimerai faire comme une MFC mais en VBA. Car j'ai remarqué qu'en déplaçant/supprimant les colonnes, mes mises en forme "se coupent", et je me retrouve avec des règles multipliés encore et encore.
Je me suis replié sur la fonction Worksheet_Change que je maitrise que très moyennement.
Bref, je suis assez nouveau en VBA,, j'aimerai savoir s'il est possible de colorier certaines cases uniquement lorsque qu'un certain type de mot est ajouté?
Sinon, je passerai en MFC
Bonjour,
Quelque chose d'un peu plus convivial !
Private Sub Worksheet_Change(ByVal Target As Range) 'permetre de changer les couleurs automatiquements
Dim k%, clr&
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B4:Z4")) Is Nothing Then
Select Case Target
Case "Gelé": clr = RGB(166, 166, 166)
Case "A clôturer": clr = RGB(204, 102, 255)
Case "En cours": clr = RGB(204, 255, 204)
Case "Att client", "Att Orange": clr = RGB(255, 204, 153)
Case "Lancement": clr = RGB(255, 255, 204)
Case Else: clr = xlNone
End Select
k = Target.Column
Me.Range(Cells(3, k), Cells(17, k)).Interior.Color = clr
Me.Cells(10, k).Interior.Color = vbBlack
End If
End SubNB- La première ligne (exécutable) est ce qui doit régler le problème posé initialement.
Cordialement.
Juste .... parfait!
Grand merci pour ton aide!
Et en effet ,ça a "plus de gueule"
Deux petites questions pour ne pas trop paraitre bête
Dim k%, clr&A quoi sert le "k%"
Je vois bien en bas que le k est le numéro de la colonne, mais que fait-il au début?
Me.Range(Cells(3, k), Cells(17, k)).Interior.Color = clr
Me.Cells(10, k).Interior.Color = vbBlackQue signifie le "Me."?
Dim k% = Dim k As Integer
Dim clr& = Dim clr As Long [NB- les couleurs sont des valeurs de type Long]
% et & sont ce que l'on nomme des caractères de déclaration de type.
Il y en a quelques autres : $ (As String), ! (As Single), # (As Double), @ (As Currency).
Cela permet de reccourcir quelque peu les déclarations de variables.
Me n'est utilisable que dans un module d'objet (Feuille, Classeur, Userform) et il désigne l'objet auquel le module est dédié.
Me est dans ce module la feuille concernée.
Cordialement.
Merci encore une fois pour ces précisions claires et précises
Je clôture ce post.