Annuler une macro sur excel

Fermé
plastickman - 19 août 2009 à 10:22
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 - 25 août 2009 à 15:30
Bonjour,
J'aimerai pouvoir annuler une macro dans excel en appuyant à nouveau sur le bouton qui lui est dédié. Je pense que c'est possible mais je ne sais pas comment faire. Merci de votre aide.

jp
A voir également:

10 réponses

melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
20 août 2009 à 13:24
Bonjour,

je ne comprends pas très bien ton utilité.
Tu appuies une première fois sur le bouton et ca éxécute la macro.
Et lorsque tu rappuies sur le bouton, tu veux que le bouton disparaisse? Tu veux que la macro disparaisse? Ou tout simplement désactiver le clic sur le bouton?
0
Effectivement, je n'ai pas été très clair ...
Je voudrais que lorsque je rappuie sur le même bouton, annuler l'action précédente, pouvoir revenir en arrière en fait. Par exemple: en admettant que l'action affectée à mon bouton soit de masquer une ligne, j'aimerais que si j'appuie une seconde fois sur le bouton, la ligne concernée réapparaisse.
J'espère que je suis un peu plus clair.
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
21 août 2009 à 13:14
bonjour,

voici le code :

Private Sub CommandButton1_Click()
Application.Undo
End Sub

Attention, petit piège, il faut que la propriété TakeFocusOnClick du bouton soit à False.
0
Je suis pas sure de bien comprendre, il faut que je rajoute ce code à la fin de celui déjà affecté au bouton? C'est possible de mettre 2 codes sur le même bouton? Ou alors je dois juste rajouté la ligne "application.undo" à la fin juste avant le "End sub" du premier code ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
21 août 2009 à 21:52
Bonsoir,

Pour annuler les actions faites par macro tu n'as pas d'autre choix que de sauvegarder avant d'executer la macro et de restaurer.
A moins que ce ne soient que des actions simples sans perte de données auquel cas tu fais les actions inverses...
eric
0
Bonjour,
Le code que je lui ai donné fonctionne.
Il faut que tu mettes la ligne Application.Undo entre sub et end sub de ton code.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
23 août 2009 à 00:50
Bonjour,

Si on suit la doc excel undo n'annule que la dernière action faite par l'utilisateur, pas l'ensemble des actions d'une macro.
eric
0
Si j'ai bien compris, la seule solution serait de commencer mon code existant par "activeworkbook.save" et de créer un second code avec un second bouton qui restaurerait le fichier. Mais je ne connais pas le code qui permet de restaurer. Est ce que tu le connais ?

jp
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
24 août 2009 à 17:07
Bonjour,

Pour ca, j'aurais besoin de savoir ce que fais ta première macro pour que tu veuilles annuler les actions de cette dernière.
0
Bonjour,
En fait il y en a plusieurs:

Sub Conclusion()
'
' Conclusion Macro
' Macro enregistrée le 02/01/2008 par PERSO
'

'
Application.ScreenUpdating = False
Sheets("conclusion").Activate
Range("D14:D424").Select
For Each o In Selection
If o.Value = "NON" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "DOUTE" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Range("D430:D840").Select
For Each o In Selection
If o.Value = "NON" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "OUI" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Dim myvar As String, i As Integer, x As Boolean
i = 14
x = True
Do While i <> 424
If Range("D" & i).Value = "OUI" Then
x = False
Exit Do
End If
i = i + 1
Loop
If x = False Then Rows("5:6").RowHeight = 0.15
If x = True Then Rows("7:8").RowHeight = 0.15

Worksheets("fiche récapitulative").Activate
Call Tri_Efface_doubles([B7:B51])
Call Tri_Efface_doubles([B54:B98])
Call Tri_Efface_doubles([B101:B192])
Call Tri_Efface_doubles([B195:B286])
Call Tri_Efface_doubles([B289:B334])
Call Tri_Efface_doubles([B337:B382])
Call Tri_Efface_doubles([B385:B429])

Range("B7:B51").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Range("B54:B98").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Range("B101:B192").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Range("B195:B286").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Range("B289:B334").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Range("B337:B382").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Range("B385:B429").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next



Range("i435:i845").Select
For Each o In Selection
If o.Value = "NON" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "DOUTE" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next
Range("i852:i1262").Select
For Each o In Selection
If o.Value = "NON" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "OUI" Then
o.EntireRow.Hidden = True
End If
Next
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next

Sheets("FACTURE - devis").Select
Range("F46:F49").Select
For Each o In Selection
If o.Value = "" Then
o.EntireRow.Hidden = True
End If
Next
Sheets("Renseignements").Activate
If Range("l23") <> 1 Then
Sheets(Array("couverture DTA", "fiche récapitulative")).Delete
End If
If Range("l23") = 1 Then
Sheets("amiante").Delete
End If
Sheets("conclusion").Activate
Range("c10").Select
Application.ScreenUpdating = True
End Sub


sachant que:

Sub Tri_Efface_doubles(plage) ' As Range)
Dim lig As Double ' ligne
Dim MJE As Boolean ' mise à jour écran
Dim RCL As Boolean ' type calcul
On Error GoTo Fin ' Sauvegarde des paramètres actuels d'affichage et de recalcul
If Application.ScreenUpdating Then MJE = True ' mise à jour écran
If Application.Calculation = xlCalculationAutomatic Then RCL = True ' type calcul
Application.Calculation = xlCalculationManual ' type calcul
Application.ScreenUpdating = False ' mise à jour écran
'tri plage initiale
plage.Sort Key1:=Cells(plage.Row, plage.Column), Order1:=xlAscending, Header:=xlNo _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For lig = plage.Row To plage.Count + plage.Row ' boucle sur plage
If Cells(lig + 1, plage.Column) = Cells(lig, plage.Column) Then
Cells(lig, plage.Column) = "" 'double effacé
End If
Next lig 'tri plage sans doubles
plage.Sort Key1:=Cells(plage.Row, plage.Column), Order1:=xlAscending, Header:=xlNo _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Fin: ' paramètres initiaux
If MJE Then Application.ScreenUpdating = True
If RCL Then Application.Calculation = xlCalculationAutomatic
End Sub
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
25 août 2009 à 15:30
Bonjour,

Ma question risque d'être bête mais plutôt que de chercher à annuler ce que te fais la macro pourquoi via la macro ne pas ajouter un nouveau classeur, copier les feuilles sur lesquelles tu veux travailler et faire ce que tu as à faire sur ce novueau classeur?

Ainsi, tu as une sauvegarde de l'ancien et tu travailles sur un nouveau.
0