VBA-Sauvegarde-Ouverture avec nom variable

S

simyrom

Guest
Bonjour le forum,
Je recupere une fois par jour des donnees via Internet en utilisant le gestionnaire de tache windows (Workbook_Open()). J’ai cree une deuxieme macro qui s’ouvre tous les 2 mois (toujours via le gestionnaire de taches) pour enregistrer les donnees dans un nouveau classeur afin d’eviter d’avoir des fichiers trop volumineux.
Mais je ne sais pas comment codifier l’ouverture de ce fichier renomme pour mon telechargement quotidien. En effet, une fois ma nouvelle macro executé, le chemin n’est plus defini pour ma macro quotidienne.

Merci a Alain (“Re: Forcer le nom de fichier depuis une cellule”; 09-06-03 23:22) pour son code. Nouvelle macro:

Dim Name As String
Dim Chemin As String
Dim MyMonth
Dim MyYear

MyMonth = month(Date)
MyYear = Year(Date)
Name = "K_" & MyMonth & "_" & MyYear
Chemin = "C:\RS\WaveData\" + Name + ".xls"
ActiveWorkbook.SaveAs Chemin

Macro existente (dans une autre sub):
If Not DejaOuvert(Chemin) Then Workbooks.Open Chemin
Set Wbk = Workbooks(Dir$(Chemin))
>>Chemin n’est plus defini

Merci a ceux qui se pencheront sur ce probleme.
A+
Romain
PS: je ne pourrai consulter mes mails qu’a partir de Lundi/Mardi.
 
M

michel

Guest
Bonjour simyrom

Voilà comment j'ai compris ton message
Par le planificateur de tache , une fois par jour tu ouvres un fichier (X) pour télécharger des informations . Au bout de 2 mois , un nouveau fichier (Y) est créé pour le remplacer . Tu cherches comment faire pour que le chemin vers le fichier (Y) soit pris en compte automatiquement à la place du fichier (X)

Je ne connais ton mode opératoire complet et je ne sais pas si ce que je te propose sera vraiment efficace , notamment après l'ouverture des fichiers …car il faut ensuite pouvoir lancer la requête de récupération de données sur le net ….

Je te propose d'avoir un classeur supplémentaire qui va gérer tous les classeurs d'enregistrement successifs .
Le classeur référence "classeur planificateur" , s'ouvre quotidiennement à l'aide du planificateur de taches de Windows .
L'ouverture de "classeur planificateur" provoque l'ouverture d'un autre fichier ( classeur11 dans notre exemple ) servant à la récupération de tes infos sur le net .
Au bout de xxx mois , un nouveau classeur de récupération d'infos est créé et enregistré en automatique dans un répertoire prédéfini . Lors des ouvertures suivantes , c'est ce nouveau classeur qui est pris en compte pour la récupération des infos ..
Tous les xxx mois un nouveau classeur d'enregistrement est créé et devient automatiquement le fichier servant au télchargement .

Dans l'exemple joint , J'ai remplacé les dates par un comptage de nombre d'ouvertures : La création d'un nouveau classeur d'enregistrement s'effectue à la 4eme ouverture du "classeur planificateur"
j'ai désactivé le lancement de la procédure automatique à l'ouverture du fichier Private Sub Workbook_Open() pour ne pas déclencher de message d'erreur ( Il faut mettre à jour le chemin d'accès du répertoire dans le code , avant de tester le fichier et réactiver la procédure Private Sub Workbook_Open() )

Bonne soirée
Michel
 

Pièces jointes

  • sauvegarde_ouverture.zip
    15.8 KB · Affichages: 45
S

simyrom

Guest
Bonjour Michel et le forum,
Je viens de terminer d'adapter ta solution pour mon cas. Ton idee etait parfaitement ce que j'attendais. J'ai modifier la condition pour la sauvegarde a une date X.
Mon classeur référence est LaunchDownload.
Mon test s'effectue sur le mois en cours. Si le mois en cours est impair et que cela fait deux mois qu'il n'y a pas eu de changement de nom de fichier (voir Else) alors il cree un nouveau worbook avec comme extension de nom le mois et l'annee en cours et il rajoute dans le classeur LaunchDownload l'adresse complete.
Maintenant il va falloir que je simplifie mon code et que je l'inclus dans mon prog principal.
Je te remercie pour ta solution qui devrait marcher dans tous les cas.
Bonne journee et au plaisir de "s'echanger" (vu ton niveau, je ne suis pas sur d'etre d'une grande aide) des infos.
Romain

Private Sub Workbook_Open()

Dim Name As String
Dim Chemin As String
Dim Chemin2 As String
Dim MyMonth
Dim MyYear

Chemin = "C:\RS\WaveData\Downloading\LaunchDownload.xls"
If Not DejaOuvert(Chemin) Then Workbooks.Open Chemin
Set Wbk = Workbooks(Dir$(Chemin))
Workbooks("LaunchDownload.xls").Activate

Sheets("sheet1").Select

Cells(1, 1) = month(Date)
Cells(2, 1) = Year(Date)

If Not (Cells(1, 1).Value Mod 2 = 1 And Cells(3, 1).Value <> Cells(1, 1).Value) Then
Chemin2 = Range("a1").End(xlDown).Value
If Not DejaOuvert(Chemin2) Then Workbooks.Open Chemin2
Set Wbk = Workbooks(Dir$(Chemin2))
Workbooks(Dir$(Chemin2)).Activate
Call YY
Else
Range("a3").Value = Range("a1").Value
Name = "MKbuoys_" & Cells(1, 1).Value & "_" & Cells(2, 1).Value
Chemin2 = "C:\RS\WaveData\Downloading\" + Name + ".xls"
Range("a1").End(xlDown).Offset(1, 0).Value = Chemin2
Workbooks.Add.SaveAs Chemin2
Workbooks(Dir$(Chemin2)).Activate
Call YY
End If

End Sub

Function DejaOuvert(CheminComplet$) As Boolean
Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Workbooks(Dir$(CheminComplet))
DejaOuvert = Err = 0
Err.Clear
End Function
 

Membres actuellement en ligne

Statistiques des forums

Discussions
313 060
Messages
2 094 924
Membres
106 127
dernier inscrit
AS PRECY