Macro couleurs ne fonctionne pas !

Bonjour, je voudrais comprendre pourquoi la macro suivante ne fonctionne pas, en fait elle ne fait rien, alors qu'elle devrait colorier les lignes en diverses couleurs pour lesquelle une cellule contient "P", "A", ou "G"...
Merci de votre aide très précieuse !

Sub COULEURS()

Dim cl
Dim Target As Range

Dim plage1 As Range
Set plage1 = Range("J4:Z500")
For Each cl In plage1
If cl.Value = "P" Then
Rows(cl.Row).Interior.ColorIndex = 38
End If
Next cl

Dim plage2 As Range
Set plage2 = Range("K4:Z500")
For Each cl In plage2
If cl.Value = "A" Then
Rows(cl.Row).Interior.ColorIndex = 6
End If
Next cl

Dim plage3 As Range
Set plage3 = Range("L4:Z500")
For Each cl In plage3
If cl.Value = "G" Then
Rows(cl.Row).Interior.ColorIndex = 37
End If
Next cl

End Sub
Configuration: Windows 2003 Internet Explorer 6.0

7 réponses

  1. Contributeur
    salut
    tu n'as pas de message d'erreur ?
    je ne suis pas spécialiste mais ça ne devrait pas c au lieu de cl
    par exemple dans : For Each cl In plage1
    0
    1. bonjour,
      je viens de tester ta macro : elle fonctionne.
      quand tu contrôles un "P" dans une cellule tu met la ligne en couleur

      If cl.Value = "P" Then
      Rows(cl.Row).Interior.ColorIndex = 38

      Que voulais tu faire exactement? mettre un fond à la cellule ou bien à toute la ligne?
      pour la cellule seule utilise

      cl.Interior.colorindex=38

      par contre cela n'est pas logique .
      car si une valeur est lue "P" en colone J4 ( la ligne prend une couleur "38") et une autre "A" el K4 alors la précedente couleur sera effacée. d'où ma question ci-dessus et ma suggestion.

      Set plage1 = Range("J4:Z500") sinon écrit : Set plage1 = Range("J4:J500")

      Set plage2 = Range("K4:Z500") : Set plage2 = Range("K4:K500") ....etc
      Set plage3 = Range("L4:Z500")

      si mon explication ne correspond pas à l'attente souhaitée .... il faut expliciter la demande.
      A+
      0
      1. Re,

        Merci pour ces précisions
        Oui, en effet elle fonctionne, mais que dans 2 fichiers sur 3...et là c'est pour le fichier qui ne fonctionne pas que j'interroge les spécialistes !!

        Où dois je la mettre (dans quel module, quel emplacement...) pour que dès que l'utilisateur met un "G" ou un "P" ou un "A", qu'il enregistre et qu'il ferme le fichier, l'utilisateur suivant voit la ligne entière coloriée ?
        Peut être est parce que le fichier s'ouvre sur un autre onglet et que par csqt la macro ne s'applique pas sur le bon onglet?
        Faut il un "open_auto" ou qqch comme cela ?
        MERCI 1000 fois !
        0
    2. Ha! ce n'est pas la même question.... : )

      Oui, en effet elle fonctionne, mais que dans 2 fichiers sur 3...et là c'est pour le fichier qui ne fonctionne pas que j'interroge les spécialistes !!

      ça c'est de la pommade !

      1 ) ton module couleur doit se trouver :
      a) dans chaque fichiers 1 , 2, 3...
      b) dans un fichier unique qui dialoguera avec ces trois fichiers ou plus.

      2) le plus simple
      copier le module dans chaque fichier et ajouter
      dans thisworkbook (double click sur thisworkbook)

      Private Sub Workbook_Open()
      COULEURS
      End Sub

      et là à l'ouverture le module executera la procedure COULEURS

      C'est aussi plus simple à debogguer en cas de pb!

      A+
      0
      1. Aaaargggggghhhhhh !!

        Merci Bidouilleu R.

        Excel me retourne un vieux "incompatibilité de type" (erreur 13)...
        en me surlignant la ligne suivante :

        If cl.Value = "P" Then

        qu'est ce qui n'irait pas, suite à ce message très générique ?

        merci de votre aide cordiale !

        Dave38
        0
        1. Tu dis...

          Excel me retourne un vieux "incompatibilité de type" (erreur 13)...
          en me surlignant la ligne suivante :

          If cl.Value = "P" Then


          au début de ton code tu écrit Dim cl
          ajoute pour me faire plaisir Dim cl as variant ( par défaut il est as variant)
          Incompatibilité de type intervient de deux manières :
          1) tu essaies de mettre dans une variable un type qui est est trop grand ou qui ne convient pas
          ex ( i as integer et plus loin i=1.23)
          ici je ne pense pas que ce soit le cas.
          2) quand une variable est utilisée dans un module au niveau procédure et aussi en globale.

          ton code fonctionne chez moi. j'ai retesté
          maintenant si l'erreur est toujours présente
          retire dim cl as variant

          et écrit

          public Cl as variant ' déclaré en globale

          sub couleurs()

          ....
          ' le même code
          ...
          end Sub

          tiens moi au courant.
          Bon week end.
          0
          1. Bonjour Bidouilleu R,

            ça ne fonctionne pas, que ce soit avec le dim cl as variant ou le "public cl as variant" déclaré en global...
            as tu une ultime solution STP ? encore merci ...!

            Sub COULEURS()

            Dim plage As Range
            Dim cl As Variant
            Dim Target As Range

            Set plage = Range("J4:Z500")
            For Each cl In plage
            If cl.Value = "P" Then
            Rows(cl.Row).Interior.ColorIndex = 38
            End If
            Next cl

            Dim plage2 As Range
            Set plage2 = Range("K4:Z500")
            For Each cl In plage2
            If cl.Value = "A" Then
            Rows(cl.Row).Interior.ColorIndex = 6
            End If
            Next cl

            Dim plage3 As Range
            Set plage3 = Range("L4:Z500")
            For Each cl In plage3
            If cl.Value = "G" Then
            Rows(cl.Row).Interior.ColorIndex = 37
            End If
            Next cl

            Dim plage4 As Range
            Set plage4 = Range("I4:Z500")
            For Each cl In plage4
            If cl.Value = "Att" Then
            Rows(cl.Row).Interior.ColorIndex = xlNone
            End If
            Next cl

            End Sub
            0
            1. Bonjour,

              Je répète le code VBA que tu possède n'a pas d'erreur.
              je te propose de vérifier 2 choses.
              1er test.

              1) tu crées un nouveau classeur
              2) tu insères un module ( alt f11...)
              3) tu recopies le code vba que tu possèdes
              4) tu places les valeurs P, G, A dans les cellules correspondantes pour un test
              5) enregistre et teste ( fais le test avec seulement ce nouveau classeur ouvert)

              2eme test

              tu fais alt F11 (microsof visual basic editor)

              click sur outils / références et regarde s'il n'y a pas une référence invalide.
              s'il y une référence invalide tu trouveras le mot manquant au début de la ligne.

              Précise aussi ta version d'excel . je suppose que tu utilises excel 2003.

              A+
              0