Insérer un caractere par simple clic

  • Initiateur de la discussion Initiateur de la discussion hassan.zer
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

hassan.zer

XLDnaute Occasionnel
Bonjour je souhaiterai inserai un X par simple clic sur une plage de cellules, pour me simplifier la tache, et en plus mettre la date du jour lorsque le X a été mis, merci a vous.
 

Pièces jointes

Re : Insérer un caractere par simple clic

Bonsoir hassan.zer, bonsoir le forum,

En pièce jointe ton fichier modifié avec une macro événentielle Double-clic commentée. Double-clique sur la cellule pour réaliser l'action...
 

Pièces jointes

Re : Insérer un caractere par simple clic

bonsoir le forum, les participants,

désolé de m'incruster dans ce fil, mais j'aimerais comprendre.

M. le squale, pourriez vous m'expliquer l'utilisation de IF Not par rapport à IF.
quels sont les cas ou son utilisation s'impose ?
il y à t il une véritable différence à programmer if not qui je l'imagine est l'inverse de if ?
 
Re : Insérer un caractere par simple clic

Bonsoir le fil, bonsoir le forum,

Deux problèmes avec un simple clic. D'abord un déplacement malheureux avec la souris ou les flèches du clavier agissent, tandis qu'un double-clic est vraiment un acte volontaire... D'autre part si tu cliques sur un cellule et tu t'aperçois tu veux annuler cette action il te faut d'abord te déplacer au dessus ou au dessous puis te redéplacer sur elle. Alors qu'avec un second double-clic tu peux l'annuler immédiatement.

Toutefois si tu y tiens vraiment, remplace le code par celui-ci :
Code:
Private test As Boolean 'déclare la variable test
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim pl As Range 'déclare la variable pl (PLage)
Dim col As Byte 'déclare la variable col (COLonne)
Dim tc As Byte 'déclare la variable tc (Target Colonne)
 
Set pl = Range("F6:I17") 'définit la plage pl
'si la sélection est multiple ou si test est vrai, sort de la procédure
If Selection.Cells.Count > 1 Or test = True Then Exit Sub
'si le double-clic a lieu ailleurs que dans la plage pl, sort de la procédure
If Application.Intersect(Target, pl) Is Nothing Then Exit Sub
 
test = True 'définit la variable test
Target.Value = IIf(Target.Value = "x", "", "x") 'de'finit la valeur de la cellule double-cliquée ("x" si vide, vide si "x")
If Target.Value = "" Then 'condition : si la valeur de la cellule double-cliquée est vide
    Cells(Target.Row, 10).Value = "" 'efface la date
    test = False 'redéfinit la variable test
    Exit Sub 'soret de la procédure
End If 'fin de la condition
tc = Target.Column ''definit la colonne de la cellule double-cliquée
For col = 6 To 9 'boucle sur les cellules des colonnes 6 à 9
    'si la colonne est différente de tc, vide la cellule
    If col <> tc Then Cells(Target.Row, col).Value = ""
Next col 'prochaien cellule de la boucle
Cells(Target.Row, 10).Value = Date 'place la date dans la colonne J
test = False 'redéfinit la variable test
End Sub
 
Re : Insérer un caractere par simple clic

Bonsoir le fil, bonsoir le forum,

Réponse à Macpoy... Les deux méthodes sont similaires Not inverse la proposition.
Code:
If Not Application.Intersect(Target, pl) Is Nothing Then
    code de la macro ...
End If
équivaut à :
Code:
If Application.Intersect(Target, pl) Is Nothing Then Exit Sub
code de la macro ...
Dans les deux cas cela restreint l'action événementielle à la plage pl.
 
Dernière édition:
Re : Insérer un caractere par simple clic

Re le fil,

merci pour vos explications, donc si j'ai bien compris, l'une ou l'autre des formulations permettent d'arriver au même résultat !!
donc pas d'intérêt à se faire suer avec "not" et "is nothing" ?
@plus
 
Re : Insérer un caractere par simple clic

Bonjour le fil 🙂,
donc pas d'intérêt à se faire suer avec "not" et "is nothing" ?
Tout dépends de ce qui est nécessaire. Not permet juste de faire le test à l'envers. Mais sur une événementielle, le but du jeu est de quitter la sub rapidement, d'où le ... Is Nothing ... Then Exit Sub. Le ... Not ... Is Nothing ... Then va te permettre de dérouler ta macro dans le test, mais il ne faudra pas oublier le End If à la fin 😉...
Maintenant, se passer d'Is Nothing va être plus dur. Savoir si le résultat d'une intersection est vide, pas de problème, maintenant, à quoi vas tu comparer le résultat de l'intersection pour savoir si c'est bon ? Si l'intersection est = Target, ça veut dire que Target est dans la zone, mais là, il va y avoir des subtilités entre Worksheet_BeforeDoubleClick qui ne peut renvoyer qu'une seule cellule à la fois (difficile de double-cliquer sur plusieurs cellules à la fois 😛) alors que Worksheet_SelectionChange va renvoyer toute la sélection, soit plusieurs cellules. Dans ce dernier cas, l'intersection peut être soit rien (Nothing), soit Target si toutes les cellules sont dans la zone d'intersection, soit une partie seulement de Target, qu'il va être difficile de mettre dans une égalité 😀...
Donc toute les instructions ont leur utilité, cela dépends de ce dont tu as besoin, mais attention, une erreur d'analyse (toi, tu va sélectionner une seule cellule, tu sais que c'est l'action à faire, mais les utilisateurs à qui tu va filer ton fichier, eux, sont des farceurs et ne vont pas hésiter à selectionner plusieurs cellules, voir même discontinues avec le Ctrl 😛...) et ta macro ne fera pas du tout ce que tu pensais 🙄...
carcharodon-carcharias à dit:
désolé du retard (pause physiologique et petite clope 😱)
Tu sais qu'il y a la pub à la TV pour la pause physiologique 😛 ... Et un requin qui fume, ça fait pas sérieux 😉
Bonne Pâque 😎
 
Re : Insérer un caractere par simple clic

sinon le simple clic est possible en rajoutant en fin de macro évènementiel un


Code:
'''clic d'une sélection continue
for each c in selection  '''à la place de Target.Value = IIf(Target.Value = "x", "", "x")
if c = "X" then 
 c= "" 
 c.interior.colorindex = xlnone
else
 c= "X" 
 c.interior.colorindex = 3
next c

cells(1,1).select



la cellule A1 en exemple ne devra bien sur pas faire parti de l'intersect.
la cellule cliquée ne sera plus sélectionnée et pourrait être de nouveau cliquée immédiatement en cas de changement d'avis.


en rajoutant un petit changement de couleur cela permet de voir facilement les clics inopportuns aussi
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Suivi charge/capa
Réponses
10
Affichages
351
Réponses
10
Affichages
637
Retour