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

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

soan

XLDnaute Barbatruc
Inactif
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:

Jacky67

XLDnaute Barbatruc
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 !
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:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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
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. :)
 

soan

XLDnaute Barbatruc
Inactif
@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
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
@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 !
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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
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
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 !
 

soan

XLDnaute Barbatruc
Inactif
@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
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
@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 !
 

Jacky67

XLDnaute Barbatruc
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 !
*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:

Discussions similaires