Supprimer bouton après archivage
Bonjour,
Voila, je souhaite archiver chaque jour du mois dans un classeur via un bouton, et une fois la feuille dans le classeur, je souhaite que ce bouton soit supprimé.
Je l'ai inscris dans la macro mais cela ne fonctionne.
Quelque chose ne va pas dans le code selon vous ?
Dim cheminDestination As String
cheminDestination = "C:\Users\Astro\documents\archive.xlsx"
' Copie la feuille active dans un nouveau classeur
ActiveSheet.Copy
' Renomme la feuille avec la date du jour
With ActiveWorkbook.Sheets(1)
.Name = Format(Date, "dd mmmm yyyy")
End With
' Enregistre le nouveau classeur
ActiveWorkbook.SaveAs Filename:=cheminDestination
' Passe au nouveau classeur
Set nouveauClasseur = ActiveWorkbook
' Supprime le bouton (avec gestion des erreurs)
On Error Resume Next
nouveauClasseur.Sheets(1).Shapes("VotreBouton").Delete
On Error GoTo 0
' Ferme le nouveau classeur
nouveauClasseur.Close FalseMerci beaucoup !
Bonjour,
La copie d'une feuille n'inclue pas les Shapes donc ce code suffit :
Sub test()
Sub test()
Dim cheminDestination As String
cheminDestination = "C:\Users\Astro\documents\archive.xlsx"
' Copie la feuille active dans un nouveau classeur
' Mais pas la Shape !
ActiveSheet.Copy
' Renomme la feuille avec la date du jour
With ActiveWorkbook.Sheets(1)
.Name = Format(Date, "dd mmmm yyyy")
End With
' Enregistre le nouveau classeur
ActiveWorkbook.SaveAs Filename:=cheminDestination
' Ferme le nouveau classeur
ActiveWorkbook.Close
End SubA+
Bonsoir !
Merci de ton aide !
Je voulais utilisé le Shape afin de supprimer le bouton qui est lié à ma Macro dans le classeur d'archivage. Sauf que cela ne fonctionnait pas. As-tu une solution pour cela ?
Je ne sais pas !
Je pense qu'une macro ne peut pas s'auto-détruire.
Il faudrait sans doute utiliser une macro de destruction externe (située dans un autre classeur ou dans un perso.xlam...)
A+
Bonsoir,
Si l'onglet "archivé" ne comporte qu'un seul objet, peut-être ainsi?
Dim cheminDestination As String
Dim Shp As Shape
cheminDestination = "C:\Users\Astro\documents\archive.xlsx"
' Copie la feuille active dans un nouveau classeur
ActiveSheet.Copy
' Renomme la feuille avec la date du jour
With ActiveWorkbook.Sheets(1)
.Name = Format(Date, "dd mmmm yyyy")
For Each Shp In .Shapes
Shp.Delete
Next Shp
End With
' Enregistre le nouveau classeur
ActiveWorkbook.SaveAs Filename:=cheminDestination
' Passe au nouveau classeur
Set nouveauClasseur = ActiveWorkbook
' Ferme le nouveau classeur
nouveauClasseur.Close FalseMerci à tous les deux pour votre apport !!
Le code de Cousinhub fonctionne, super content !
Un problème en appel souvent un autre ^^
Je me suis rendu compte que le code créait à chaque fois un nouveau classeur, or je veux ajouter une feuille au classeur à la suite sans créer constamment de nouveaux fichiers.
J'ai modifié le code en gardant, l'ajout de Cousinhub, cela fonctionne mais ce qui m'embête c'est que la copie ne prend pas en compte toutes les propriétés de la feuille, notamment la largeur des lignes...
Avez-vous une solution ?
Encore merci.
Sub Archive()
Dim cheminDestination As String
Dim Shp As Shape
Dim wb As Workbook
cheminDestination = "C:\Users\Astro\documents\archive.xlsx"
' Vérification si le fichier existe déjà
If Dir(cheminDestination) <> "" Then
Set wb = Workbooks.Open(cheminDestination)
Else
ActiveSheet.Copy
Set wb = ActiveWorkbook
wb.SaveAs Filename:=cheminDestination
End If
' Copier toute la feuille active et coller dans la nouvelle feuille
ActiveSheet.UsedRange.Copy
With wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count))
.Name = Format(Date, "dd mmmm yyyy")
.Range("A1").PasteSpecial xlPasteAll
For Each Shp In .Shapes
Shp.Delete
Next Shp
End With
' Enregistrer les modifications
wb.Save
' Display confirmation message (added)
MsgBox "Le fichier a été enregistré avec succès à l'emplacement: " & cheminDestination, vbInformation, "Archivement réussi"
wb.Close False
End Sub