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,

    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
    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 à 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

           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,

            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. 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 ccm81,

                C'est rectifié et cela fonctionne super bien !

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

                Cdt

                0