Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Détection pression touche

10 réponses
Avatar
Stéphane
Bonjour,

Je souhaiterais pouvoir vérifier que ma feuille à été modifiée, ceci afin
que l'utilisateur n'oublies pas d'activer la macro sauvegarde et ainsi ne
pas perdre de donnée.

Je souhaiterais pour cela détecter qu'une touche à été pressée sur la
feuille en question. Si une touche à été pressée, je place 0 dans la case Z1
et lorsque je sauvegarde je place 1 dans cette même case ce qui me permet de
bloquer toutes les autres actions qui me fait perdre les données si je n'ai
pas sauvegarder préalablement.

Donc comment détecter qu'une touche à été pressée sur la feuille "Fiche" et
placer 0 dans ce cas dans la case Z1 ?

J'ai placer le code ci-dessous qui fonctionne bien mais le problème c'est
que à la fin de ma macro sauvegarde je place 1 en Z1 mais comme il voit un
changement sur la feuille il replace directement le 0. (Je veux donc pouvoir
mettre le 0 uniquement si une touche est pressée, ou alors une autre
solution à mon problème ? )

Private Sub Worksheet_Change(ByVal Target As Range)
'Place un repère pour signaler que la fiche à été modifiée
If Range("Z1") = 1 Then
Range("Z1") = 0
End If
End Sub

Merci d'avance pour votre aide.

Steph

10 réponses

Avatar
DanielCo
Bonjour,
Une autre approche serait de tester si des modifs ont été apportées au
classeur :
teste = ThisWorkbook.Saved
ce qui correspond, dans le cas où teste úux, au message Excel
demandant s'il faut enregistrer les données à la fermeture du classeur.
Cordialement.
Daniel

Bonjour,

Je souhaiterais pouvoir vérifier que ma feuille à été modifiée, ceci afin que
l'utilisateur n'oublies pas d'activer la macro sauvegarde et ainsi ne pas
perdre de donnée.

Je souhaiterais pour cela détecter qu'une touche à été pressée sur la feuille
en question. Si une touche à été pressée, je place 0 dans la case Z1 et
lorsque je sauvegarde je place 1 dans cette même case ce qui me permet de
bloquer toutes les autres actions qui me fait perdre les données si je n'ai
pas sauvegarder préalablement.

Donc comment détecter qu'une touche à été pressée sur la feuille "Fiche" et
placer 0 dans ce cas dans la case Z1 ?

J'ai placer le code ci-dessous qui fonctionne bien mais le problème c'est que
à la fin de ma macro sauvegarde je place 1 en Z1 mais comme il voit un
changement sur la feuille il replace directement le 0. (Je veux donc pouvoir
mettre le 0 uniquement si une touche est pressée, ou alors une autre solution
à mon problème ? )

Private Sub Worksheet_Change(ByVal Target As Range)
'Place un repère pour signaler que la fiche à été modifiée
If Range("Z1") = 1 Then
Range("Z1") = 0
End If
End Sub

Merci d'avance pour votre aide.

Steph
Avatar
gmlsteph
Bonjour,

Premier point:
Si ta demande vise cet objectif de vérification, excel le fait déjà!
Lorsque tu quittes excel ou ferme le document,
un message te propose d'enregistrer selon la procédure normale.
Cela dit si tu veux à ce moment effectuer une procédure en particulier,
l'évennement est interceptable via le module ThisWokbook.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolea n)
Cancel=true
Call mamacroquienregistreautrement
End Sub


Second Point:
Le fait qu'une touche ait été pressée n'est pas réellement déterm inant d'une modification.
On pourrait appuyer sur x touches et que cela ne modifie rien.
De même on peut modifier le feuille sans utiliser de touches,
simplement click droit souris Coller pour ne citer que cet exemple.

En revanche si ce n'était qu'un cas d'école pour voir comment intercept er une frappe de touche cela dépend du contexte et quand sur quel cas l'i ntercepter.
Par exemple au niveau application tu as OnKey, au niveau d'un UserForm Key Press
...cf l'aide ou précise ici suivant un besoin plus concret.

