[VBA] Macro ANNULER une suppression (par macr

Fermé
Air1 - 16 févr. 2010 à 16:51
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 - 16 févr. 2010 à 19:53
Bonjour à tous,


Je vous sollicite car j'ai besoin d'une grande aide. En effet, après quelques heures de recherche sur Internet, je n'ai pas encore trouvé de réponses à ma question.


[B]Je souhaite écrire une macro qui annule la suppression de lignes, de colonnes ou de toutes les cellules dans une feuille de calcul[/B]. (c'est à dire que la feuille de calcul revienne à l'état d'avant la suppression, [B]avec les mêmes valeurs et la même mise en forme[/B]). Excel le fait facilement, donc cela doit être possible à faire. Le problème est que je n'ai pas accès au code Excel...


J'ai donc bien cerné le fonctionnement de [B]l'application Undo[/B] (Application.Undo). Mon idée était de déclarer l'ensemble de mes cellules dans une variable, puis, après suppression, de coller les données (correspondant aux cellules avant suppression) de cette variable dans ma feuille de calcul.


Comme d'habitude, j'utilise une variable "Range" :

[CODE]Sub UndoSuppression()

Dim RangeSave as Range

Set RangeSave = Cells

End Sub[/CODE]


Mais la variable "RangeSave" s'adapte à la sélection, c'est à dire que quand, par exemple, je supprime 2 lignes, ces 2 lignes ne sont plus présentes dans "RangeSave". [B]Mon objectif est donc de fixer la plage de données dans une variable[/B], celle-ci restant TOUJOURS la même quelque soit les opérations effectuées (suppression de lignes...).


J'avais aussi pensé à boucler sur l'ensemble des cellules, mais cela est bien sûr ultra long, car il faut gérer plus de 15 millions de cellules !!!



Encore une fois, Excel le fait très simplement et rapidement, donc je pense que cela est largement faisable.



Si vous avez des idées ou des solutions, n'hésitez pas à les faire partager, pour faire avancer les autres ainsi que moi-même.



Merci d'avance et bonne journée.
A voir également:

2 réponses

Merci pour ta réponse.


J'avais pensé à l'idée de sauvegarder le classeur à chaque action (ici suppression) de ma macro.


Cependant, il faudrait que l'utilisateur ne puisse pas voir le classeur de sauvegarde à l'écran. Et question, comment supprimer le classeur de sauvegarde (il n'y en a qu'un puisqu'il serait écrasé à chaque action), puisque ma macro n'est pas liée à l'utilisation d'un fichier unique, mais à l'utilisation de plusieurs fichier par exécution de la macro par une commande dans la barre de menu.


A voir donc, il faudrait que je réfléchisse.



Bonne soirée.
1
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
16 févr. 2010 à 19:53
Je ne pensais pas nécessairement à un seul fichier de sauvegarde. Par exemple, si ton classeur de travail s'appelle Classeur1, tes fichiers de sauvegardes pourraient s'appeler Classeur1_svg1, Classeur1_svg2, ...
Inconvénient majeur, sa gourmandise en mémoire si ton classeur est volumineux. Pour ce qui est d'effacer les classeurs de sauvegarde, tu peux capter l'évènement BeforeSave du classeur en question et tu t'en sert pour supprimer les sauvegardes.

Autre solution, tu copies les onglets modifiés dans leur classeur d'origine et tu les mets en onglets très cachés (veryhidden) pour qu'ils soient inaccessibles par l'utilisateur.
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
16 févr. 2010 à 18:40
Bonsoir,
Tu peux par exemple sauvegarder une copie de ton classeur avant chaque action de ta macro (ou uniquement des feuilles modifiées) et le restaurer à la demande.
Sinon, tu peux regarder cet exemple :
https://www.jkp-ads.com/Articles/UndoWithVBA00.asp
0