Microsoft 365 VBA Nommer le fichier

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Je me demande comment on nomme le fichier comme 05092023 - Mon fichier. En fait, mon code
VB:
NomFichier = &Format(Date, "ddmmyyyy")&"-Mon fichier.xlsx"
ne marche pas. Merci pour votre aide.

Voici mon code :

VB:
Sub Fichier()
Dim Sh As Worksheet
Dim NomFichier As String

'Le nom du nouveau fichier

NomFichier = Format(Date, "yyyymmdd") & "-Mon fichier.xlsx"
With ThisWorkbook
For Each Sh In ThisWorkbook.Worksheets
With Sh
With .UsedRange
.Value = .Value
End With
End With
Next
End With
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & _
NomFichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
 
Dernière édition:
Solution
C
Re,

Dans ce cas, il faut plutôt faire

VB:
Sub Fichier()
  Dim Wb As Workbook, Sh As Worksheet
  Dim NomFichier As String
  'Le nom du nouveau fichier
  NomFichier = Format(Date, "yyyymmdd") & "-Mon fichier.xlsx"
  ' Avec le classeur actuel
  With ThisWorkbook
    ' Pour chaque feuille du lcasseur
    For Each Sh In ThisWorkbook.Worksheets
      ' Si la variable du nouveau classeur est vide
      If Wb Is Nothing Then
        Sh.Copy
        Sh.UsedRange.Value = Sh.UsedRange.Value
        Set Wb = ActiveWorkbook
      Else  ' Sinon
        Sh.Copy After:=Wb.Sheets(Wb.Sheets.Count)
        Sh.UsedRange.Value = Sh.UsedRange.Value
      End If
    Next Sh
  End With
  ' Sauvergarder le nouveau classeur au format .xlsx
  Wb.SaveAs...

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Comme ceci et je vous conseille de mettre la date au format américain
le tri chronologique se fera correctement ;)
VB:
NomFichier = Format(Date, "yyyymmdd") & "-Mon fichier.xlsx"

A+
Merci, mais je reçois un message :
1693987845886.png

On dirait que je ne peux pas exporter en xlsx via vba ?
 
C

Compte Supprimé 979

Guest
Re,

Perso, je n'avais pas vu la modification apportée sur le post#1

De plus, je ne comprends pas que vous vouliez enregistrer le fichier
avec lequel vous travaillez en VBA 🤔

En général on utilise un classeur "maitre" qui contient les macros et travaille sur d'autres fichiers

A+
 
Dernière modification par un modérateur:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Re,

Perso, je n'avais pas vu la modification apportée sur le post#1

De plus, je ne comprends pas que vous vouliez enregistrer le fichier
avec lequel vous travaillez en VBA 🤔

En général on utilise un classeur "maitre" qui contient les macros et travaille sur d'autres fichiers

A+
Justement, c'est ce que je souhaiterais faire et enregistrer mon « nouveau fichier » comme Mon fichier xlsx.
 
C

Compte Supprimé 979

Guest
Re,

Dans ce cas, il faut plutôt faire

VB:
Sub Fichier()
  Dim Wb As Workbook, Sh As Worksheet
  Dim NomFichier As String
  'Le nom du nouveau fichier
  NomFichier = Format(Date, "yyyymmdd") & "-Mon fichier.xlsx"
  ' Avec le classeur actuel
  With ThisWorkbook
    ' Pour chaque feuille du lcasseur
    For Each Sh In ThisWorkbook.Worksheets
      ' Si la variable du nouveau classeur est vide
      If Wb Is Nothing Then
        Sh.Copy
        Sh.UsedRange.Value = Sh.UsedRange.Value
        Set Wb = ActiveWorkbook
      Else  ' Sinon
        Sh.Copy After:=Wb.Sheets(Wb.Sheets.Count)
        Sh.UsedRange.Value = Sh.UsedRange.Value
      End If
    Next Sh
  End With
  ' Sauvergarder le nouveau classeur au format .xlsx
  Wb.SaveAs Filename:=ThisWorkbook.Path & "\" & NomFichier, FileFormat:=xlOpenXMLWorkbook
End Sub

A+
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Re,

Dans ce cas, il faut plutôt faire

VB:
Sub Fichier()
  Dim Wb As Workbook, Sh As Worksheet
  Dim NomFichier As String
  'Le nom du nouveau fichier
  NomFichier = Format(Date, "yyyymmdd") & "-Mon fichier.xlsx"
  ' Avec le classeur actuel
  With ThisWorkbook
    ' Pour chaque feuille du lcasseur
    For Each Sh In ThisWorkbook.Worksheets
      ' Si la variable du nouveau classeur est vide
      If Wb Is Nothing Then
        Sh.Copy
        Sh.UsedRange.Value = Sh.UsedRange.Value
        Set Wb = ActiveWorkbook
      Else  ' Sinon
        Sh.Copy After:=Wb.Sheets(Wb.Sheets.Count)
        Sh.UsedRange.Value = Sh.UsedRange.Value
      End If
    Next Sh
  End With
  ' Sauvergarder le nouveau classeur au format .xlsx
  Wb.SaveAs Filename:=ThisWorkbook.Path & "\" & NomFichier, FileFormat:=xlOpenXMLWorkbook
End Sub

A+
Merci Bruno ! Si je veux copier juste la première feuille, est-ce que ce code est correct :
VB:
Sub Fichier()
  Dim Wb As Workbook, Sh As Worksheet
  Dim NomFichier As String
  'Nom du nouveau fichier
  NomFichier = Format(Date, "yyyymmdd") & "-Mon fichier.xlsx"
 
  With ThisWorkbook
 
      If Wb Is Nothing Then
        Sheets("Feuille1").Copy
        Set Wb = ActiveWorkbook
      End If
      
  End With
  ' Nouveau classeur au format .xlsx
  Wb.SaveAs Filename:=ThisWorkbook.Path & "\" & NomFichier, FileFormat:=xlOpenXMLWorkbook
End Sub
 
C

Compte Supprimé 979

Guest
Re,

Arf, j'avais oublié ce détail 😜

Voici le code optimisé, qui devrait fonctionner (j'espère)
VB:
Sub Fichier()
  Dim NomFichier As String
  'Le nom du nouveau fichier
  NomFichier = Format(Date, "yyyymmdd") & "-Mon fichier.xlsx"
  ' Copier la feuille 1 du classeur actuel dans un nouveau classeur
  ThisWorkbook.sheets("Feuille1").Copy
  ' Avec le nouveau classeur qui est actif
  With ActiveWorkbook  
    ' Inscrire les valeurs des cellules utilisées (supprime les formules)
   .Sheets(1).UsedRange.Value = .Sheets(1).UsedRange.Value
   ' Sauvergarder le nouveau classeur au format .xlsx
   .SaveAs Filename:=ThisWorkbook.Path & "\" & NomFichier, FileFormat:=xlOpenXMLWorkbook
  .Close
  End With
End Sub

A+
 

Discussions similaires

Réponses
7
Affichages
591

Statistiques des forums

Discussions
315 094
Messages
2 116 150
Membres
112 670
dernier inscrit
Flow87