Cordialement.

--
LSteph
Avatar
Stéphane
Merci pour votre réponse.

En fait, sur la feuille je rappatrie via une macro les données se trouvant
dans une liste sur une autre feuille. Les données ainsi rappatriées peuvent
être modifiées. Lors d'un nouvelle enregistrement de données, l'opérateur
intègre ces nouvelles données et doit pousser sur un bouton enregistrement
qui via macro enregistre ces nouvelles données dans la liste sur la feuille
"Données".
Je souhaiterais donc qu'il n'oublie pas cette étape.
Donc quand je parle d'enregistrement, ce n'est pas vraiment le fichier en
lui même, lui sera enregistrer plus tard.

Je vais voir si la commande OnKey peut m'aider. Merci

Steph


a écrit dans le message de
news:
Bonjour,

Premier point:
Si ta demande vise cet objectif de vérification, excel le fait déjà!
Lorsque tu quittes excel ou ferme le document,
un message te propose d'enregistrer selon la procédure normale.
Cela dit si tu veux à ce moment effectuer une procédure en particulier,
l'évennement est interceptable via le module ThisWokbook.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Cancel=true
Call mamacroquienregistreautrement
End Sub


Second Point:
Le fait qu'une touche ait été pressée n'est pas réellement déterminant d'une
modification.
On pourrait appuyer sur x touches et que cela ne modifie rien.
De même on peut modifier le feuille sans utiliser de touches,
simplement click droit souris Coller pour ne citer que cet exemple.

En revanche si ce n'était qu'un cas d'école pour voir comment intercepter
une frappe de touche cela dépend du contexte et quand sur quel cas
l'intercepter.
Par exemple au niveau application tu as OnKey, au niveau d'un UserForm
KeyPress
...cf l'aide ou précise ici suivant un besoin plus concret.

Cordialement.

--
LSteph
Avatar
LSteph
Bonjour,

Tout d'abord si j'ai compris pour l'idée de fond:

EtapeA
L'utilisateur ouvre le fichier
Les données de la feuille données n'ont théoriquement pas bougé depuis
le dernier enregistrement du classeur.

EtapeB
Il active la macro qui place des données de la Feuille Données dans la
Feuille 1

EtapeC
Il peut alors Modifier ces données en Feuille 1 ce qui entrainerait la
nécessité de mettre à jour la Feuille Données.(Etape D)

Ce pb posé que peut il arriver maintenant, s'il ferme le classeur

1-Il n'enregistre pas
Tout va bien ou presque les données restent fidèles à l'Etape A mais
il a perdu son temps.

2-Il enregistre sans avoir pensé à l'étape D
Ca ne va pas car . Feuil1 est en EtapeC ou B alors que Feuille
Données< est en EtapeA

3-Stéphane a eu la bonne idée de mettre dans le BeforeSave du
ThisWorkBook
un appel à sa macro qui remet bien les données de Feuil1 vers
Feuille Données.
L'utilisateur n'a plus à s'en soucier , tout a été bien pensé. Il
faut juste dire oui à l'enregistrement du classeur.

Sinon par ailleurs , j'ai loupé une question annexe, désactiver les
évennements qd il risquent de s'appeler eux-même

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEventsúlse
If [z1] Then [z1]=0
Application.EnableEvents=true
End Sub

'LSteph



"Stéphane" a écrit dans le message de
news:4fe98c4b$0$3107$
Merci pour votre réponse.

En fait, sur la feuille je rappatrie via une macro les données se trouvant
dans une liste sur une autre feuille. Les données ainsi rappatriées
peuvent être modifiées. Lors d'un nouvelle enregistrement de données,
l'opérateur intègre ces nouvelles données et doit pousser sur un bouton
enregistrement qui via macro enregistre ces nouvelles données dans la
liste sur la feuille "Données".
Je souhaiterais donc qu'il n'oublie pas cette étape.
Donc quand je parle d'enregistrement, ce n'est pas vraiment le fichier en
lui même, lui sera enregistrer plus tard.

