Variabiliser le nom d'un fichier créé/enregistré chaque jour selon la date
Bonjour !
Tout d'abord je vous remercie de l'intérêt porté à cette demande.
Niveau = Je me débrouille sur Excel mais mes compétences s'arrêtent dès lors qu'il faut toucher à VBA. Je me limite à des enregistrements lorsque je dois utiliser une macro. Raison pour laquelle je me permets de solliciter votre aide.
Contexte = j'ai enregistré une macro afin de procéder aux actions suivantes :
1 - J'ouvre un fichier maître dans lequel j'ai traité des infos qui sont prêtes à être importées dans un outil (mapping)
2 - Je me place sur l'onglet dans lequel se trouvent les infos traitées
3 - J'ouvre un nouveau fichier et j'enregistre celui-ci en le nommant via un copié/collé que je fais d'une cellule à partir du fichier maître (je reprends la date du jour + la date de la réservation des commandes à effectuer, le tout en format texte)
4 - Je copie/colle les données depuis l'onglet du fichier maître vers le nouveau fichier ouvert en valeur puis je les convertis en format texte
Problématique = Tout fonctionne à un détail prêt qui fait tout foirer : l'enregistrement de macro fige le nom que je colle au nouveau fichier. Exemple : si nous sommes le 04/08/21 et que je réserve pour le 05/08/21, j'ai un libellé du nouveau fichier qui va être "Resa du 04-08-21 pour le 05-08-21". Le jour suivant, alors même que la cellule du fichier maître concernée affiche "Resa du 05-08-21 pour le 06-08-21" et que la macro copie/colle pour nommer le nouveau fichier créé chaque jour, le nouveau fichier va toujours s'appeler "Resa du 04-08-21 pour le 05-08-21".
La question est donc : comment rendre variable le nom que je donne au nouveau fichier créé et enregistré chaque jour selon la cellule prévue à cet effet dans le fichier maître ?
Données = Afin de faciliter l'appréhension du sujet, je vous propose ci-joint le code qui s'est créé automatiquement lors de l'enregistrement (j'ai modifié les libellés professionnels par sécurité) et qui fait apparaître le nom à attribuer au nouveau fichier de façon figée et non en tant que variable selon le copié/collé présent dans l'enregistrement à partir de la cellule qui s'actualise quotidiennement. Egalement, je vous propose ci-dessous le copié/collé du code :
Sub GENERER_FICHIER_IMPORT()
'
' GENERER_FICHIER_IMPORT Macro
'
'
Sheets("Référentiel").Select
Range("X29").Select
Selection.Copy
Workbooks.Add
Application.CutCopyMode = False
ChDir "\\CHEMIN DU FICHIER DANS LE SERVEUR"
ActiveWorkbook.SaveAs Filename:= _
"\\CHEMIN DU FICHIER DANS LE SERVEUR\Resa du mercredi-04-08-2021 pour le jeudi-05-08-2021.xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Windows("ETL_Proto_Sud_Client1_V8.xlsm").Activate
Sheets("Résa pour le SUD").Select
Cells.Select
Selection.Copy
Windows("Resa du mercredi-04-08-2021 pour le jeudi-05-08-2021.xlsx").Activate
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
Range("B4").Select
End Sub
Je vous remercie par avance de votre retour. Si vous avez besoin de précisions, je me tiens disponible pour y répondre.
Excellente journée
Bien cordialement
Voila qui devrait répondre à la question
Sub nommeFichier()
Dim nomFichier As String ' On crée une variable
nomFichier = Range("G1").Value ' référence de la cellule contenant le nouveau nom du fichier
ActiveWorkbook.SaveAs Filename:="\\CHEMIN DU FICHIER DANS LE SERVEUR\" & nomFichier
End SubBonjour,
Merci de votre retour et réactivité. Je comprends la logique du code (intégrer une variable pour que le nom s'actualise selon la cellule G1 par exemple)
Cependant, étant complètement profane en VBA, je ne saurais faire usage de votre aide car je ne sais pas où placer ce code dans l'enchaînement
Si je vous propose ci-joint un fichier maître avec l'enregistrement de la macro à partir duquel je génère le second fichier, pourriez-vous svp insérer cette partie du code afin que je sache comment faire dans mon fichier pro ?
Merci par avance de votre aide, quelle que soit la réponse
Bien cordialement
JA
PS : également ci-dessous le code collé
Sub GENERER_NOUVEAU_FICHIER()
'
' GENERER_NOUVEAU_FICHIER Macro
'
'
Sheets("Feuil1").Select
Selection.Copy
Workbooks.Add
Application.CutCopyMode = False
ChDir "C:\Users\j.manzanares\Desktop"
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\j.manzanares\Desktop\Resa du mercredi-04-08-2021 pour le jeudi-05-08-2021.xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Windows("TEST.xlsm").Activate
Sheets("Feuil2").Select
Cells.Select
Selection.Copy
Windows("Resa du mercredi-04-08-2021 pour le jeudi-05-08-2021.xlsx").Activate
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
Range("E7").Select
End Sub
J'ai fait un peu de ménage dans le code et j'ai ajouté quelques commentaires.
C'est très propre
Merci pour le temps que vous avez consacré pour m'aider
Bien cordialement
Heureux de vous avoir aidé. Noubliez pas de marquer le sujet comme résolu si c'est le cas...
Bonjour, étrange que celà fonctionne ?
Le chemin du code de ne se termine pas par un anti-slash comme dans le chemin qui a servit de test à Yal excel ... que je salue au passage.
Par ailleurs si le but final est la sauve garde de l'onglet 2 Alors pas besoin de ces copié .. collé. on sauvegarde uniquement la copy de l'onglet
Sub GENERER_NOUVEAU_FICHIER2()
Dim ChDir As String
Dim nmFich As String
ChDir = "C:\Users\j.manzanares\Desktop\" ' Défini le répertoire de destination
nmFich = Sheets("Feuil1").Range("C8").Value & ".xlsx" ' Défini le nom du nouveau fichier
Worksheets("Feuil2").Copy
With ActiveWorkbook
.SaveAs Filename:=ChDir & nmFich, FileFormat:=xlOpenXMLWorkbook
.Close SaveChanges:=False
End With
End SubBonjour Xmen,
Merci de votre message. Je confirme que les données de chemin présentes dans la version transmise sont bidonnées
En effet, je ne voulais pas mettre les vrais chemins. Cependant, lorsque j'actualise l'exemple transmis par Yal, ça fonctionne bien
J'ai bien un fichier qui se crée et s'enregistre automatiquement avec toutes les données souhaitées collées en valeur, respectant par ailleurs le libellé de la cellule quelle que soit l'actualisation faite (date notamment)
Bien cordialement