Comment décocher une cellule avec le double clic?

Bonjour,

je bloque sur le cas suivant:

quand je double clique dans une cellule, elle devient jaune, cela j'ai réussi à le faire avec le code suivant pour l'ensemble de ma feuille de calcul excel : 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target.Interior.Color = vbYellow
End Sub

A présent, je voudrais double cliquer sur une autre cellule de la même plage (et non pas de la feuille de calcul entière parce que j'ai plusieurs "rubriques") , cellule qui deviendrait donc jaune, mais en faisant cela la cellule précédemment surlignée redeviendrait sans couleur automatiquement. Ou bien double cliquer à nouveau sur cette première cellule surlignée afin qu'elle redevienne sans couleur, c'est peut-être plus simple...?

Et étendre cette manipulation ensuite à toute la feuille de calcul, plage par plage, mais comme c'est du code, j'imagine que reproduire la mise en forme ne fonctionnerait pas...

J'espère que c'est assez clair et je remercie d'avance les personnes qui pourront m'aider.


Windows / Edge 115.0.1901.203

9 réponses

  1. Bonjour ccm81,

    C'est rectifié et cela fonctionne super bien !

    Merci encore pour tout, je vais gagner un temps précieux!

    Cdt

    0
    1. Bon, en bidouillant un peu, j'ai tenté ce lien

      https://www.cjoint.com/c/MHCmB4S12tX

      La solution à ton pb, dans le code il te faut mettre tous les noms de plage entre guillemets (dans mon code, j'avais attribué les noms de plage à des constantes : const P1 = "plage1", ...)

      If Not Intersect(Target, Range("plage1")) Is Nothing Then
        Range("plage1").Interior.ColorIndex = xlNone
        Target.Interior.ColorIndex = jaune
        Target.Offset(1, 0).Select

      Cdlmnt

      PS. De plus, tu as oublié de définir la constante jaune en début de code

      Les deux premières lignes de ton code doivent être

      Option Explicit

      Const jaune = 6

      0
      1. Bonjour,

        Oui, j'ai changé les noms dans le code pourtant, voici un bout de mon fichier, merci de votre aide :

        https://www.cjoint.com/data3/MHCmB4S12tX_FICHE-SCORING2023v3.xlsm

        Cdt,

        0
        1. Bonjour

           erreur d'exécution 1004: la méthode 'Range' de l'objet a échoué

          Je pense que la plage n'est pas reconnue. Tu dis que tu as nommé les plages, mais as tu changé les noms dans le code ?

          Peux tu envoyer un bout de ton fichier sur cjoint.com et joindre le lien obtenu à ton prochain message.
          1) Tu vas dans http://cjoint.com/
          2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
          3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
          4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
             en bleu souligné ; tu le sélectionnes et tu fais "Copier"
          5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".

          Cdlmnt

          0
          1. Bonjour,

            merci à vous, je viens d'essayer mais la fenêtre suivante s'ouvre:

            erreur d'exécution 1004: la méthode 'Range' de l'objet a échoué

            J'ai pourtant bien sélectionné mes plages en les nommant. A savoir que chacune de mes plages est constituée de 4 ou 5 cellules les unes en dessous des autres à la suite, sur une seule colonne mais donc sur plusieurs lignes, je ne sais pas si cela joue sur la dénomination Range.

            Savez-vous ce qu'est l'erreur 1004?

            Sinon, je laisse de côté il n'y a aucune urgence dans ma demande.

            Je vous remercie encore de votre aide et de votre temps.

            Cdt

            0
            1. Bonjour

              La macro fonctionnait ?

              Alt-F11 pour accéder au code

              Option Explicit
              
              Const jaune = 6
              ' plages nommées dans la feuille
              Const P1 = "plage1"
              Const P2 = "plage2"
              Const P3 = "plage3"
              
              Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
              
              If Not Intersect(Target, Range(P1)) Is Nothing Then
                Range(P1).Interior.ColorIndex = xlNone
                Target.Interior.ColorIndex = jaune
                Target.Offset(1, 0).Select
              ElseIf Not Intersect(Target, Range(P2)) Is Nothing Then
                Range(P2).Interior.ColorIndex = xlNone
                Target.Interior.ColorIndex = jaune
                Target.Offset(1, 0).Select
              ElseIf Not Intersect(Target, Range(P3)) Is Nothing Then
                Range(P3).Interior.ColorIndex = xlNone
                Target.Interior.ColorIndex = jaune
                Target.Offset(1, 0).Select
              End If
              End Sub

              Cdlmnt

              0
              1. Bonjour,

                merci de votre intérêt. J'ai ouvert le lien mais n'ai pas pu visualiser le code utilisé, aussi est-il possible de me l'envoyer ?

                Un grand merci.

                0