Je vais voir si la commande OnKey peut m'aider. Merci

Steph


a écrit dans le message de
news:
Bonjour,

Premier point:
Si ta demande vise cet objectif de vérification, excel le fait déjà!
Lorsque tu quittes excel ou ferme le document,
un message te propose d'enregistrer selon la procédure normale.
Cela dit si tu veux à ce moment effectuer une procédure en particulier,
l'évennement est interceptable via le module ThisWokbook.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Cancel=true
Call mamacroquienregistreautrement
End Sub


Second Point:
Le fait qu'une touche ait été pressée n'est pas réellement déterminant
d'une modification.
On pourrait appuyer sur x touches et que cela ne modifie rien.
De même on peut modifier le feuille sans utiliser de touches,
simplement click droit souris Coller pour ne citer que cet exemple.

En revanche si ce n'était qu'un cas d'école pour voir comment intercepter
une frappe de touche cela dépend du contexte et quand sur quel cas
l'intercepter.
Par exemple au niveau application tu as OnKey, au niveau d'un UserForm
KeyPress
...cf l'aide ou précise ici suivant un besoin plus concret.

Cordialement.

--
LSteph

Avatar
Jacquouille
Salut Paname

Peux-tu expliquer, en gaulois, ce que cette grande bretonnerie issue de ta
plume veut dire?
If [z1] Then [z1]=0

Je pense beaucoup à ta rue ces jours-ci ... -)))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"LSteph" a écrit dans le message de groupe de discussion :
jseb7p$n59$

Bonjour,

Tout d'abord si j'ai compris pour l'idée de fond:

EtapeA
L'utilisateur ouvre le fichier
Les données de la feuille données n'ont théoriquement pas bougé depuis
le dernier enregistrement du classeur.

EtapeB
Il active la macro qui place des données de la Feuille Données dans la
Feuille 1

EtapeC
Il peut alors Modifier ces données en Feuille 1 ce qui entrainerait la
nécessité de mettre à jour la Feuille Données.(Etape D)

Ce pb posé que peut il arriver maintenant, s'il ferme le classeur

1-Il n'enregistre pas
Tout va bien ou presque les données restent fidèles à l'Etape A mais
il a perdu son temps.

2-Il enregistre sans avoir pensé à l'étape D
Ca ne va pas car . Feuil1 est en EtapeC ou B alors que Feuille
Données< est en EtapeA

3-Stéphane a eu la bonne idée de mettre dans le BeforeSave du
ThisWorkBook
un appel à sa macro qui remet bien les données de Feuil1 vers
Feuille Données.
L'utilisateur n'a plus à s'en soucier , tout a été bien pensé. Il
faut juste dire oui à l'enregistrement du classeur.

Sinon par ailleurs , j'ai loupé une question annexe, désactiver les
évennements qd il risquent de s'appeler eux-même

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEventsúlse
If [z1] Then [z1]=0
Application.EnableEvents=true
End Sub

'LSteph



"Stéphane" a écrit dans le message de
news:4fe98c4b$0$3107$
Merci pour votre réponse.

En fait, sur la feuille je rappatrie via une macro les données se trouvant
dans une liste sur une autre feuille. Les données ainsi rappatriées
peuvent être modifiées. Lors d'un nouvelle enregistrement de données,
l'opérateur intègre ces nouvelles données et doit pousser sur un bouton
enregistrement qui via macro enregistre ces nouvelles données dans la
liste sur la feuille "Données".
Je souhaiterais donc qu'il n'oublie pas cette étape.
Donc quand je parle d'enregistrement, ce n'est pas vraiment le fichier en
lui même, lui sera enregistrer plus tard.

Je vais voir si la commande OnKey peut m'aider. Merci

Steph


a écrit dans le message de
news:
Bonjour,

Premier point:
Si ta demande vise cet objectif de vérification, excel le fait déjà!
Lorsque tu quittes excel ou ferme le document,
un message te propose d'enregistrer selon la procédure normale.
Cela dit si tu veux à ce moment effectuer une procédure en particulier,
l'évennement est interceptable via le module ThisWokbook.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Cancel=true
Call mamacroquienregistreautrement
End Sub


Second Point:
Le fait qu'une touche ait été pressée n'est pas réellement déterminant
d'une modification.
On pourrait appuyer sur x touches et que cela ne modifie rien.
De même on peut modifier le feuille sans utiliser de touches,
simplement click droit souris Coller pour ne citer que cet exemple.

En revanche si ce n'était qu'un cas d'école pour voir comment intercepter
une frappe de touche cela dépend du contexte et quand sur quel cas
l'intercepter.
Par exemple au niveau application tu as OnKey, au niveau d'un UserForm
KeyPress
...cf l'aide ou précise ici suivant un besoin plus concret.

Cordialement.

--
LSteph

Avatar
LSteph
Bonjour Jacques,

S'il y a 1 en z1 on y met 0

L'idée étant surtou de rappeler cette instruction

Application.EnableEventsúlse
qui serait surtout utile d'ailleurs dans l'autre macro, celle oui notre
ami met1 en z1

La rue!
Et oui elle fond...

Cordialement.

--
LSteph

"Jacquouille" a écrit dans le message de
news:4fec8810$0$3123$
Salut Paname

Peux-tu expliquer, en gaulois, ce que cette grande bretonnerie issue de ta
plume veut dire?
If [z1] Then [z1]=0

Je pense beaucoup à ta rue ces jours-ci ... -)))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"LSteph" a écrit dans le message de groupe de discussion :
jseb7p$n59$

Bonjour,

Tout d'abord si j'ai compris pour l'idée de fond:

EtapeA
L'utilisateur ouvre le fichier
Les données de la feuille données n'ont théoriquement pas bougé depuis
le dernier enregistrement du classeur.

EtapeB
Il active la macro qui place des données de la Feuille Données dans la
Feuille 1

EtapeC
Il peut alors Modifier ces données en Feuille 1 ce qui entrainerait la
nécessité de mettre à jour la Feuille Données.(Etape D)

Ce pb posé que peut il arriver maintenant, s'il ferme le classeur

1-Il n'enregistre pas
Tout va bien ou presque les données restent fidèles à l'Etape A
mais
il a perdu son temps.

2-Il enregistre sans avoir pensé à l'étape D
Ca ne va pas car . Feuil1 est en EtapeC ou B alors que Feuille
Données< est en EtapeA

3-Stéphane a eu la bonne idée de mettre dans le BeforeSave du
ThisWorkBook
un appel à sa macro qui remet bien les données de Feuil1 vers
Feuille Données.
L'utilisateur n'a plus à s'en soucier , tout a été bien pensé. Il
faut juste dire oui à l'enregistrement du classeur.

Sinon par ailleurs , j'ai loupé une question annexe, désactiver les
évennements qd il risquent de s'appeler eux-même

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEventsúlse
If [z1] Then [z1]=0
Application.EnableEvents=true
End Sub

'LSteph



"Stéphane" a écrit dans le message de
news:4fe98c4b$0$3107$
Merci pour votre réponse.

En fait, sur la feuille je rappatrie via une macro les données se
trouvant dans une liste sur une autre feuille. Les données ainsi
rappatriées peuvent être modifiées. Lors d'un nouvelle enregistrement de
données, l'opérateur intègre ces nouvelles données et doit pousser sur un
bouton enregistrement qui via macro enregistre ces nouvelles données dans
la liste sur la feuille "Données".
Je souhaiterais donc qu'il n'oublie pas cette étape.
Donc quand je parle d'enregistrement, ce n'est pas vraiment le fichier en
lui même, lui sera enregistrer plus tard.

Je vais voir si la commande OnKey peut m'aider. Merci

