Enregistrer sous en incrémentant la partie numérique du nom

Bonjour le Forum !

J’aimerais créer une macro toute bête, mais je n’ai pas le niveau suffisant en VBA, j’ai donc besoin d’aide.

Le fonctionnement serait le suivant :

– je suis dans un classeur nommé, par exemple : FICHE DE SUIVI 27.xlsm

– je lance la macro, qui enregistre le classeur sous le nom FICHE DE SUIVI 28.xlsm (donc en incrémentant de +1 la partie numérique du nom de fichier).

C’est tout !

Petites précisions :

– le nombre de caractères du nom de fichier est variable (donc l’emplacement de la partie numérique n’est pas immuable)

– le numéro restera toujours inférieur à 100

– le nouveau fichier doit être créé dans le répertoire du fichier d’origine

Merci pour toute aide !

Bonjour gloub,

Ce que tu demandes ne représente aucune difficulté ...

Mais ...

Le point essentiel est de savoir si ton numéro de suivi est conservé quelque part ... ( ou pas )

Merci pour ta réponse.

A priori non, mais je pensais récupérer le numéro dans le nom de fichier pour certains usages dans le classeur.

On pourrait procéder à l'inverse et dire que le numéro est en A1 dans une feuille donnée...

Re,

Bien sûr tout est possible avec Excel ... Mais autant te facilter la vie ...

Tu sauras d'accord avec que sans stockage du numéro de suivi ... l'incrémentation va devenir ... périlleuse ...

Si tu décides d'utiliser la cellule A1 de la Feuile lambda ... ce numéro peut être utilisé, stocké, et incrémenté sans difficulté ...

Alors OK pour la cellule A1 (à moins que ce soit possible de stocker ça dans une "variable cachée" – je ne connais pas le terme technique en VBA).

Re,

J'ai oublié de te poser une question de base ... et j'ai immédiatement supposé que ce numéro de suivi devait "survivre" aux différentes sessions d'Excel ...

