Erreur d'enregistrement après une macro SavecopyAs
kevin44_49
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
kevin44_49 Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
kevin44_49 Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Bonjour à toutes et tous.
Je tâtonne un peu en vba et jusque là j'ai toujours réussi à me dépatouiller avec les différents forums qui existent.
J'ai un classeur qui commence à être assez lourd (3.4Mo) et qui contient un listing client, des données importantes, ... Tous les soirs je fais une sauvegarde de ce classeur via une macro vba
SaveCopyas avec un nom du genre "SaveCopy_date_NomClasseur". La sauvegarde se fait sans problème en à peine 3 secondes (je sauvegarde sur un autre pc en réseau).
Mon problème apparait après cette macro lorsque je veux faire un enregistrement simple.
Là excel plante, me ferme tout et me crée un fichier temporaire du type "94FBE480" (de 2.53Mo).
Pourquoi ce plantage systématique ? alors que si je ne crée pas cette sauvegarde via savecopyas, tout se passe bien?
Merci pour vos réponse.
Kévin.
Je tâtonne un peu en vba et jusque là j'ai toujours réussi à me dépatouiller avec les différents forums qui existent.
J'ai un classeur qui commence à être assez lourd (3.4Mo) et qui contient un listing client, des données importantes, ... Tous les soirs je fais une sauvegarde de ce classeur via une macro vba
SaveCopyas avec un nom du genre "SaveCopy_date_NomClasseur". La sauvegarde se fait sans problème en à peine 3 secondes (je sauvegarde sur un autre pc en réseau).
Mon problème apparait après cette macro lorsque je veux faire un enregistrement simple.
Là excel plante, me ferme tout et me crée un fichier temporaire du type "94FBE480" (de 2.53Mo).
Pourquoi ce plantage systématique ? alors que si je ne crée pas cette sauvegarde via savecopyas, tout se passe bien?
Merci pour vos réponse.
Kévin.
6 réponses
Bonjour,
J'ai un classeur qui commence à être assez lourd (3.4Mo) et qui contient un listing client, des données importantes
Que contient exactement ton classeur?
dis nous tout.
J'ai un classeur qui commence à être assez lourd (3.4Mo) et qui contient un listing client, des données importantes
Que contient exactement ton classeur?
- formules
- données uniquement (si oui combien de feuilles, lignes et colonnes utiles)
- listes de validation
- mise en forme
- MFC
dis nous tout.
Alors c'est un peu une usine à gaz, mais pour le moment faute de mieux et de finances pour faire développer un vrai logiciel... on se contente de ce que l'on a...
Ce classeur contient environs 20 feuilles certaines servent de "base de données", d'autre servent uniquement de "template" pour des 'impressions, et d'autre sont juste là pour faire joli :D
J'ai environ 15 unserform. J'ai 1 usf qui me sert de "bureau" où sont affichés 2 listview. Et c'est à partir de ce Usf principal que j'ouvre mes autres usf pour des tâches diverses comme l'enregistrement et la sauvegarde par exemple.
Dans la construction de ce classeur (que j'ai récuperé sur le net) j'ai essayé (avec mes maigres connaissance) de ne pas entrelacer les différentes macros/fonctions qui sont propre à chacun des Usf,
C'est un vrai outils que j'utilise pour une asso. Et ce petit problème de sauvegarde me chagrine un peu...
Pour info, je suis sous Office2000 (ouai, payer 99€/an pour une petite asso, et pour une utilisation ponctuelle ça fait mal).
En tout cas, merci pour vos aides ;)
Ce classeur contient environs 20 feuilles certaines servent de "base de données", d'autre servent uniquement de "template" pour des 'impressions, et d'autre sont juste là pour faire joli :D
J'ai environ 15 unserform. J'ai 1 usf qui me sert de "bureau" où sont affichés 2 listview. Et c'est à partir de ce Usf principal que j'ouvre mes autres usf pour des tâches diverses comme l'enregistrement et la sauvegarde par exemple.
Dans la construction de ce classeur (que j'ai récuperé sur le net) j'ai essayé (avec mes maigres connaissance) de ne pas entrelacer les différentes macros/fonctions qui sont propre à chacun des Usf,
C'est un vrai outils que j'utilise pour une asso. Et ce petit problème de sauvegarde me chagrine un peu...
Pour info, je suis sous Office2000 (ouai, payer 99€/an pour une petite asso, et pour une utilisation ponctuelle ça fait mal).
En tout cas, merci pour vos aides ;)
Bonjour,
Sommes toutes un classeur ordinaire.
A tester (pas sur du tout de l'efficacité), le End en fin de macro d'enregistrement :
Sinon, il ne te reste qu'à :
- prendre l'habitude de fermer/réouvrir ton classeur à chaque sauvegarde
- modifier complètement sa conception en externalisant (dans des fichiers txt par exemple) toutes les données...
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Sommes toutes un classeur ordinaire.
A tester (pas sur du tout de l'efficacité), le End en fin de macro d'enregistrement :
'ici ton code de sauvegarde End End Sub
Sinon, il ne te reste qu'à :
- prendre l'habitude de fermer/réouvrir ton classeur à chaque sauvegarde
- modifier complètement sa conception en externalisant (dans des fichiers txt par exemple) toutes les données...
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Merci Pijaku,
Ca ne fonctionne pas mais j'ai une piste...
J'ai lu sur des forums en anglais, que la fonction SaveCopyAs ne fonctionnerait qu'à partir de la version 2003 (ou 2007 je ne sais plus trop...)
Je me suis donc orienté vers l'ancienne méthode que j'utilisais avant, le bon vieux SaveAs.
Le tout avec
puis
C'est 20fois plus long qu'avant, mais ça ne plante pas.
Si vous avez d'autres idées, d'autres pistes... des suggestions, des remarques... je suis à l'écoute.
1000 merci à vous pour vos aides !
Ca ne fonctionne pas mais j'ai une piste...
J'ai lu sur des forums en anglais, que la fonction SaveCopyAs ne fonctionnerait qu'à partir de la version 2003 (ou 2007 je ne sais plus trop...)
Je me suis donc orienté vers l'ancienne méthode que j'utilisais avant, le bon vieux SaveAs.
ThisWorkbook.Save ThisWorkbook.SaveAs CheminSave & "\" & NomSave ThisWorkbook.SaveAs Chemin & "\" & MyName
Le tout avec
Application.ScreenUpdating = false
puis
Application.ScreenUpdating = True
C'est 20fois plus long qu'avant, mais ça ne plante pas.
Si vous avez d'autres idées, d'autres pistes... des suggestions, des remarques... je suis à l'écoute.
1000 merci à vous pour vos aides !
Bonjour,
Est ce que le problème de sauvegarde avec SaveCopyAs est apparu de suite ou lorsque ton classeur a commencé à prendre trop de "poids"?
Si oui, il convient alors de placer les feuilles "bases de données" dans un autre classeur ou dans des fichiers txt.
C'est relativement facile et souple après de les exploiter.
Si non, tu n'as pas d'autre choix que :
Est ce que le problème de sauvegarde avec SaveCopyAs est apparu de suite ou lorsque ton classeur a commencé à prendre trop de "poids"?
Si oui, il convient alors de placer les feuilles "bases de données" dans un autre classeur ou dans des fichiers txt.
C'est relativement facile et souple après de les exploiter.
Si non, tu n'as pas d'autre choix que :
- ta solution actuelle de SaveAs (20 secondes c'est pas non plus insurmontable)
- passer tout ton outil sous Access
- acheter une version plus récente d'Office
- passer au libre : OpenOffice ou LibreOffice.
Oui le problème est apparu lorsque j'ai changé mon mode de sauvegarde par SaveCopyAs...
voici le code:
Effectivement je pense que la solution d'acheter une version plus recente est à envisager. Pour le moment je retourner à mon ancienne méthode. Oui 20 secondes ce n'est pas la mort, c'est juste que je trouvais cette solution de copy hyper interessante!
J'ai le temps, je ne suis pas pressé.
Quand tu dis d'externaliser les Bdd sur un fichier txt, c'est juste pour la sauvegarde ou pour l'utilisation de l'ensemble du classeur? Ça m’intéresse, je vais creuser cette piste ;)
Par contre, tout passer sous libre office, j'ai déjà essayé, mais les macros Excel ne sont pas compatibles avec OOffice (ou alors je ne sais pas comment faire).
En tout cas, merci à tous !
voici le code:
Private Sub CommandButton44_Click() ' bouton sauvegarde UserForm3.Show 'Usf qui invite à patientenr Application.Wait Time + TimeSerial(0, 0, 1) 'pour éviter les plantage Application.ScreenUpdating = False ThisWorkbook.Save 'avant la sauvegarde, il fait un enregistrement simple On Error Resume Next If Err <> 0 Then Exit Sub Dim nom As String nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & Hour(Time) & "-" & Minute(Time) & "_" & ActiveWorkbook.Name ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom 'msgbox "Votre classeur est sauvegardé sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur" 'Msgbox qui retourne l'emplacement de la sauvegarde Application.Wait Time + TimeSerial(0, 0, 2) On Error Resume Next If Err <> 0 Then Exit Sub Application.ScreenUpdating = True UserForm3.Hide msgbox "Fichier sauvegardé", vbQuestion, vbSystemModal End Sub
Effectivement je pense que la solution d'acheter une version plus recente est à envisager. Pour le moment je retourner à mon ancienne méthode. Oui 20 secondes ce n'est pas la mort, c'est juste que je trouvais cette solution de copy hyper interessante!
J'ai le temps, je ne suis pas pressé.
Quand tu dis d'externaliser les Bdd sur un fichier txt, c'est juste pour la sauvegarde ou pour l'utilisation de l'ensemble du classeur? Ça m’intéresse, je vais creuser cette piste ;)
Par contre, tout passer sous libre office, j'ai déjà essayé, mais les macros Excel ne sont pas compatibles avec OOffice (ou alors je ne sais pas comment faire).
En tout cas, merci à tous !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
1- pour éviter quels plantages utilises tu les Application.Wait Time + TimeSerial ?
2- essaie de sauver directement le classeur après la copie, comme ceci :
Au passage, j'ai modifié ta variable nom grâce à Format, et référencé ActiveWorkbook dans un bloc With...
3- externaliser les bdd sert à l'utilisation du classeur. En fait, dans ton cas, je ne le recommande plus...
4- non en effet, les programmes libres n'utilisent pas Visual Basic, mais un Basic différent.
2- essaie de sauver directement le classeur après la copie, comme ceci :
Dim nom As String With ActiveWorkbook nom = Format(Now, "dd-mm-yyyy_hh-mm") & "_" & .Name .SaveCopyAs .Path & "\" & nom .Save End With
Au passage, j'ai modifié ta variable nom grâce à Format, et référencé ActiveWorkbook dans un bloc With...
3- externaliser les bdd sert à l'utilisation du classeur. En fait, dans ton cas, je ne le recommande plus...
4- non en effet, les programmes libres n'utilisent pas Visual Basic, mais un Basic différent.
Lorsque VBA enchaine des enregistrements sur mon autre ordinateur qui me sert de sauvegarde, régulièrement j'avais des plantages... j'ai créé ce wait time, et depuis plus de souci...
Pour info, j'ai essayé "SaveCopyAs" sur un Office2013, et ça fonctionne parfaitement.
J'ai réessayé sur mon office2000, même en vidant mon classeur de toutes les données, ça ne fonctionne toujours pas.
Je vais tester ta méthode et je te redis.
Pour info, j'ai essayé "SaveCopyAs" sur un Office2013, et ça fonctionne parfaitement.
J'ai réessayé sur mon office2000, même en vidant mon classeur de toutes les données, ça ne fonctionne toujours pas.
Je vais tester ta méthode et je te redis.
Merci quand même pour votre réponse.
Il ne s'agit pas de l'espace disque, mais plutôt de l'espace alloué au fichier temporaire puisqu'il n'accepte pas plus de 2,53Mo. Forcez l'enregistrement dans un répertoire de votre disque dur.
Cdlt
Merci Frenchie83