Steph


a écrit dans le message de
news:
Bonjour,

Premier point:
Si ta demande vise cet objectif de vérification, excel le fait déjà!
Lorsque tu quittes excel ou ferme le document,
un message te propose d'enregistrer selon la procédure normale.
Cela dit si tu veux à ce moment effectuer une procédure en particulier,
l'évennement est interceptable via le module ThisWokbook.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Cancel=true
Call mamacroquienregistreautrement
End Sub


Second Point:
Le fait qu'une touche ait été pressée n'est pas réellement déterminant
d'une modification.
On pourrait appuyer sur x touches et que cela ne modifie rien.
De même on peut modifier le feuille sans utiliser de touches,
simplement click droit souris Coller pour ne citer que cet exemple.

En revanche si ce n'était qu'un cas d'école pour voir comment intercepter
une frappe de touche cela dépend du contexte et quand sur quel cas
l'intercepter.
Par exemple au niveau application tu as OnKey, au niveau d'un UserForm
KeyPress
...cf l'aide ou précise ici suivant un besoin plus concret.

Cordialement.

--
LSteph

Avatar
Jacquouille
Dans ce cas, ne manquerait-il pas un chouia ...tel que:
If [z1]=1 Then [z1]=0
au lieu de
If [z1] Then [z1]=0 ???

Bien à vous, cher ami

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"LSteph" a écrit dans le message de groupe de discussion :
jsi92n$86t$

Bonjour Jacques,

S'il y a 1 en z1 on y met 0

L'idée étant surtou de rappeler cette instruction

Application.EnableEventsúlse
qui serait surtout utile d'ailleurs dans l'autre macro, celle oui notre
ami met1 en z1

La rue!
Et oui elle fond...

Cordialement.

--
LSteph

"Jacquouille" a écrit dans le message de
news:4fec8810$0$3123$
Salut Paname

Peux-tu expliquer, en gaulois, ce que cette grande bretonnerie issue de ta
plume veut dire?
If [z1] Then [z1]=0

Je pense beaucoup à ta rue ces jours-ci ... -)))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"LSteph" a écrit dans le message de groupe de discussion :
jseb7p$n59$

Bonjour,

Tout d'abord si j'ai compris pour l'idée de fond:

EtapeA
L'utilisateur ouvre le fichier
Les données de la feuille données n'ont théoriquement pas bougé depuis
le dernier enregistrement du classeur.

EtapeB
Il active la macro qui place des données de la Feuille Données dans la
Feuille 1

EtapeC
Il peut alors Modifier ces données en Feuille 1 ce qui entrainerait la
nécessité de mettre à jour la Feuille Données.(Etape D)

Ce pb posé que peut il arriver maintenant, s'il ferme le classeur

1-Il n'enregistre pas
Tout va bien ou presque les données restent fidèles à l'Etape A
mais
il a perdu son temps.

2-Il enregistre sans avoir pensé à l'étape D
Ca ne va pas car . Feuil1 est en EtapeC ou B alors que Feuille
Données< est en EtapeA

3-Stéphane a eu la bonne idée de mettre dans le BeforeSave du
ThisWorkBook
un appel à sa macro qui remet bien les données de Feuil1 vers
Feuille Données.
L'utilisateur n'a plus à s'en soucier , tout a été bien pensé. Il
faut juste dire oui à l'enregistrement du classeur.

Sinon par ailleurs , j'ai loupé une question annexe, désactiver les
évennements qd il risquent de s'appeler eux-même

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEventsúlse
If [z1] Then [z1]=0
Application.EnableEvents=true
End Sub

'LSteph



"Stéphane" a écrit dans le message de
news:4fe98c4b$0$3107$
Merci pour votre réponse.

