IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Incrémenter le nom d'un fichier à sa sauvegarde


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 95
    Par défaut Incrémenter le nom d'un fichier à sa sauvegarde
    Bonjour à tous!

    J'espère que le weekend a été bon! Aujourd'hui je vous sollicite dans l'espoir de trouver une réponse à mon problème.
    Effectivement, j'ai beaucoup du mal à incrémenter le nom d'un fichier par le biais d'une macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    Call SaveAsFile(Wbk)
     
    End Sub
     
    Public Function SaveAsFile(ByVal Wbk As Workbook)
     
    Dim fso As Object
    Dim FsoRepertoire As Object
    Dim FsoFichier As Object
    Dim str() As String
    Dim i As Byte
    Dim StrPrefixeFichier As String
     
    StrPrefixeFichier = "REF_COMP_"
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set FsoRepertoire = fso.GetFolder(ThisWorkbook.Path)
     
    'Boucle sur fichiers du repertoire
    For Each FsoFichier In FsoRepertoire.Files
        str = Split(FsoFichier.Name, ".")
            If str(UBound(str)) = "xls" And Left(str(0), Len(StrPrefixeFichier)) = StrPrefixeFichier Then
            If IsNumeric(Right(str(0), 2)) Then
                If Val(Right(str(0), 2)) > i Then i = Val(Right(str(0), 2))
            End If
        End If
    Next
     
    i = i + 1
     
    Wbk.SaveAs StrPrefixeFichier & IIf(Len(i) = 1, "0" & i, i) & ".xls"
     
    End Function
    Dans le programme ci-dessus, je n'arrive pas à incrémenter. Le nom du fichier reste avec l'indice 01...
    Donc voilà j'aimerai qu'on me dépanne de manière à incrémenté mes fichier de la façon suivante :

    REF_COMP_00
    REF_COMP_01
    REF_COMP_02

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Dans ta boucle ne gère pas la variable i, par défaut i = 0
    Normal qu'à i =i +1 donne 1
    Je suis allé un peu trop vite en lisant sur mon phone, mais quoi qu'il en soit il y'a une mauvaise gestion à ce niveau, le pas à pas est requis

    tu compares tes numériques en mettant toujours le plus grand dans une variable que tu auras initialisé
    Soit
    Dans ta boucle , récupère tes valeur numériques dans un Array et après la boucle utilise la formule avec Max.

    Il ne reste plus qu'à incrémenter de + 1
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 95
    Par défaut
    Citation Envoyé par RyuAutodidacte Voir le message
    Bonjour,

    Dans ta boucle ne gère pas la variable i, par défaut i = 0
    Normal qu'à i =i +1 donne 1
    Je suis allé un peu trop vite en lisant sur mon phone, mais quoi qu'il en soit il y'a une mauvaise gestion à ce niveau, le pas à pas est requis

    tu compares tes numériques en mettant toujours le plus grand dans une variable que tu auras initialisé
    Soit
    Dans ta boucle , récupère tes valeur numériques dans un Array et après la boucle utilise la formule avec Max.

    Il ne reste plus qu'à incrémenter de + 1
    Très bien. Merci pour ta réponse rapide. Je vais voir ce que je peux faire.

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voilà ce que cela donne
    Images attachées Images attachées  

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 95
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut, voilà ce que cela donne
    Comment as tu fait ?

    Je n'arrive pas à faire l'incrémentation. REF_COMP_.xlsx est le seul fichier que je puisse créer. Ensuite lorsque je le ferme et relance la macro, lors de la sauvegarde on me demande si je souhaite écraser ...

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 95
    Par défaut
    Voilà le code entier :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Public Sub REF_COMP()
     
    Dim Wbk, thisWbk As Excel.Workbook
    Dim Sht, thisSht As Excel.Worksheet
    Dim FileName, Fichier, Chemin As String
    Dim LR, i As Long
     
    Set thisWbk = ThisWorkbook
    Set thisSht = thisWbk.Sheets("Export")
    Set Wbk = Workbooks.Add ' On ajoute un classeur
    'Set Sht = Wbk.Sheets("Current")
     
     thisWbk.Activate
     thisSht.Activate
     Cells.Select
     Application.CutCopyMode = False
     Selection.Copy
     Wbk.Activate
     Cells.Select
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    'Supprime les ligne érronées
     LR = Range("A" & Rows.Count).End(xlUp).row
     For i = LR To 1 Step -1
        If IsError(Range("A" & i)) Then Rows(i).Delete
     Next i
     
    ' Création du nom du fichier
       Chemin = ThisWorkbook.Path
       FileName = "REF_COMP_"
     
    Fichier = RenommerFichier(Chemin, FileName)
    Wbk.SaveAs FileName:=Fichier
     
    End Sub
     
    Private Function RenommerFichier(ByVal sDossier As String, ByVal sNomfichier As String) As String
    Dim sNouveauNom As String
    Dim sPre As String, sExt As String
    Dim i As Long
    Dim FSO As Object
     
       Set FSO = CreateObject("Scripting.FileSystemObject")
        If FSO.FileExists(sDossier & "\" & sNomfichier) Then
            sNouveauNom = sNomfichier
            sPre = FSO.GetBaseName(sNomfichier)
            sExt = FSO.GetExtensionName(sNomfichier)
     
            i = 0
            While FSO.FileExists(sDossier & "\" & sNouveauNom)
                i = i + 1
                sNouveauNom = sPre & Chr(40) & Format(i, "000") & Chr(41) & Chr(46) & sExt
            Wend
            sNomfichier = sNouveauNom
        End If
        Set FSO = Nothing
     
       RenommerFichier = sDossier & "\" & sNomfichier
    End Function

  7. #7
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, extrait de ceci

    L'extension proposée par défaut lors de l'enregistrement d'un classeur est le type .xlsx.

    Les autres extensions XML sont:
    * Classeur autorisant les macros (.xlsm)
    * Modèle par défaut (.xltx)
    * Modèle autorisant les macros (.xltm)
    * Macro complémentaire (.xlam)
    * Le dernier format .xlsb, est une version binaire non XML.

    La lettre x en fin d'extension signifie que le fichier ne contient aucune macro. La lettre m signifie que le fichier contient des macros. Si vous enregistrez et fermez votre classeur au format .xlsx alors qu'il contenait des macros, celles ci seront perdues.
    Donc quel format en sauvegarde : xls, xlsx etc ?

    Tu as un exemple pour une feuille ici, à adapter à ton contexte.

  8. #8
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir ici pour un problème similaire via une fonction.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. incrémenter le nom d'un fichier de sortie ?
    Par robbywan dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 24/08/2012, 17h21
  2. Incrémenter le nom d'un fichier
    Par gangstarrr dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/03/2011, 11h29
  3. Réponses: 7
    Dernier message: 16/04/2008, 14h43
  4. lire nom de fichier pour sauvegarde ensuite sur presse papier
    Par chapeau_melon dans le forum VBScript
    Réponses: 3
    Dernier message: 21/03/2007, 20h35
  5. sauvegarder le nom d'un fichier grace a un batch ?
    Par Phenomenium dans le forum Windows
    Réponses: 5
    Dernier message: 02/06/2004, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo