Comment décocher une cellule avec le double clic?

Fermé
Chris45 - 22 août 2023 à 16:02
 Chris45 - 29 août 2023 à 13:17

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

A voir également:

9 réponses

ccm81 Messages postés 10890 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 septembre 2024 2 421
22 août 2023 à 20:26

Bonjour

Une solution

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

Cdlmnt

0

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
ccm81 Messages postés 10890 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 septembre 2024 2 421
23 août 2023 à 17:23

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

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10890 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 septembre 2024 2 421
25 août 2023 à 10:53

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

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
ccm81 Messages postés 10890 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 septembre 2024 2 421
28 août 2023 à 16:04

Bonjour

Le lien que tu as envoyé n'est pas correct. Il devrait ressembler à ça

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

Cdlmnt

0
ccm81 Messages postés 10890 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 septembre 2024 2 421
Modifié le 28 août 2023 à 16:51

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

Bonjour ccm81,

C'est rectifié et cela fonctionne super bien !

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

Cdt

0