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

XL 2019 Purger le fichier initial après l'enregistrement

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 !

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Mon fichier s'appelle Mon_fichier_1.xlsm, je souhaite l'enregistrer comme Mon_fichier_final_1.xlsm. Je voudrais que le fichier initial soit purgé de données après l'enregistrement.

Mon code (dans ThisWorkbook) est :
VB:
Sub Purge()
    Sheets("1 - Feuille de Suivi ").Range("C4") = ""
    Sheets("1 - Feuille de Suivi ").Range("C6") = ""
    Sheets("1 - Feuille de Suivi ").Range("C7") = ""
    Sheets("1 - Feuille de Suivi ").Range("C11") = ""
    Sheets("1 - Feuille de Suivi ").Range("C12") = ""
End Sub

Public Sub Workbook_BeforeClose(Cancel As Boolean)
    If Me.Name = "Mon_fichier_1.xlsm" Then
        Call Purge
        Me.Save
    End If
End Sub

Malheureusement, ce code ne marche pas. En ouvrant le fichier initial je constate les données.

Merci beaucoup pour votre aide !
 
Solution
Bonjour Marie,

je te laisse essayer ce code VBA :

VB:
Public Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Name <> "Mon_fichier_1.xlsm" Then Exit Sub
  Worksheets("1 - Feuille de Suivi").[C4, C6, C7, C11, C12] = ""
  ThisWorkbook.Save
End Sub

vérifie quand même que :

* le nom du classeur est bien "Mon_fichier_1.xlsm" et pas "Mon fichier 1.xlsm"

* le nom de la feuille est bien "1 - Feuille de Suivi" et pas "1 - Feuille de Suivi "



ne cherche pas la sub Purge() : y'en n'a plus ! 😁

soan
Bonjour Marie,

je te laisse essayer ce code VBA :

VB:
Public Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Name <> "Mon_fichier_1.xlsm" Then Exit Sub
  Worksheets("1 - Feuille de Suivi").[C4, C6, C7, C11, C12] = ""
  ThisWorkbook.Save
End Sub

vérifie quand même que :

* le nom du classeur est bien "Mon_fichier_1.xlsm" et pas "Mon fichier 1.xlsm"

* le nom de la feuille est bien "1 - Feuille de Suivi" et pas "1 - Feuille de Suivi "



ne cherche pas la sub Purge() : y'en n'a plus ! 😁

soan
 
Dernière édition:
Bonjour à tous
Une proposition avec sauvegarde préalable sous "Mon_fichier_final_1.xlsm" avec les données
Attention au nom de fichier et au nom de feuille (espace en fin de nom)
VB:
Public Sub Workbook_BeforeClose(Cancel As Boolean)
    If Me.Name <> "Mon_fichier_1.xlsm" Then Exit Sub
    ActiveWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\Mon_fichier_final_1.xlsm"
    Worksheets("1 - Feuille de Suivi ").[C4, C6:C7, C11:C12] = ""
    Me.Save
End
 
Dernière édition:
Merci beaucoup Soan ! Est-il possible de récupérer le nom du fichier initial automatiquement ? Je crois que c'est pas possible car le fichier cible sera modifié aussi. Je suis débutante, c'est juste pour savoir. 🙂
 
@MarieParis

vbLf sert à passer à la ligne suivante ; Lf = Line feed = « nourrir » une ligne ; pour passer à la ligne suivante et aussi en laissant une ligne vide, il faut 2 vbLf ; pour éviter de mettre & vbLf & vbLF j'utilise une constante lf2 qui contient 2 caractères Lf ; ainsi je peux mettre & lf2 qui est plus court, et ça améliore la lisibilité du code VBA. 🙂 bien sûr, tu peux choisir d'utiliser un autre nom que lf2.​

soan
 
Merci beaucoup Soan !
 
En VBA existe-t-il une sorte de métadonnées pour ne pas mettre en dur "Mon_fichier_1.xlsm" ? En fait, si j'utilise & .Name & les données seront effacées même dans le fichier cible. Ce n'est pas bloquant pour moi, je peux mettre le nom en dur. C'était juste pour savoir si c'est possible 🙂 Merci beaucoup !
 
@MarieParis

j'suis pas sûr d'avoir bien compris ta demande ; peut-être comme ça :

VB:
Public Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim chn$
  chn = "Mon_fichier_1.xlsm"
  If ThisWorkbook.Name <> chn Then Exit Sub
  Worksheets("1 - Feuille de Suivi").[C4, C6, C7, C11, C12] = ""
  ThisWorkbook.Save
End Sub

je déclare une variable chaîne de caractères :

Dim chn$ : c'est idem que Dim chn As String

j'ai choisi le nom chn pour « chaîne » mais bien sûr, tu peux choisir un autre nom de variable, par exemple NomFichier ; cette variable peut contenir du texte, donc on peut y mettre "Mon_fichier_1.xlsm".

ce que j'ai fait est juste pour un exemple de code VBA, mais en pratique, ici, ça n'a pas d'intérêt puisque la valeur de chn ne change pas ; c'est seulement si tu utilises chn dans un code VBA où le nom du fichier varie que ça pourra avoir un intérêt.​

soan
 
Merci beaucoup !
 
*Autre version
VB:
Public Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim NOM$
    NOM = Me.Name  ' Mémorise le nom du classeur source
    Application.DisplayAlerts = False ' evite le message de sauvegarde de excel
    'Enregistre au format ".xlsX" (Sans macro) le classeur cible avec le nom du classeur source + "_final"
    ActiveWorkbook.SaveAs Filename:=Replace(ThisWorkbook.Name, ".xlsm", "_final"), FileFormat:=51
    Worksheets("1 - Feuille de Suivi ").[C4, C6:C7, C11:C12] = ""  ' efface les cellules correspondantes
    ActiveWorkbook.SaveAs Filename:=NOM, FileFormat:=52 ' enregisttre le classeur source (format ".xlsM")
    Application.DisplayAlerts = True
End Sub
 
Dernière édition:
- 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
5
Affichages
506
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…