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 !
J'ai réalisé un classeur contenant un calendrier de 12 mois.
J'ai mis une macro afin de glisser de 12 mois en 12 mois, et maintenant je souhaite créer une macro afin de de sauvegarder avec comme nom la date de modification et placé dans le dossier où se trouve le document original, tout cela avant d'utiliser la macro qui fait glisser les mois.
Bienvenu sur ce forum.
Aucune réponse au bout de 5h prouve que ta demande n'est pas très explicite.
- Apportes plus de précisions
- si possible, envoies ton fichier en enlevant les éventuelles données confidentielles (zippé s'il fait plus de 50 Ko)
J'ai compressé mon fichier et je vous le transmet.
Pour mes attentes, j'ai une macro qui se fait par la combinaison de touches : ctrl + maj + m et je voudrai créer une macro qui sauvegarde mon fichier dans le même dossier que l'original et qui le nomme avec le nom de l'onglet sur lequel on travail plus la date.
Merci de votre aide car je suis débutant en programmation.
Ton fichier me laisse quelque peu dubitatif.
Apparement, il est composé de 2 macros :
1. MISE_à_JOUR (dans le module 3) : à priori, pas de problème en vue.
2. Workbook_Open (dans le module 4 ?!)
Pas de macro dans les modules 1 et 2 (tu peux les virer), pas de macro dans les Objets Excel (feuilles, workbook, Userform..)
Donc, dans cette situation, ca ne risque pas de fonctionner :
- Workbook_Open est une procédure évènementielle à placer dans l'objet Workbook . Dans le Module 4, elle est inerte (transfères la par couper/coller et vires le Module 4). Elle sera lancée à chaque ouverture du classeur.
- cette macro en appelle d'autres qui n'existent nulle part dans ton fichier. Je les ai coloriées en rouge (voir ci-après). Conséquence : bug !
Question: où sont ces macros ?
- tes variables (en bleu) ne sont pas déclarées (allocation d'espace mémoire, par défaut Excel propose l'espace maxi, alors que tu n'as besoin que du minimum). Cela ne gêne pas le fonctionnement de la macro mais c'est plus rationnel de les déclarer de la manière suivante :
Dim Sauver As Byte (si la réponse à ta MsgBox = "Oui" alors Sauver = vbYes = 6 ; si la réponse est "Non" alors Sauver = vbNo = 7)
Dim SauvegardeAuto as Boolean (tu n'as besoin que de VRAI ou FAUX)
- A quoi te sert la ligne que j'ai colorié en vert ?
Code:
Private Sub Workbook_Open()
[color=blue]sauver = MsgBox("Voulez activer la sauvegarde automatique pour ce classeur ?", vbYesNo)[/color]
If sauver = vbNo Then
Exit Sub
Else
[color=blue]
SauvegardeAuto = True[/color]
[color=red]
GetDirectory
ChoixDelai
ChoixNbSauvegardes
Sauve[/color]
End If
[color=green]Application.Goto Reference:="save"[/color]
ActiveWindow.Close
Application.Run "'Essai Relevé des Accidents - TF TG.xls'!MISE_à_JOUR"
End Sub
Je suppose que tu as trouvé une macro qui correspond plus ou moins à tes besoins, que tu l'a inséré dans ton fichier. Tu tentes maintenant de l'adapter.
C'est pas grave, c'est souvent comme ca qu'on fonctionne au début. C'est formateur, c'est honorable, mais c'est souvent une sacrée prise de tête et par la même occasion une perte de temps.
Je te propose de bien détailler tes besoins pour qu'on puisse t'aider.
Pas en 2 lignes mais plutôt une véritable explication :
ex.
"A tel moment, je souhaite que le fichier (nom du fichier) soit enregistré ou sauvegardé sous le nom (nom du fichier).
Si tel évènement se produit, alors prévoir telle conséquence..
etc.."
Personnellement, j'aime bien qu'on m'explique comme à un enfant de 5 ans ! (en informatique bien entendu, à éviter dans la vie courante ! 😉 )
j'ai essayer de copier une macro qui correspondai a mes besoins et de l'adapter.
Mais mes connaissances en programation ne sont pas encore très évoluées.
Alors concernant mon problème, voici les étapes :
1 - Remplissage du tableau pour l'année en cours.
2 - Une fois l'année terminée, on réalise la macro en faisant la combinanison de touche ctrl+maj+m.
Et moi ce que je voudrai, c'est que lorsque l'on fait la combinaison de touche ctrl+maj+m, avant de retirer toutes les informations, je voudrais que les informations soit sauvegardées dans un fichier excel a part ayant le nom de l'onglet modifié (Sté 1 par exemple) ainsi que la date du jour de modification.
Sub AutoSave()
Dim Chemin$
Dim NomFichier$
Chemin = ThisWorkbook.Path
NomFichier = ActiveSheet.Name & "-" & CStr(Day(Date)) & "-" & CStr(Month(Date)) & "-" & CStr(Year(Date)) & ".xls"
ActiveWorkbook.SaveAs Chemin & Application.PathSeparator & NomFichier
Range(Cells(3, 1), Cells(32, 10)).ClearContents
End Sub
Comme tu débutes, je la commente ligne par ligne :
Déclaration de 2 variables au format "Chaîne".Le $ à la fin du mot équivaut à "As String".
Ainsi Dim Chemin$ équivaut à Dim Chemin As String Dim Chemin$
Dim NomFichier$
Attribue à la variable Chemin le chemin du fichier actif (puisque c'est ton souhait).
Tu pourrais également rédiger le chemin : Chemin = "C:\Archives" Chemin = ThisWorkbook.Path
Attribue à la variable NomFichier le nom souhaité.
Dans ton cas, le nom de l'onglet(ActiveSheet.Name) et la date du jour entrecoupée de séparateurs "-". Je termine le nom avec l'extension ".xls"
Notes que j'ai décomposé la date en Jour-Mois-Année. En effet, si j'avais simplifié par Cstr(Date), j'aurais obtenu un nom de fichier avec une date sous la forme jj/mm/aa. Or le caractère "/" n'est pas autorisé dans un nom de fichier et aurait généré un bug.
Pour info Cstr sert à convertir la date au format "chaîne". C pour convertir str pour String NomFichier = ActiveSheet.Name & "-" & CStr(Day(Date)) & "-" & CStr(Month(Date)) & "-" & CStr(Year(Date)) & ".xls"
Maintenant je fais "Enregistrer Sous" et je précise le nom du fichier . Notes que j'insère Application.PathSeparator qui correspond au caractère "\" ActiveWorkbook.SaveAs Chemin & Application.PathSeparator & NomFichier
Maintenant que la sauvegarde est réalisée, j'efface les données de la plage A3:J10
Il est donc possible de réaliser une nouvelle saisie Range(Cells(3, 1), Cells(32, 10)).ClearContents
Je te joins également ton fichier à titre de démonstration.
Mon chef m'a demander de faire autrement (désolé pour le travail éffectué) !!
Il voudrai que lorsque l'on fait la macro Ctrl+Maj+M, le tableau qui a été rempli précèdement, se sauvegarde dans l'onglet archive correspondant a la société qui édite le document.
J'explique en plusieurs étapes :
1) Remplissage du tableau sur les 12 mois dans l'onglet Sté 1 (par exemple).
2) Une fois les 12 mois remplis, activation de la macro par les commandes : Ctrl+Maj+M.
3) Avant que la macro ne s'effectue, sauvegarder le tableau avec les valeurs dans l'onglet correspondant a Archive Sté 1 (pour notre exemple).
4) Que lorsque l'on reproduit les points 1 à 3, le document dans Archive Sté 1 ne soit pas écrasé mais ajouté à côté.
Dans l'immédiat, il m'est impossible de répondre à ta demande :
Je viens de déposer mon PC portable chez le réparateur.
Je suis actuellement sur le PC de mon fils qui n'est pas équipé d'Excel.
Si ta demande peut attendre une bonne semaine, je verrai ce que je peux faire, dans le cas
contraire, demandes de l'aide aux amis du forum (en restant sur ce fil bien entendu)
Un conseil en passant :
Avant de débuter un projet, définis de manière très précise les besoins du commanditaire. Quitte à être très ch...., il faut que le cahier des charges soit clairement défini !
Il n'y a rien de plus exaspérant qu'un changement de concept à la fin du projet.
Je te parle d'expérience, m'étant fait échauder plus d'une fois.
- 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