Sauvegarder copie fichier excel

Résolu
drik56
Messages postés
127
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
8 juillet 2008
- 22 mai 2008 à 11:24
MATHOD
Messages postés
20
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
22 mai 2008
- 22 mai 2008 à 15:09
Salut tout le monde,

Je fais appel a vous car je galere. J'ai un tableau avec une requete qui va chercher des données sur un serveur. Pour l'instant pas de probleme. J'ai un autre tableau qui traite ses données et les met un peu en forme. Je voudrais maintenant enregistrer une copie du tableau automatiquement (par mois a une heure précise). C'est a dire que tout les mois (le 30 ou 31) a 23h59 on enregistre une copie du tableau avec juste les valeurs (et la mise en forme ^^) dans le meme répertoire que le fichier de base, sous le nom "mmmm aa" (ex: Mai 08).

Voila
Merci a vous

15 réponses

MATHOD
Messages postés
20
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
22 mai 2008

22 mai 2008 à 13:54
voilà ce que j'ai fait récemment, en reutilisant du code du forum;
en fait je sauve une première fois sous le nom de sauvegarde, avec le bon nom et vers un répertoire et une deuxième fois le document d'origne sous le meme nom, meme répertoire:
résultat : mon .doc (ou pour Excel, je pense que c'est la même chose, il faudra adapter le save) est sauvé qqpart, et, je 'retrouve ' mon fichier en cours.

code à mettre dans un evenement:
Repertoire_en_cours = ThisDocument.Path
StrDocName = ActiveDocument.Name

repertoire_sauvegarde = "nom du chemin complet"
DateDuJour = Mid(Date$, 4, 2) & "-" & Mid(Date$, 1, 2) & "-" & Mid(Date$, 7, 4)

repertoire = repertoire_sauvegarde
fichier_transmis = "nom" & & Mid(Date$, 1, 2)
Call savefic(fichier_transmis, repertoire)

repertoire = Repertoire_en_cours
fichier_transmis = StrDocName
Call savefic(fichier_transmis, repertoire)

_______________________
Sub savefic(fichier, rep)
' savefic Macro
Dim Rep As String
Call CREER_DOSSIER(Rep)
ChangeFileOpenDirectory Rep
ActiveDocument.SaveAs FileName:=fichier, _
FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
EmbedTrueTypeFonts:=True, SaveNativePictureFormat:=False, SaveFormsData:= _
False, SaveAsAOCELetter:=False
End Sub

Public Sub CREER_DOSSIER(ArboDossier As String)
'-Créer un ou plusieurs dossiers teste l'existence du dossier avant de le créer
'-L'argument peut-etre passer avec le nom du fichier
'-Cette procédure permet de créer le chemin complet donné en paramètre.
'-Créer le 05/2002
On Error Resume Next
'-Déclaration
Dim lgWhile As Long
Dim PosPoint As Long '-Position du point

'-Traitement pour ajout du slash
'-Test: si la chaîne est passer avec le nom du fichier ou simplement le
'chemin du ou des dossiers à créer
'-Recherche le point de l'extension du fichier
PosPoint = InStr(ArboDossier, ".")

If PosPoint = 0 Then
If Right(ArboDossier, 1) <> "" Then ArboDossier = ArboDossier & ""
End If
'-Repère le départ du premier répertoire après la lettre du lecteur.
lgWhile = InStr(4, ArboDossier, "")

Do While (lgWhile > 0)
'-Vérifie l'existence du répertoire.
If Dir$(Left$(ArboDossier, lgWhile), vbDirectory) = vbNullString Then
'-Crée le répertoire.
MkDir Left$(ArboDossier, lgWhile)
End If
lgWhile = InStr(lgWhile + 1, ArboDossier, "")
Loop
End Sub
3
MATHOD
Messages postés
20
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
22 mai 2008

22 mai 2008 à 14:19
j'avais à sauver un document sous un autre nom, tout en gardant celui ci.
si on fait le 'save' comme un enregistré sous, tu suave bien ton document avec le nom que tu veux, c'est l'objectif des 3 lignes:

repertoire = "D:\REP_DE_SAUVEGARDE"
fichier_transmis = "nomfic" & Mid(Date$, 1, 2) ' je mets le mois en cours
Call savefic(fichier_transmis, repertoire)

mais alors, mon document actuel à 'perdu' son nom d'origine (ta 'base')
pour le restaurer, je resauve de la meme manière, MAIS
auparavant j'ai sauvé et le répertoire et le nom du document!

avec:

Repertoire_en_cours = ThisDocument.Path
StrDocName = ActiveDocument.Name

que je me dois de récupérér en premier...au début de mon code donc.


puis je 'sauve mon fichier avec le meme nom qu'auparavant, et au meme endroit'
c'est l'objectif des 3 lignes:

repertoire = Repertoire_en_cours
fichier_transmis = StrDocName
Call savefic(fichier_transmis, repertoire)

le reste est deux spus-programmes (deux Sub)...

il faut mettre ces deux Sub dans un 'module' de ton projet.
il faut mettre les autres lignes dnas un 'évènement', un bouton ou un 'valider', enfin...un moment où tu décides de faire executer ce code...

si tu n'es pas pressé, j'essaierai de faire un.excel pour le joindre à cette contribution...
a+
3
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
22 mai 2008 à 11:34
Je ne sais pas exactement quel est ton problème, mais tu pourrais utiliser un fichier base qui sert de modèle avec la mise en forme nécessaire. Quand tu veux sauvegarder une copie, tu utilises ce modèle pour y copier les données en valeur et tu sauvegardes sous le nom désiré.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
drik56
Messages postés
127
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
8 juillet 2008

22 mai 2008 à 11:41
Salut MPI et merci de ta réponse. ce que tu me propose est faisable mais comment fais tu pour copier les données dans le fichier qui servirait de base. Et comment fais tu pour dupliquer ce fichier et changer le nom ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
22 mai 2008 à 11:47
Comme tu as déjà créé toi-même ce fichier modèle, tu connais donc le nom et le chemin. Il ne te reste qu'à l'ouvrir, copier les données (Cells.Copy) et les coller dans le modèle
Workbooks("MonModele.xls").Sheets("MaFeuille").Range("A1").PasteSpecial xlPasteValues

Pour le nom, ça dépend comment tu penses procéder... Est-ce la date du jour ? le nom d'un onglet, la valeur d'une cellule ? ....

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
drik56
Messages postés
127
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
8 juillet 2008

22 mai 2008 à 11:53
En fait si je fait comme tu dis j'aurais un fichier ou je lance ma requete et un autre qui me servirais de base. Mais je voudrais créer un fichier tout les mois en partant de la base mais je garderais la base comme modele.Donc j'aurais mon fichier requete, ma base et les fichers mois (Mai 08, Avril 08 ....)
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
22 mai 2008 à 12:18
C'est comme ça que je vois la chose, effectivement.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
drik56
Messages postés
127
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
8 juillet 2008

22 mai 2008 à 12:56
Ouai mais la avec ton code je rempli la base mais comment je fait pour enregistrer la base sous un autre nom (Mai 08 ...) en gardant quand meme la base ? faire un enregistrer sous (un autre nom)
0
drik56
Messages postés
127
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
8 juillet 2008

22 mai 2008 à 14:04
Merci MATHOD je vais voir ce que je peu faire avec cela ...
0
drik56
Messages postés
127
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
8 juillet 2008

22 mai 2008 à 14:07
Désolé mais peux tu me réexpliquer ca que le code fait et combien tu as de fichier.... Je n'ai pas très bien compris le début de ton message...
0
MATHOD
Messages postés
20
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
22 mai 2008

22 mai 2008 à 14:09
oups!
fichier_transmis = "nom" & Mid(Date$, 1, 2)

'ne mettre qu'un & !!
0
drik56
Messages postés
127
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
8 juillet 2008

22 mai 2008 à 14:23
Merci beaucoup c'est exactement ce que je demandais.
Si tu veux pour le fichier excel ...
Merci encore tu m'enleve une (grosse) épine du pied.
0
MATHOD
Messages postés
20
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
22 mai 2008

22 mai 2008 à 14:44
code pour excel, car le mien est dans du VB pour Word:

Sub EnvoyerRes()
'

Dim Chemin_sauvegarde_complet As String
DateDuJour = Mid(Date$, 4, 2) & "-" & Mid(Date$, 1, 2) & "-" & Mid(Date$, 7, 4)
Repertoire_en_cours = ThisDocument.Path ' récupère le nom du répertoire du départ du document
' recup nom du document
StrDocName = ActiveDocument.Name
'repertoire créé si besoin année \2008\
repertoire_sauvegarde = "D:\SAUVEGARDE" & "20" & Mid(Date$, 9, 2) & ""
fichier_transmis = "nomdufichier" & Mid(Date$, 1, 2)
repertoire = repertoire_sauvegarde
fichier_transmis = "nom" & Mid(Date$, 1, 2)
Call savefic(fichier_transmis, repertoire)

repertoire = Repertoire_en_cours
fichier_transmis = StrDocName
Call savefic(fichier_transmis, repertoire)

End Sub
Sub savefic(fichier, rep)
Dim repertoire As String
' savefic Macro
' Macro enregistrée le 14/03/2008 par Admin
Call CREER_DOSSIER(repertoire)
ChDir rep
ActiveWorkbook.SaveAs Filename:=fichier, FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False

End Sub
Public Sub CREER_DOSSIER(ArboDossier As String)
'-Créer un ou plusieurs dossiers teste l'existence du dossier avant de le créer
'-L'argument peut-etre passer avec le nom du fichier
'-Cette procédure permet de créer le chemin complet donné en paramètre.
'-Créer le 05/2002
On Error Resume Next
'-Déclaration
Dim lgWhile As Long
Dim PosPoint As Long '-Position du point

'-Traitement pour ajout du slash
'-Test: si la chaîne est passer avec le nom du fichier ou simplement le
'chemin du ou des dossiers à créer
'-Recherche le point de l'extension du fichier
PosPoint = InStr(ArboDossier, ".")

If PosPoint = 0 Then
If Right(ArboDossier, 1) <> "" Then ArboDossier = ArboDossier & ""
End If
'-Repère le départ du premier répertoire après la lettre du lecteur.
lgWhile = InStr(4, ArboDossier, "")

Do While (lgWhile > 0)
'-Vérifie l'existence du répertoire.
If Dir$(Left$(ArboDossier, lgWhile), vbDirectory) = vbNullString Then
'-Crée le répertoire.
MkDir Left$(ArboDossier, lgWhile)
End If
lgWhile = InStr(lgWhile + 1, ArboDossier, "")
Loop
End Sub

bon codage...
0
MATHOD
Messages postés
20
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
22 mai 2008

22 mai 2008 à 14:54
j'ai deux erreurs encore...

pour excel, c'est

Repertoire_en_cours = Application.Path

je cherche le nom du fichier en cours et je testerai, puis je t'envoi le code complet...
a+
0
MATHOD
Messages postés
20
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
22 mai 2008

22 mai 2008 à 15:09
m'enfin...je crois que c'est tout bon...j'ai du adapter pour Excel...
voici la macro à exécuter par un 'bouton' avec ce code dans le 'click', par exemple

call EnvoyerRes

______________________le reste est à mettre dans un module (inserer un module dans le projet)

Sub EnvoyerRes()
'

Dim Chemin_sauvegarde_complet As String
DateDuJour = Mid(Date$, 4, 2) & "-" & Mid(Date$, 1, 2) & "-" & Mid(Date$, 7, 4)
Repertoire_en_cours = Application.Path ' récupère le nom du répertoire du départ du document
' recup nom du document
strdocname = ThisWorkbook.Name
'repertoire créé si besoin année \2008\
repertoire_sauvegarde = "D:\SAUVEGARDE" & "20" & Mid(Date$, 9, 2) & ""

fichier_transmis = "nomdufichier" & Mid(Date$, 1, 2)

repertoire = repertoire_sauvegarde
fichier_transmis = "nom" & Mid(Date$, 1, 2)
Call savefic(fichier_transmis, repertoire)

repertoire = Repertoire_en_cours
fichier_transmis = strdocname
Call savefic(fichier_transmis, repertoire)

End Sub
Sub savefic(fichier, rep)
Dim repertoire As String
repertoire = rep
' savefic Macro
' Macro enregistrée le 14/03/2008 par Admin
Call CREER_DOSSIER(repertoire)
ChDir rep
ActiveWorkbook.SaveAs Filename:=fichier, FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False

End Sub
Public Sub CREER_DOSSIER(ArboDossier As String)
'-Créer un ou plusieurs dossiers teste l'existence du dossier avant de le créer
'-L'argument peut-etre passer avec le nom du fichier
'-Cette procédure permet de créer le chemin complet donné en paramètre.
'-Créer le 05/2002
On Error Resume Next
'-Déclaration
Dim lgWhile As Long
Dim PosPoint As Long '-Position du point

'-Traitement pour ajout du slash
'-Test: si la chaîne est passer avec le nom du fichier ou simplement le
'chemin du ou des dossiers à créer
'-Recherche le point de l'extension du fichier
PosPoint = InStr(ArboDossier, ".")

If PosPoint = 0 Then
If Right(ArboDossier, 1) <> "" Then ArboDossier = ArboDossier & ""
End If
'-Repère le départ du premier répertoire après la lettre du lecteur.
lgWhile = InStr(4, ArboDossier, "")

Do While (lgWhile > 0)
'-Vérifie l'existence du répertoire.
If Dir$(Left$(ArboDossier, lgWhile), vbDirectory) = vbNullString Then
'-Crée le répertoire.
MkDir Left$(ArboDossier, lgWhile)
End If
lgWhile = InStr(lgWhile + 1, ArboDossier, "")
Loop
End Sub
0