Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Annuler un ClearContents

Metallicoco

XLDnaute Nouveau
Bonjour, j'aurais une question simple :

J'ai une petite macro qui efface les données d'un tableau avec ClearContents.
J'aurais aimé savoir s'il existe la possibilité d'annuler l'effacement en cas d'erreur pour récuperer les données effacées ?

Je vous remercie.

Le petit code de l'effacement

Sub Efface_2_E_TOR()
' Efface entrees tableau 2
Range("B76") = 0
Range("D77:G140").ClearContents
Range("D77").Select
End Sub
 
Solution
Bonjour
la solution est simple
il suffit que cette action de vider ton tableau soit dans le stack du undo
pour cela on fait simple
on le fait avec un wscript.shell.sendkeys "{DEL}"
c'est comme si tu l'avait fait à la main et donc tu l'a dans le stack undo
terminé
VB:
Sub efface()
[A1:D5].Select ' adapte  l'address de ta plage ici
CreateObject("wscript.shell").SendKeys ("{DEL}")
End Sub

Sub undo()
Application.undo
End Sub

wDog66

XLDnaute Occasionnel
Re,

Je pense effectivement que si l'effacement est fait par VBA, il n'est pas possible de l'annuler

Il faudra poser la question de savoir si on veut continuer avant l'effacement
 

piga25

XLDnaute Barbatruc
Bonjour à tous,
Peut être une piste avec cela:
VB:
Sub Macro1()

Dim toto As String, rangesave, lafeuille As Worksheet
 
 Set lafeuille = Sheets("Feuil1")
 With lafeuille
   rangesave = .UsedRange.Value
   RFormule = .UsedRange.Formula
   RnberFormat = .UsedRange.NumberFormat
  
   toto = .UsedRange.Address
   MsgBox "effacement des cellules des ligne  " & toto ' je le laisse pour toi... efface cette instruction ensuite
 
   .Rows("5:15").ClearContents 'ou Delete
   MsgBox "regarde ta feuille"
   Application.ScreenUpdating = False
   .Range(toto).Value = rangesave
   .Range(toto).Formula = RFormule
   .Range(toto).NumberFormat = RnberFormat
   Application.ScreenUpdating = True
   MsgBox "regarde ta feuille"
 End With

End Sub
 

Pièces jointes

  • Efface puis retour.xlsm
    22.9 KB · Affichages: 0

patricktoulon

XLDnaute Barbatruc
Bonjour
la solution est simple
il suffit que cette action de vider ton tableau soit dans le stack du undo
pour cela on fait simple
on le fait avec un wscript.shell.sendkeys "{DEL}"
c'est comme si tu l'avait fait à la main et donc tu l'a dans le stack undo
terminé
VB:
Sub efface()
[A1:D5].Select ' adapte  l'address de ta plage ici
CreateObject("wscript.shell").SendKeys ("{DEL}")
End Sub

Sub undo()
Application.undo
End Sub
 

Discussions similaires

Réponses
6
Affichages
466
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…