XL 2016 annulation ou désactivation de macro

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 !

richardlion

XLDnaute Occasionnel
Bonjour a tous, je viens vers vous pour essayer de trouver une solution a mon probleme,
j'ai une macro ci dessous qui par un clic droit copie vers une autre feuille dans des cellules une ligne de donnée d'un tableau structuré. je ne souhaite pas que cette copie soit permanente je souhaite pouvoir l'annuler pour revenir aux donnees original
est t'il possible d'avoir une macro qui fasse cette annulation. merci a vous
en Pj le fichier
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LO As ListObject, c As Range
For Each LO In ListObjects
LO.Range.Interior.ColorIndex = xlNone
Next LO
If Target.Count > 1 Or Intersect(Target, Range(ListObjects(1).Name)) Is Nothing Then Exit Sub
For Each LO In ListObjects
Set c = LO.Range.Cells(Target.Row - ListObjects(1).Range.Row + 1, 1)
c(1, 2).Resize(, 8).Interior.Color = vbYellow
Next LO
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Count > 1 Or Intersect(Target, Range(ListObjects(1).Name)) Is Nothing Then Exit Sub
Dim LO As ListObject, c As Range, cc As Range, col%
Cancel = True
For Each LO In ListObjects
Set c = LO.Range(Target.Row - ListObjects(1).Range.Row + 1, 1)
Set cc = Sheets("SYNTHESE").Columns(1).Find(LO.Range(1), , xlValues, xlWhole)
col = Application.Match(CLng(CDate(LO.Range(0, 1))), cc.EntireRow, 0) 'recherche la colonne de la date
cc(2, col).Resize(8) = Application.Transpose(c(1, 2).Resize(, 8))
cc(2).Resize(7).EntireRow.Interior.ColorIndex = xlNone 'RAZ
cc(2, col).Resize(7).Interior.Color = vbYellow
Next LO
MsgBox "Feuille SYNTHESE mise à jour"
End Sub
 

Pièces jointes

Bonjour

Ce qui a été fait par une macro ne peut pas être annulé par la flèche "retour" d'excel
==> si tu veux pouvoir remettre ce qui était avant l'execution de la macro, il faut alors au préalable enregistrer les anciennes données pour pouvoir les remettre.
 
Bonjour,
Peut être une idée.
Si on mémorise les cellules cliquées ( par leur adresse ) on peut déterminer quelle a été le transfert précédent.
Donc pour annuler il faut faire le transfert avec l'adresse précédente.
Dans la PJ j'ai mis la gestion des adresses mais pas le transfert d'annulation, j'ai pas envie de me plonger dans le code, mais le principe est là.
VB:
Variables déclarées en public :
Public Précédent, Actuel

puis :
'---------------
' Mémorisation
Précédent = Actuel
Actuel = Target.Address
[L3] = Précédent ' Ecriture pour test visualisation
[L4] = Actuel
'---------------
 

Pièces jointes

Bonjour,
Peut être une idée.
Si on mémorise les cellules cliquées ( par leur adresse ) on peut déterminer quelle a été le transfert précédent.
Donc pour annuler il faut faire le transfert avec l'adresse précédente.
Dans la PJ j'ai mis la gestion des adresses mais pas le transfert d'annulation, j'ai pas envie de me plonger dans le code, mais le principe est là.
VB:
Variables déclarées en public :
Public Précédent, Actuel

puis :
'---------------
' Mémorisation
Précédent = Actuel
Actuel = Target.Address
[L3] = Précédent ' Ecriture pour test visualisation
[L4] = Actuel
'---------------
bonjour sylvanu, merci pour l'idée, c'est un bon debut, je reste ouvert aux propositions des autres membres, merci a tous
 
Re,
Alors la solution de Vgendron.
- Avant un transfert on duplique les données de Synthèse vers une feuille de sauvegarde
- Si on appuie sur le bouton bleu, on retransfère les données de la sauvegarde vers la synthèse.
Avec :
VB:
Sub Sauvegarde(L)
Dim F, DL%, DC%
Set F = Sheets("SYNTHESE")
With Sheets("Sauvegarde")
    .Cells.Clear
    DL = F.Cells(F.Cells.Rows.Count, "A").End(xlUp).Row
    DC = F.Cells(9, F.Columns.Count).End(xlToLeft).Column
    .Range(.Cells(1, 1), .Cells(DL, DC)) = F.Range(F.Cells(1, 1), F.Cells(DL, DC)).Value
    .[A1] = L: .[A2] = DL: .[A3] = DC
End With
End Sub
Sub Annulation()
Dim F, DL%, DC%
Set F = Sheets("Sauvegarde")
With Sheets("SYNTHESE")
    DL = F.[A2]: DC = F.[A3]
    .Range(.Cells(1, 1), .Cells(DL, DC)) = F.Range(F.Cells(1, 1), F.Cells(DL, DC)).Value
    .[A1:A3].ClearContents
    MsgBox "Annulation du transfert dû" & Chr(10) & "au clic droit sur la ligne " & F.[A1]
End With
End Sub
 

Pièces jointes

Re,
Alors la solution de Vgendron.
- Avant un transfert on duplique les données de Synthèse vers une feuille de sauvegarde
- Si on appuie sur le bouton bleu, on retransfère les données de la sauvegarde vers la synthèse.
Avec :
VB:
Sub Sauvegarde(L)
Dim F, DL%, DC%
Set F = Sheets("SYNTHESE")
With Sheets("Sauvegarde")
    .Cells.Clear
    DL = F.Cells(F.Cells.Rows.Count, "A").End(xlUp).Row
    DC = F.Cells(9, F.Columns.Count).End(xlToLeft).Column
    .Range(.Cells(1, 1), .Cells(DL, DC)) = F.Range(F.Cells(1, 1), F.Cells(DL, DC)).Value
    .[A1] = L: .[A2] = DL: .[A3] = DC
End With
End Sub
Sub Annulation()
Dim F, DL%, DC%
Set F = Sheets("Sauvegarde")
With Sheets("SYNTHESE")
    DL = F.[A2]: DC = F.[A3]
    .Range(.Cells(1, 1), .Cells(DL, DC)) = F.Range(F.Cells(1, 1), F.Cells(DL, DC)).Value
    .[A1:A3].ClearContents
    MsgBox "Annulation du transfert dû" & Chr(10) & "au clic droit sur la ligne " & F.[A1]
End With
End Sub
Re,
Alors la solution de Vgendron.
- Avant un transfert on duplique les données de Synthèse vers une feuille de sauvegarde
- Si on appuie sur le bouton bleu, on retransfère les données de la sauvegarde vers la synthèse.
Avec :
VB:
Sub Sauvegarde(L)
Dim F, DL%, DC%
Set F = Sheets("SYNTHESE")
With Sheets("Sauvegarde")
    .Cells.Clear
    DL = F.Cells(F.Cells.Rows.Count, "A").End(xlUp).Row
    DC = F.Cells(9, F.Columns.Count).End(xlToLeft).Column
    .Range(.Cells(1, 1), .Cells(DL, DC)) = F.Range(F.Cells(1, 1), F.Cells(DL, DC)).Value
    .[A1] = L: .[A2] = DL: .[A3] = DC
End With
End Sub
Sub Annulation()
Dim F, DL%, DC%
Set F = Sheets("Sauvegarde")
With Sheets("SYNTHESE")
    DL = F.[A2]: DC = F.[A3]
    .Range(.Cells(1, 1), .Cells(DL, DC)) = F.Range(F.Cells(1, 1), F.Cells(DL, DC)).Value
    .[A1:A3].ClearContents
    MsgBox "Annulation du transfert dû" & Chr(10) & "au clic droit sur la ligne " & F.[A1]
End With
End Sub
Merci a vous pour la proposition, je teste tres vite pour validation, Cool
 
