Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2946 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Sauvegarde fichier mon code n'est pas parfait

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sauvegarde fichier mon code n'est pas parfait

n°2075198
Coellophys​is
Posté le 11-05-2011 à 09:47:34  profilanswer
 

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

mood
Publicité
Posté le 11-05-2011 à 09:47:34  profilanswer
 

n°2075205
olivthill
Posté le 11-05-2011 à 10:27:29  profilanswer
 

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

n°2075232
Coellophys​is
Posté le 11-05-2011 à 11:35:26  profilanswer
 

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

n°2075247
Coellophys​is
Posté le 11-05-2011 à 12:21:05  profilanswer
 

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
 
 

n°2075265
kiki29
Posté le 11-05-2011 à 14:14:56  profilanswer
 

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
n°2075289
Coellophys​is
Posté le 11-05-2011 à 15:46:53  profilanswer
 

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.

n°2075412
kiki29
Posté le 12-05-2011 à 03:27:40  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Sauvegarde fichier mon code n'est pas parfait

 

Sujets relatifs
Modifier un fichier TXT avec VBA[PHP]Protéger l'accès à un fichier php contenant des mots de passe
forcer telechargement fichier jpgcode pour le calcul d'une fonction à partir d'une matrice
[AIDE] XSD, XSL, fichier config...Aide ! Récupérer le langage binaire d'un fichier.
envoi de gros fichier par socketValidation formulaire d'upload de fichier sans changer de page
Zone texte html agissant sur code source[Shell] lecture fichier configuration
Plus de sujets relatifs à : Sauvegarde fichier mon code n'est pas parfait


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR