Sauvegarde fichier mon code n'est pas parfait

Sauvegarde fichier mon code n'est pas parfait - VB/VBA/VBS - Programmation

Marsh Posté le 11-05-2011 à 09:47:34    

Bonjour,
 
Voilà chaque jour, je rentre des transactions via une template Excel et je souhaite créer un bouton pour sauvegarder et éviter une arborescence dans Explorer plutôt laborieuse.
 
La macro doit d'abord aller dans un répertoire, ensuite, en fonction de la date du jour, elle doit sauver le fichier dans un sous-répertoire de format YYYYMM.  Bien entendu, si le sous-répertoire existe déjà, je ne veux pas le créer à nouveau.  Bon jusqu'à cette partie ça va plutôt bien.
 
Ensuite la template doit se sauver dans le sous-répertoire en question en comprenant les infos date du jour + client+ prix+ volume
 
C'est là que je coince, car la macro sauve le fichier dans le répertoire et pas le sous-répertoire.  
 
Voici les codes, je pense que l'erreur vient du "ActiveWorkbook.path" mais j'ignore comment le corriger.
 
Dites, vu que je vais fais beaucoup de deal, IDEALEMENT, j'aurai voulu recréer un sous-sous répertoire YYYYMMDD mais comme je ne maîtrise pas trop bien VBA...
 
Voici les codes:
 
Sub ConfoGas()
 
'Declaration
 
 
 
Dim NomRep As String
Dim Periode As Date
Dim Client As String
 
 
 
 
'Process
'La macro va dans le répertoire spécifié
 
 
NomRep = "C:\Documents and Settings\gcl180\My Documents\Hedges Pendings\"
Periode = Date
 
'La macro s'assure que le répertoire existe, si pas, elle le crée
 
 
If Dir(NomRep, vbDirectory) = "" Then MkDir NomRep
 
'Le répertoire précité doit être subdivisé en Années/Mois, de nouveau si l'on débute un nouveau mois, il faut créer le répertoire
 
    If Dir(NomRep & Format(Periode, "YYYYMM" ), vbDirectory) = "" Then MkDir NomRep & Format(Periode, "YYYYMM" )
 
'Ensuite je souhaite sauver le fichier en sous ce dernier répertoire avec format YearMonthDay_Client_Prix volume.xlsx
     
Client = Year(Date) & Month(Date) & Day(Date) & " " & Range("C3" ) & "_" & Range("D3" ) & " " & Range("E3" ) & ".xlsx"
     
ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & Client
 
 
 
     
         
 
 
 
End Sub

Reply

Marsh Posté le 11-05-2011 à 09:47:34   

Reply

Marsh Posté le 11-05-2011 à 10:27:29    

Essayer
ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & Format(Periode, "YYYYMM" ) & "\" & Client

Reply

Marsh Posté le 11-05-2011 à 11:35:26    

olivthill a écrit :

Essayer
ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & Format(Periode, "YYYYMM" ) & "\" & Client


 
Oui comme cela ça fonctionne.  Si je comprends bien, il fallait que je précise le format de la date du jour de mon fichier.
 
Merci beaucoup Olivthill

Reply

Marsh Posté le 11-05-2011 à 12:21:05    

Coellophysis a écrit :


 
Oui comme cela ça fonctionne.  Si je comprends bien, il fallait que je précise le format de la date du jour de mon fichier.
 
Merci beaucoup Olivthill


 
 
ooopsss  j'ai parlé un peu trop vite, lorsque j'ai recopié les codes avec le serveur correct de mon entreprise, j'ai rencontré 2 problèmes:
 
1) pour la création du sous-répertoire YYYYMM, cela fonctionne s'il n'existe pas mais si le rép est déjà là, ça bugg :(
 
2) il semble que la structure du fichier final à sauver soit indigeste à VBA, je reçois le message suivant:
 
"Microsoft Office cannot access the file "X:\02_0067\....\20110511\20110511 E-VUB_EGNW10 63997.xlsx"
 
Est-ce que c'est dû au fait qu'il y a un "E-" avant le nom du client?  
 
Voici le code:
 
 
 
Sub SaveFileGas()
 
'Declaration
 
 
 
Dim NomRep As String
Dim Periode As Date
Dim Client As String
 
 
 
 
'Process
'La macro va dans le répertoire spécifié
 
 
NomRep = "X:\02_0067\07_Sales_Portfolio\06_Processes\02_GAS hedging\01_DISTRIBUTION\11_Bookings Not Hedged"
Periode = Date
 
'La macro s'assure que le répertoire existe, si pas, elle le crée
 
 
If Dir(NomRep, vbDirectory) = "" Then MkDir NomRep
 
'Le répertoire précité doit être subdivisé en Années/Mois, de nouveau si l'on débute un nouveau mois, il faut créer le répertoire
 
    If Dir(NomRep & Format(Periode, "YYYYMM" ), vbDirectory) = "" Then MkDir NomRep & "\" & Format(Periode, "YYYYMM" )
     
 
'Ensuite je souhaite sauver le fichier en sous ce dernier répertoire avec format YearMonthDay_Client_Prix volume.xlsx
     
Client = Year(Date) & Month(Date) & Day(Date) & " " & Range("L7" ) & "_" & Range("N7" ) & " " & Range("H7" ) & ".xlsx"
     
ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & Format(Periode, "YYYYMMDD" ) & "\" & Client
 
 
 
     
         
 
 
 
End Sub
 
 

Reply

Marsh Posté le 11-05-2011 à 14:14:56    

Salut,pour la création de dossier, perso j'utilise toujours ceci , à adapter


Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
                                             (ByVal hwnd As Long, ByVal pszPath As String, ByVal lngsec As Long) As Long
 
Option Explicit
 
Private Sub CreationDossier(sDossier As String)
' Pour valeur retournée dans Rep
'   Voir http://msdn.microsoft.com/en-us/library/bb762131(VS.85).aspx
'   et   http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
Dim Rep As Long
    Rep = SHCreateDirectoryEx(0&, sDossier, 0& )
End Sub
 
Sub Tst()
Dim sDossier As String
 
    sDossier = "C:\Essai1\Essai2\Essai3\Essai4\Essai5"
    CreationDossier sDossier
 
End Sub

Message cité 1 fois
Message édité par kiki29 le 12-05-2011 à 03:20:31
Reply

Marsh Posté le 11-05-2011 à 15:46:53    

kiki29 a écrit :

Salut,pour la création de dossier, perso j'utilise toujours ceci , à adapter


Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
                                             (ByVal hwnd As Long, ByVal pszPath As String, ByVal lngsec As Long) As Long
 
Option Explicit
 
Private Sub CreationDossier(sDossier As String)
' Pour valeur retournée dans Rep
'   Voir http://msdn.microsoft.com/en-us/library/bb762131(VS.85).aspx
'   et   http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
Dim Rep As Long
    Rep = SHCreateDirectoryEx(0&, sDossier, 0& )
End Sub
 
Sub Tst()
Dim sDossier As String
 
    sDossier = "C:\Essai1\Essai2\Essai3\Essai4\Essai5"
    CreationDossier sDossier
 
End Sub



 
Intéressant et surtout très pragmatique. Il va falloir que j'essaie mais entretemps j'ai compris mon erreur, j'ai remplacer ActiveWorkbook.path par NomRep car je créais une confusion.
 
Pour la vérification du répertoire (s'il existait ou pas) il suffisait de rajouter un "/" à la fin du path de NomRep
 
MErci en tout cas.

Reply

Marsh Posté le 12-05-2011 à 03:27:40    

Salut,le balisage du code dans le cas d'une réponse en cliquant sur Ajouter une réponse en bas à gauche, sélection du code, clic sur icône FIXE
sinon en se loguant puis en editant le message ( 2 eme icône à partir de la gauche )
L'utilisation de SmartIndenter pour le code VBA n'est pas non plus un luxe.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed