XL 2019 Incrémentation nom de fichier

  • Initiateur de la discussion Initiateur de la discussion Leguyl
  • Date de début Date de début

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 !

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 & ")" &...
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.
 
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.
 
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:
- 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

Retour