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 !
Je me retrouve devant un petit problème.
J'ai mis au point un outil Excel sur lequel tourne des macros événementielles Private Sub Worksheet_Change et Private Sub Worksheet_BeforeDoubleClick.
Le problème est lorsque l'utilisateur commet une erreur du type copier / coller : il lui est impossible d'annuler la manipulation (CTRL + Z) puisque l'évènement Worksheet_Change s'est produit... (et donc la macro a fait son oeuvre).
Avez vous une idée de comment je peux résoudre ce problème : avoir une macro événementielle et permettre l'annulation de la dernière modification "utilisateur" ?
Ta procédure réactive l'événementiel à la fin (donc il est de nouveau actif)
Si tu fais deux procédures séparées pour traiter ton cas spécifique : entre les deux lancements tu peux procéder aux corrections que tu veux : ta procédure événementielle ne sera pas exécutée puisque l'événementiel est désactivé
Il s'agit d'une procédure d'exception pour permettre tes corrections hors gestion événementielle
Après correction, relancer la deuxième procédure pour réactiver l'événementiel
Bonjour,
regarde du côté de l'utilisation de Application.Undo
Extrait de l'aide Excel :
Référence du développeur Excel
Application.Undo, méthode
Cette méthode annule la dernière opération commandée à partir de l'interface utilisateur.
Syntaxe
expression.Undo
expression Variable qui représente un objet Application.
Remarques
Cette méthode n'annule que la dernière opération commandée par l'utilisateur avant l'exécution de la macro et doit figurer en première ligne dans la macro. Elle ne peut être utilisée pour annuler des commandes Visual Basic.
Exemple
Cet exemple montre comment annuler la dernière opération commandée à partir de l'interface utilisateur. L'exemple doit figurer en première ligne dans la macro.
Une macro reliée à un raccourci clavier par exemple annule la dernière opération effectuée à partir du moment ou cette opération n'a pas été déclenchée par la procédure événementielle.
A voir si cela peut te servir dans ton cas précis (pas d'exemple fourni donc pas de test possible).
A+
Désolé, j'étais en déplacement hier et je n'ai pu testé cette méthode que ce matin.
Je n'arrive pas à ce que je souhaite...
Je vais détailler pas à pas les opérations réalisées, cela sera peut être plus clair.
Le fichier Excel permet de faire de la saisie semi-automatique en fonction de renseignements donnés par l'utilisateur.
Des cellules sont donc dédiées à l'utilisateur (cellules vides), d'autres ont des valeurs pré-enregistrées (validation de données avec liste des valeurs dans une feuille data) et d'autres sont remplies pas une macro événementielle en fonction de ce que l'utilisateur a rempli.
A chaque changement dans la feuille, la macro se lance. En fonction de ce qu'elle trouve, elle peut ne rien faire ou ajouter des valeurs dans ses cases dédiées.
Certains utilisateurs utilisent la fonction "copier/coller". Pourquoi pas.
Lorsque cela est bien utilisé, pas de problème.
Le problème est lorsqu'il copie/colle une plage de cellules (donc > à 1 cellule).
Ce copier/coller change la mise en forme des cellules, change les valeurs des cellules et les formules... bref ce n'est pas bon.
L'utilisateur en voyant la boulette veut faire "Annuler" mais rien ne se passe : de mon point de vue, c'est normal car la macro événementielle a déjà tourné !
Donc, ce que je souhaite faire : avoir une fonction/macro... qui me permette d'annuler une action utilisateur APRES les actions d'une macro événementielle.
J'ai testé :
VB:
Sub annuler()
Application.Undo
MsgBox ("Dernière action annulée")
End Sub
Et Excel me dit que me dit que la méthode 'Undo' de l'objet '_Application' à échoué...
Je vous joins un fichier Excel extremement simpliste pour illustrer sur lequel j'ai mis une macro événementielle.
Taper une valeur en cellule A1, en E5 apparait "C'est fait"
Essayer d'annuler... Voilà tout est dit. En fait, rien ne vaut un exemple.
- 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