Détection pression touche

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #24592521
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
gmlsteph
Le #24594841
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
Stéphane
Le #24595141
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


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
LSteph
Le #24598131
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" 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


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

Jacquouille
Le #24602521
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" 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


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

LSteph
Le #24602941
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" 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" 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


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

Jacquouille
Le #24603341
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" 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" 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


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

gmlsteph
Le #24603881
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
Jacquouille
Le #24604471
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
gmlsteph
Le #24604691
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
Publicité
Poster une réponse
Anonyme