XL 2019 Incrémentation nom de fichier

Leguyl

XLDnaute Occasionnel
Bonjour à tou(te)s,

J'enregistre en général mes fichiers Excel à l'aide de ce code VBA :

VB:
Sub SaveAs()
    ThisWorkbook.SaveAs Replace(ThisWorkbook.Path, "\Template", "\Sorties\") & "Devis " & [Code] & " - " & [Firme] & " - " & [Sujet] & ".xlsm"
End Sub

J'aimerais que, si le nom de fichier existe déjà, Excel me propose de l'écraser, l'incrémenter ou annuler l'enregistrement.

Pour l'incrémentation si le nom du fichier déjà existant est monfichier.xlsm, j'aimerais que le nom incrémenté soit monfichier (1).xlsm et monfichier (2).xlsm pour le suivant etc.

J'ai bien trouvé ce post sur le sujet mais je ne vois pas comment adapter le code dans mon cas.

Je suis preneur de toute solution qui m'aidera à avancer.

Bonne fin de journée,
Leguyl
 
Solution
Bonjour,

Voici une proposition.
J'ai un peu modifié la logique de ta macro, au cas où des fichiers Devis Code - Firme - Sujet (x).xlsm existent alors que le fichier Devis Code - Firme - Sujet.xlsm n'existe pas.

VB:
Sub Sauvergarde()
'
Dim i As Byte
Dim Chemin As String, NomFichier As String

'    Chemin = "t:\Data\Sorties\"
    Chemin = ThisWorkbook.Path & "\..\..\Data\Sorties\"
    NomFichier = "Devis " & [Code] & " - " & [Firme] & " - " & [Sujet]

    If Dir(Chemin & NomFichier & " (*).xlsm") = "" Then

        If Dir(Chemin & NomFichier & ".xlsm") = "" Then
            ThisWorkbook.SaveAs Chemin & NomFichier & ".xlsm"
        End If

    Else

        i = 1
        While Dir(Chemin & NomFichier & " (" & i & ")" &...

Deadpool_CC

XLDnaute Accro
pas le plus simple de devoir rechercher tous les fichiers du même nom, et trouver le N° le plus grand.

Pourquoi tu n'incrémente pas ton nom de fichier avec une valeur qui sera unique tel qu'un horodatage au format "aaaammjjhhmmss" ...
 

Leguyl

XLDnaute Occasionnel
pas le plus simple de devoir rechercher tous les fichiers du même nom, et trouver le N° le plus grand.

Pourquoi tu n'incrémente pas ton nom de fichier avec une valeur qui sera unique tel qu'un horodatage au format "aaaammjjhhmmss" ...
Bonjour,

J'ai déjà procédé de la sorte pour d'autres fichiers, c'est vrai que c'est bien plus simple à mettre en œuvre mais ce n'est pas ce que veulent les utilisateurs finaux des fichiers enregistrés depuis ce template.
 

Leguyl

XLDnaute Occasionnel
J'ai retrouvé dans mon lot de fichiers, une solution qui fonctionne avec un chemin absolu

VB:
Sub SaveAs()
    
    Dim x As String, i As Byte
    
    x = Dir("t:\Data\Sorties\" & "Devis " & [Code] & " - " & [Firme] & " - " & [Sujet] & ".xlsm")
    
    If x <> "" Then
    
        Do
            x = Dir("t:\Data\Sorties\" & "Devis " & [Code] & " - " & [Firme] & " - " & [Sujet] & " (" & i + 1 & ")" & ".xlsm")
            i = i + 1
        
        Loop While x <> ""
        ThisWorkbook.SaveAs "t:\Data\Sorties\" & "Devis " & [Code] & " - " & [Firme] & " - " & [Sujet] & " (" & i & ")" & ".xlsm"
      
    Else
    
        ThisWorkbook.SaveAs "t:\Data\Sorties\" & "Devis " & [Code] & " - " & [Firme] & " - " & [Sujet] & ".xlsm"
    
    End If
    
End Sub

... mais je dois pouvoir utiliser mon fichier depuis n'importe où et n'importe quel support, même lorsque je n'ai pas d'accès au serveur et je ne sais comment l'adapter pour un chemin relatif.
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Voici une proposition.
J'ai un peu modifié la logique de ta macro, au cas où des fichiers Devis Code - Firme - Sujet (x).xlsm existent alors que le fichier Devis Code - Firme - Sujet.xlsm n'existe pas.

VB:
Sub Sauvergarde()
'
Dim i As Byte
Dim Chemin As String, NomFichier As String

'    Chemin = "t:\Data\Sorties\"
    Chemin = ThisWorkbook.Path & "\..\..\Data\Sorties\"
    NomFichier = "Devis " & [Code] & " - " & [Firme] & " - " & [Sujet]

    If Dir(Chemin & NomFichier & " (*).xlsm") = "" Then

        If Dir(Chemin & NomFichier & ".xlsm") = "" Then
            ThisWorkbook.SaveAs Chemin & NomFichier & ".xlsm"
        End If

    Else

        i = 1
        While Dir(Chemin & NomFichier & " (" & i & ")" & ".xlsm") <> ""
            i = i + 1
        Wend
        ThisWorkbook.SaveAs Chemin & NomFichier & " (" & i & ")" & ".xlsm"

    End If

End Sub

je ne sais comment l'adapter pour un chemin relatif.
Relatif à quoi ? Relatif à ThisWorkBook, je suppose. Non ? 🤔

Seule chose à retenir pour le chemin relatif :
. est le dossier actuel
.. est le dossier parent
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 737
Messages
2 082 036
Membres
101 878
dernier inscrit
1475214