En effet, s'il ne s'agit que d'une incrémentation à durée de vie limitée ... c'est-à-dire qu'à la réouverture d'Excel ou du Fichier, tu peux redémarrer l'incrémentation de zéro ... il n'y a pas besoin de stockage ...et la variable que tu nommes "cachée" ( en fait une variable Public" ferait très bien l'affaire ...

Donc, ce sont tes contraintes et les modalités dont tu as besoin pour cette incrémentation qui vont déterminer la marche à suivre ...

J'espère que cette explication est assez claire ...

Le numéro correspond au numero de semaine.

Il doit être figé définitivement à la création du fichier, càd que si on réouvre le fichier 3 mois après sa création, le numéro devra rester le même qu'à la création, pour éviter que le contenu de certaines cellules soit recalculé à la date de l'ouverture.

De ce point de vue, le stockage définitif du numéro dans le nom de fichier est pratique.

J'espère avoir été clair.

Re,

A titre de test initial ...

Sub Sauver()
Dim NouvNom As String
    ' Construire le nouveau nom du Fichier
    NouvNom = ActiveWorkbook.Path & "\" & "FICHE DE SUIVI " & Feuil1.Range("A1").Value & ".xlsx"
    ' Sauver le Fichier
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=NouvNom
End Sub

Merci pour le code. Je l'ai collé dans un fichier test avec une extension.xlsm

J'obtiens une erreur d'exécution 1004 :

"Impossible d'utiliser cette extension avec le type de fichier sélectionné. Modifiez l'extension du fichier dans la zone de texte Nom du fichier, ou sélectionnez un autre type de fichier dans la zone Type de fichier".

Keskispass ?

Re,

Pour rester cohérent ... si tu insères le code dans un fichier avec une extension .xlsm ... tu dois également modifier la fin de l'instruction qui construit le nouveau nom du fichier ... avec :

& ".xlsm"

Merci pour ta réponse.

Effectivement, je n’avais pas compris le problème avec l’extension. Maintenant c’est évident.

J’ai réussi à faire marcher ton code.

Du coup j’ai compris aussi qu’il oblige à créer une macro spécifique pour chaque fichier, puisque c’est la macro qui donne le nom au fichier créé.

Si c’est possible et si c’est pas trop demander, je préférerais une macro « générique » càd qui fonctionne sur n’importe quel nom de fichier, autrement dit :

FICHIER_TEST_01 → FICHIER_TEST_02

toto321 → toto322

Est-ce possible ?

Merci !

Bonjour,

Comme tu t'en doutes ... avec Excel ... tout est possible ...

Ci-dessous le code à tester :

Sub Sauver()
Dim NouvNom As String
Dim Nomfich As String

Nomfich = ActiveWorkbook.Name
Nomfich = Replace(Nomfich, ".xlsm", "")
    ' Construire le nouveau nom du Fichier
    NouvNom = ActiveWorkbook.Path & "\" & Nomfich & " " & Feuil1.Range("A1").Value & ".xlsm"
    ' Sauver le Fichier
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=NouvNom
End Sub 

Merci pour ta réponse.

J'ai testé le code. Ça marche...mais le n° s'ajoute au nom de fichier sans remplacer le n° précédent,

autrement dit, en 3 exécutions successives de la macro (et en incrémentant à chaque fois le nombre contenu en A1), j'obtiens :

Classeur1 → Classeur1 2 → Classeur1 2 3 → Classeur1 2 3 4,

au lieu de :

Classeur1 → Classeur2 → Classeur3 → Classeur4

Que faut-il changer dans le code pour obtenir ce fonctionnement ?

Merci !

Bonjour,

Ci-joint ton fichier test ...

Il suffit de sauver ...

54test-gloub-0.xlsm (16.98 Ko)

Merci pour ta réponse (et pour ta persévérance).

Je sens qu'on y est presque !

Je dis presque, parce que, en testant ton code, je m'aperçois que le suffixe continue de s'incrémenter, même si je renomme manuellement un fichier avec un nombre plus petit.

Pour être plus clair : je teste le code avec un fichier appelé TEST 0.

A chaque clic sur le bouton, il se réenregistre en TEST 1, puis TEST 2, puis TEST 3. C'est parfait.

Maintenant, je test le code sur un fichier nommé TOTO 1.

Au prochain clic, le fichier va être enregistré sous TOTO 4 (4 étant la dernière valeur incrémentée + 1), au lieu de TOTO 2, qui aurait été attendu.

Que faire ?

Merci pour ta réponse (et pour ta persévérance).

Je sens qu'on y est presque !

Je dis presque, parce que, en testant ton code, je m'aperçois que le suffixe continue de s'incrémenter, même si je renomme manuellement un fichier avec un nombre plus petit.

Pour être plus clair : je teste le code avec un fichier appelé TEST 0.

A chaque clic sur le bouton, il se réenregistre en TEST 1, puis TEST 2, puis TEST 3. C'est parfait.

Maintenant, je test le code sur un fichier nommé TOTO 1.

Au prochain clic, le fichier va être enregistré sous TOTO 4 (4 étant la dernière valeur incrémentée + 1), au lieu de TOTO 2, qui aurait été attendu.

Que faire ?

EDIT : mea culpa.

Je me rends compte que j'ai dû dérégler un truc en cherchant à adapter ton fichier à l'ergonomie que je souhaite mettre en place.

Du coup je poste mon fichier après mon adaptation, ça évitera que je crée de nouveaux problèmes en cherchant à adapter du code qui en base marche bien.

Bonjour,

Pour une personne aussi sensible que toi à ... l'ergonomie ... je suis surpris que tu n'explicites pas davantage les spécificités de cette ergonomie que tu recherches ...

Dans le fichier que tu as posté ... avec l'index 17 dans la feuille VES ... une sauvegarde se fera correctement sous ce numéro de suivi et incrémentera déjà l'index ... en vue de la prochaine sauvegarde ...

Bonjour,

Merci pour ta réponse.

Je ne voulais pas demander un truc "clé en mains" au forum, je voulais juste un principe, pour le mettre en place tout seul comme un grand avec l'ergonomie ;o) qui va bien.

Comme je ne suis pas très doué en VBA (on l'aura remarqué), ça a été un peu plus compliqué.

Mais grâce à ton aide et à tes explications, j'ai réussi à me débrouiller.

Histoire d'en faire profiter les utilisateurs du forum, je poste donc le fichier "final", qui permet de faire une fiche de suivi hebdo, avec numérotation auto des dates et du nom de fichier, et de générer automatiquement la suivante (tout se passe dans l'onglet DATA).

Merci encore pour ton aide.

Re,

Ravi que tu aies la solution à ton problème ...

Merci pour tes remerciements ...

Rechercher des sujets similaires à "enregistrer incrementant partie numerique nom"