Re,
Alors la solution de Vgendron.
- Avant un transfert on duplique les données de Synthèse vers une feuille de sauvegarde
- Si on appuie sur le bouton bleu, on retransfère les données de la sauvegarde vers la synthèse.
Avec :
VB:
Sub Sauvegarde(L)
Dim F, DL%, DC%
Set F = Sheets("SYNTHESE")
With Sheets("Sauvegarde")
    .Cells.Clear
    DL = F.Cells(F.Cells.Rows.Count, "A").End(xlUp).Row
    DC = F.Cells(9, F.Columns.Count).End(xlToLeft).Column
    .Range(.Cells(1, 1), .Cells(DL, DC)) = F.Range(F.Cells(1, 1), F.Cells(DL, DC)).Value
    .[A1] = L: .[A2] = DL: .[A3] = DC
End With
End Sub
Sub Annulation()
Dim F, DL%, DC%
Set F = Sheets("Sauvegarde")
With Sheets("SYNTHESE")
    DL = F.[A2]: DC = F.[A3]
    .Range(.Cells(1, 1), .Cells(DL, DC)) = F.Range(F.Cells(1, 1), F.Cells(DL, DC)).Value
    .[A1:A3].ClearContents
    MsgBox "Annulation du transfert dû" & Chr(10) & "au clic droit sur la ligne " & F.[A1]
End With
End Sub
je dois creer une feuille de sauvegarde?
 
bonjour Sylvanu, j'ai un petit probleme avec la macro d'origine qui fait la copie d'une ligne selectionné de la feuille HISTORIQUE TCD vers la feuille SYNTHESE, je m'explique logiquement la sauvegarde de mes tableaux structuré dans la feuille historique s'appelle toujours TCD ZERO VENTE et TCD FS, et ma feuille SYNTHESE ne comporte que deux pavés TCD ZERO VENTE et TCD FS quelques soit la date, le créateur de la macro a renommer les tableaux en TCD ZERO VENTE 1 TCD FS 1 pour une date et TCD ZERO VENTE 2 TCD FS 2 pour une autre date et ainsi de suite, je souhaiterais que la macro copie les donnees en fonction de la date et pas avec des noms différents cela est il possible. En PJ le fichier comme il doit etre avec les explications, si c'est possible
 

Pièces jointes

Dans la PJ elle est déjà crée. D'ailleurs si vous testez la PJ ça marche.
Je 'ai simplement mise en xlVeryHidden de façon qu'elle soit invisible.
Bonjour sylvanu, dans ma feuille synthèse, les valeurs de la colonne D ont une formule recherche V ou X qui rapatrie les donnes de TCD d'une autre feuille, quand j'active la macro annulation que vous m'avez proposé elle efface toute les formules de ma feuille de la colonne D peut on corriger cela? merci
 

Pièces jointes

Bonjour

Ce qui a été fait par une macro ne peut pas être annulé par la flèche "retour" d'excel
==> si tu veux pouvoir remettre ce qui était avant l'execution de la macro, il faut alors au préalable enregistrer les anciennes données pour pouvoir les remettre.
Bonjour vgendron ci apres la proposition de sylvanu qui a ete pensé par vous Alors la solution de Vgendron.
- Avant un transfert on duplique les données de Synthèse vers une feuille de sauvegarde
- Si on appuie sur le bouton bleu, on retransfère les données de la sauvegarde vers la synthèse. cette solution focntionne tres bien, le seul inconvénient est quelle supprime des formules que j'ai dans la colonne D, comment peut on modifier votre macro pour quelle ne prenne pas la colonne D, en PJ le fichier de test, a votre dispsosition pour échange
 

Pièces jointes

Hello

alors déjà, c'est pas ma solution mais bien celle de @sylvanu , moi j'ai juste donné un principe...
ensuite, comme j'ai plus trop suivi, quand je regarde ton dernier fichier, je ne vois aucune formule dans la feuille Synthèse colonne D

si tu veux "annuler" ce qui a été fait par la macro = remettre les anciennes valeur.. c'est aussi remettre (ou garder) les formules..
bref.. à l"annulation, il ne faut pas ecraser les formules..
 
- 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

Discussions similaires

Réponses
1
Affichages
320
Réponses
4
Affichages
143
Réponses
16
Affichages
997
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
231
Réponses
6
Affichages
548
Retour