[VBA] changement couleur cellule

Résolu
Bonjour,
Je souhaiterais changer la couleur d'une cellule lorsqu'on clique sur cette cellule.Par exemple, je clique sur ma cellule une première fois elle devient verte, et si je clique à nouveau dessus elle redevient blanche Est-ce que quelqu'un pourrait m'aider s'il-vous-plaît? (Je commence à peine à utiliser vba, donc je ne connais pas trop ce langage)

Je travaille sur Excel 2010.

Merci d'avance.
Anuca.

9 réponses

  1. Salut,

    essaye comme cela

    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    If Not Intersect(Selection, Range("B3:B30")) Is Nothing Then
    With Target
    If Selection.Interior.ColorIndex = xlNone Then
    Selection.Interior.ColorIndex = 4
    Else
    Selection.Interior.ColorIndex = xlNone
    End If
    End With
    End If
    End Sub
    0
    1. Bonsoir Mike-31 et ccm81,
      d'abord merci pour votre réponse et j'ai une deuxième question un peu bête pour quelqu'un qui connaît: quand j'exécute le code j'ai cette erreur qui s'affiche: erreur d'exécution 91: variable d'objet ou variable de bloc With non définie et .Interior.ColorIndex = 4 + xlNone - .Interior.ColorIndex est en jaune. Pourtant je pensais avoir défini Target mais sans doute mal: Dim Target As Range. Comment dois-je la déclarer svp?
      0
      1. et au passage, vous avez écris B3:B30 mais je le veux sur toute la page sauf la première ligne et les deux première colonnes je dois faire une boucle?
        0
    2. Re,

      tu as cette possibilité en définissant la plage à surveiller ou inversement

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect(Selection, Range("B2:Z200")) Is Nothing Then
      With Target
      .Interior.ColorIndex = 4 + xlNone - .Interior.ColorIndex
      End With
      End If
      End Sub
      0
      1. 1. tu n'as pas à redéfinir Target (cette variable est définie dans l'en tête de la procedure)
        2. remplacer B2:B30 par la plage qui t'intéresse
        0
        1. D'accord, à présent j'ai compris pour la plage, en revanche (excusez moi d'être si cruche..). J'essaie dans un programme annexe à celui que je dois créer votre code, et donc dans mon module je mets votre code, ensuite j'appelle dans le même module Call Worksheet_SelectionChange(ByVal Target) et l'erreur 421 s'affiche: objet requis. Je suis donc aller voir dans outils références et je ne sais pas ce qu'il faut que je coche ou décoche?! je suis totalement perdue :(
          0
          1. ok, je ne savais pas qu'il fallait la mettre dans un autre endroit que général. donc maintenant ça marche :) mille merci. c'était l'erreur!
            0
            1. Re,

              ces codes fonctionnent très bien à partir des versions 2003 voire versions antérieurs
              0
              1. je viens de retirer le commentaire, car en fait oui cela fonctionne, excusez moi. merci
                0
            2. bonjour Anuka, bonjour Mike

              ou en plus bref

              Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
              If Not Intersect(Selection, Range("B3:B30")) Is Nothing Then  
                With Target  
                 .Interior.ColorIndex = 4 + xlNone - .Interior.ColorIndex  
                End With  
              End If  
              End Sub

              cordialement
              -1