En fait, sur la feuille je rappatrie via une macro les données se
trouvant dans une liste sur une autre feuille. Les données ainsi
rappatriées peuvent être modifiées. Lors d'un nouvelle enregistrement de
données, l'opérateur intègre ces nouvelles données et doit pousser sur un
bouton enregistrement qui via macro enregistre ces nouvelles données dans
la liste sur la feuille "Données".
Je souhaiterais donc qu'il n'oublie pas cette étape.
Donc quand je parle d'enregistrement, ce n'est pas vraiment le fichier en
lui même, lui sera enregistrer plus tard.

Je vais voir si la commande OnKey peut m'aider. Merci

Steph


a écrit dans le message de
news:
Bonjour,

Premier point:
Si ta demande vise cet objectif de vérification, excel le fait déjà!
Lorsque tu quittes excel ou ferme le document,
un message te propose d'enregistrer selon la procédure normale.
Cela dit si tu veux à ce moment effectuer une procédure en particulier,
l'évennement est interceptable via le module ThisWokbook.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Cancel=true
Call mamacroquienregistreautrement
End Sub


Second Point:
Le fait qu'une touche ait été pressée n'est pas réellement déterminant
d'une modification.
On pourrait appuyer sur x touches et que cela ne modifie rien.
De même on peut modifier le feuille sans utiliser de touches,
simplement click droit souris Coller pour ne citer que cet exemple.

En revanche si ce n'était qu'un cas d'école pour voir comment intercepter
une frappe de touche cela dépend du contexte et quand sur quel cas
l'intercepter.
Par exemple au niveau application tu as OnKey, au niveau d'un UserForm
KeyPress
...cf l'aide ou précise ici suivant un besoin plus concret.

Cordialement.

--
LSteph

Avatar
gmlsteph
Bonjour,

Non que nenni que Non il ne manque rien!
(rappel:Notre ami a prévu de mettre 0 ou 1 par macro en z1 dans son autre macro (qui devra utiliser enableevents bien sur.)

Explication:
les crochets [ ] pourraient signifier "evaluate"
Evaluer donc z1 signifie tester ce que renvoie z1
si z1 renvoie 1 donc l'évaluation de z1 est 1
Utilisé dans un IF le 1 est pris comme booleen soit renvoie VRAI
et le 0 Zero renvoie FAUX
Ainsi Si Z1 suffit à renvoyer vrai ou faux
if [z1] then [z1]=0
Si vrai on met 0

A noter que dans l'expression then [z1]
le then attendant une action sur un objet l'Evaluate s'arrette alors à l' expression de Z1 en tant que cellule d'adresse z1 pour lui attribuer la val eur zero 0.

Voili voilou, ....

--
LSteph
Avatar
Jacquouille
Salut Steph
A te lire, il me semble que l'on m'avait déjà expliqué cela ....in illo
tempore.
malheureusement, mon neurone a oublié d'enregistrer.
Mille mercis et bonne journée.
Jacques.



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
a écrit dans le message de groupe de discussion :


Bonjour,

Non que nenni que Non il ne manque rien!
(rappel:Notre ami a prévu de mettre 0 ou 1 par macro en z1 dans son autre
macro (qui devra utiliser enableevents bien sur.)

Explication:
les crochets [ ] pourraient signifier "evaluate"
Evaluer donc z1 signifie tester ce que renvoie z1
si z1 renvoie 1 donc l'évaluation de z1 est 1
Utilisé dans un IF le 1 est pris comme booleen soit renvoie VRAI
et le 0 Zero renvoie FAUX
Ainsi Si Z1 suffit à renvoyer vrai ou faux
if [z1] then [z1]=0
Si vrai on met 0

A noter que dans l'expression then [z1]
le then attendant une action sur un objet l'Evaluate s'arrette alors à
l'expression de Z1 en tant que cellule d'adresse z1 pour lui attribuer la
valeur zero 0.

Voili voilou, ....

--
LSteph
Avatar
gmlsteph
etiam in eos tempora dixi...

Oui mais tout de même
quoi que l'on fasse il n'y aura pas forcément toujours du vin au repas
mais les femmes elles , seront toujours au parfum!

Amicales Salutations.

--
LSteph