Excel remplir une cellule en 1 clic avec VBA

Résolu
Grobibi34 Messages postés 83 Statut Membre -  
Grobibi34 Messages postés 83 Statut Membre -
Bonjour, à tous.

J'ai fai une petite macro avec VBA qui me permet de colorier la cellule sur laquel je clic en rouge.
Mais je voudrai que quand je clic et que celle-ci est déja rouge elle repasse en blanc.

Voici le code que j'ai édité mais il ne marche pas ma cellule reste toujours rouge :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Interior.ColorIndex = 0 Then ActiveCell.Interior.ColorIndex = 3 Else ActiveCell.Interior.ColorIndex = 3
End Sub

Quelqu'un pourrait m'aider ??? :-)

Cordialement

Grobibi34
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Sinon tu peux utiliser l'evenement BeforeDoubleClick.
    D'une part ça évite d'avoir à sélectionner une autre cellule pour revenir et déclencher l'evenement selection_change, d'autre part ça évite de changer la couleur par inadvertance.

    Et je pense que ce n'est pas la couleur blanche que tu veux detecter mais l'absence de couleur qui est -4142 ou la variable xlColorIndexNone .
    De plus pour éviter que ton changement de couleur se fasse sur toutes les cellules il faut sortir du programme après avoir testé si ta cellule (Target) souble-cliquée est en dehors de la zone que tu as défini.
    Et si tu veux éviter de passer la cellule en mode édiition suite au double clic il faut ajouter cancel = true

    Exemple avec action uniquement sur la colonne B :

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
    If ActiveCell.Interior.ColorIndex = xlColorIndexNone Then ActiveCell.Interior.ColorIndex = 3 Else ActiveCell.Interior.ColorIndex = xlColorIndexNone
    Cancel = True
    End Sub

    eric
    5
  2. Grobibi34 Messages postés 83 Statut Membre 30
     
    Bonjour Bonjour, tout d'abord merci à tous pour vous etre penché sur la question.

    J'ai réussi à faire fonctionner ton code Amigo, j'ai pu repérer mon erreur qui était plutot bète.

    Eric ton code est super aussi et je le trouve super interessant je pense que avec ces éléments je ne peux plus me planter sur ce sujet.

    Tom il est pas mal ton lien je vais le lire à fond je pense.

    En bref un grand merci à tous pour m'aider à avancer dans ma macro :-)

    Cordialement

    Grobibi34
    1
  3. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    Quelle persévérance, Grobibi !
    Là, le problème est que tu demandes la couleur 3 dans les deux cas !!

    L'instruction ci-dessous devrait suffire :
    If ActiveCell.Interior.ColorIndex = 3 Then ActiveCell.Interior.ColorIndex = 0
    0
    1. Grobibi34 Messages postés 83 Statut Membre 30
       
      Hum non gros problème sa ne marche pas.
      Si jamais j'écris:

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)

      ActiveCell.Interior.ColorIndex = 3

      If ActiveCell.Interior.ColorIndex = 3 Then ActiveCell.Interior.ColorIndex = 0

      End Sub

      Là la cellule passe en rouge mais repasse instantanément en blanc.

      Tu pense qu'il faudrait appliqué une tempo entre les deux ?

      Ou alors j'ai tout faux ?
      0
  4. Grobibi34 Messages postés 83 Statut Membre 30
     
    J'aurai aussi une nouvelle question sur le même sujet.
    Penses tu que cette fonction ne sois aplicable que sur certaines cellules, par exemple sur un cadre qui irait de la cellule B5 à la cellule B22 en longueur et j'usqu'a la cellule AA5.

    Je sais pas trop si je me suis fais comprendre là..... oO

    Cordialement

    Grobibi34
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Re Grobibi34,

    y'a un pti souci dans ton code :

    If ActiveCell.Interior.ColorIndex = 0 Then ActiveCell.Interior.ColorIndex = 3 Else ActiveCell.Interior.ColorIndex = 3

    en français ça fait : si la cellule est de couleur 0 alors mets là en couleur 3, sinon mets là en couleur 3 !!!!!

    Donc :
    If ActiveCell.Interior.ColorIndex = 0 Then ActiveCell.Interior.ColorIndex = 3 Else ActiveCell.Interior.ColorIndex = 0

    Tom
    0
    1. Grobibi34 Messages postés 83 Statut Membre 30
       
      Re Tom

      Je vois bien mon erreur mais ton code ne marche pas non plus sa ne colore pas les cellules.

      Une autre solution?
      0
  7. amigo
     
    bonjour,

    ce code marche chez moi, le probleme c'est qu'il faut quitter la cellule ets revenir pour faire changer la couleur

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If ActiveCell.Interior.ColorIndex <= 0 Then
    ActiveCell.Interior.ColorIndex = 3
    Else
    ActiveCell.Interior.ColorIndex = 0
    End If
    End Sub

    A+.
    0