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
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
A voir également:
- Annuler une macro sur excel
- Liste déroulante excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Formule excel - Guide
- Déplacer une colonne excel - Guide
- Calculer une moyenne sur excel - Guide
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
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?
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?
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.
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.
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
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.
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.
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 ?
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
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
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
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.
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.
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
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
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
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
jp
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
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.
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.
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
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
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
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.
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.