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 Sub

J'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 Sub

NB- 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 = vbBlack

Que 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.

Rechercher des sujets similaires à "erreur vba worksheet change"