VB EXCEL ActiveWorkbook.SaveCopyAs trop long [Fermé]

Signaler
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
-
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
-
Bonjour à tous,

J'ai un soucis dans un programme VB Excel: le code: "ActiveWorkbook.SaveCopyAs..." dure longtemps (25 secondes). Je copie sur un autre serveur, est-ce que cela pourrait être le problème?
J'aimerais le remplacer par un code dont l'exécution est plus rapide, mais je n'ai pas trouvé. Cela n'existe probablement pas. Je serais ravie d'avoir un coup de pouce!

Bonne journée à tous,
Ludivine

11 réponses

Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
Bonjour,
Quel est le poids du classeur en Mo ?
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Bonjour Michel, merci de ta réponse. Il faut 3,55 Mo.
Du coup, j'ai tenté une autre méthode: une seule feuille m'intéresse, donc

J'ai remplacé
ActiveWorkbook.SaveCopyAs "\\1.1.1.1\xxxxxx.XLS"

par ça:
Sheets("Feuil1").Copy
ActiveWorkbook.SaveCopyAs Filename:= _
"\\1.1.1.1\xxxxxx.xls"
Et j'ai gagné un temps fou. Pour l'instant, cette solution me convient. On attend un peu mais c'est supportable.
Ludivine
Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
Bonjour,

De toutes façons avec 3,5 Mo, fichier obèse, outre le temps d'ouverture, de sauvegarde, tu risques fort d'avoir des refus d'ouverture, de corruption... 95% de ce genre de problèmes viennent de ces fichiers obèses: 2 à 2,5Mo semble la limite critique. Pour ma part je ne dépasse jamais 1,5 Mo et essaie toujours de rester sous 1Mo.
Messages postés
1227
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
407
Bonjour Ludivine50, michel_m :)
Ludivine, pour sauvegarder une feuille, tu peux aussi utiliser Worsheets(i).saveas
Pour ce qui es de la taille, effectivement 3,5 Mo c'est beaucoup mais loin d'etre "trop pour excel". Microsoft ne recommande pas de taille limite mais ne garantit pas la fiabilité des calculs au delà de 20Mo (perso j'ai déjà vu du 90 Mo qui fonctionnait encore ! :s ).
Pour ton problème de lenteur, as-tu testé la meme instruction sur le disque local ? là tu donnes l'adresse d'une machine distante, il faut aussi conter un temps de connection à cette machine (tu peux aussi essayer de monter un lecteur réseau sur le pc et ensuite passer par une lettre de lecteur dans ton code pour accelerer un peu)
Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
D'accord, je dis des c...!
regarde donc Tous les messages sur ce forum et d'autres plus sérieux concernant ce problème !... 90 Mo bien sûr ca s'enregistre en 1 clin d'oeil...Vachement pratique

comme m'avait dit un des mes grands chefs après que j'eus réalisé un 5 mo : gros classeur= gros c... et bonjour la rallonge reportée (ou la fin de l'essai pour le stagiaire)

Microsoft ne va pas se contredire puisqu'il propose des feuilles disproportionnées (qui utilises 1 million de lignes?)
Messages postés
1227
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
407
Re,
euh....michel_m je ne voulais pas t'offenser ! Je suis plutot d'accord avec toi, il faut tendre à avoir les classeurs les plus legers possibles, viser 1Mo est une bonne pratique....maintenant en entreprise de nombreux classeurs excel qui font plus de 3Mo s'échangent tous les jours sans que cela ne pose de probleme particulier (pour info un simple feuille de données avec env 20000 lignes et 15 colonnes atteindra 5Mo sans meme la moindre formule ou mise en forme, ce qui est courant quand on extrait de données pour analyse ad hoc depuis un ERP par exemple).
Pour le fichier de 90Mo c'était un exemple extreme de ce qu'il ne fait pas faire (créé par un financier, les champions du monde du gros fichier excel), moi-meme j'avais tenté de le réduire (ce fichier nécessitait un quantité de RAM importante pour l'ouvrir et "monopolisait" les ressources de la machine) !
Bref je ne dis pas que tu dis que de c..... (et meme loin de là, jsuis meme plutot d'accord avec toi comme bien souvent) mais je suis un peu moins 'radical' sur cette histoire de taille (et j'apportais qqes compléments d'infos)...dsl....
Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
Tiens donc!

Sauf que si un jour, un de tes réalisations 5Mo se coince; Bonjour les petites annonces. La perte de patrimoine due à cette erreur te grillera définitivement dans ton secteur

L'évaluation du projet au départ a été bâclée... (proverbe chinois: "si tu es pressé commence par t'asseoir" à écrire en grande banderole dans les salles d'info). Excel n'est pas forcément la solution mais très souvent un mix Access-Excel et on très bien faire légalement une base de données au format Access sans avoir Access (par ADOX)

Excuses moi de m'énerver mais malgré tous les messages de problèmes dûs au fichier obèse, il y a toujours l'homme qu'a vu l'homme qu'a vu l'ours de 90 Mo...
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Bonjour à tous les deux et merci beaucoup de votre aide.
le fichier est trop lourd effectivement, malheureusement je ne peux pas le diviser en plusieurs fichiers. Au moins, il ne devrait pas trop s'alourdir par la suite.

Worsheets(i).saveas "\\1.1.1.1\xxxxxx.XLS" est plus rapide que "ActiveWorkbook.SaveCopyAs "\\1.1.1.1\xxxxxx.XLS", mais plus lent que
"Sheets("Feuil1").Copy 
ActiveWorkbook.SaveCopyAs Filename:= _ 
"\\1.1.1.1\xxxxxx.xls" 


J'ai aussi testé la différence de durée d'exécution entre enregistrer en local ou sur le serveur. Aucun écart en fait. C'est bon à savoir.
Je vais donc rester sur
"Sheets("Feuil1").Copy 
ActiveWorkbook.SaveCopyAs Filename:= _ 
"\\1.1.1.1\xxxxxx.xls" 

qui me satisfait pas mal. Mais j'ai appris qu'effectivement le problème vient bien de la grosseur du fichier. A éviter pour les prochaines fois.
Je vous remercie beaucoup tous les deux, et bonne journée.
Messages postés
1227
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
407
ok; pb résolu alors....
bonne journée
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Bonjour,

Je rouvre ce dossier, car mon code pose de gros problèmes.
"Sheets(array("Feuil1","Feuil2")).Copy 
ActiveWorkbook.SaveCopyAs Filename:= _ 
"\\1.1.1.1\xxxxxx.xls" 

En effet, il plante régulièrement. J'ai l'impression qu'Excel ne pige pas que l'activeWorkbook dont je parle est le classeur qu'il vient de créer. En fait, il crée le fichier, puis il affiche la boîte de dialogue "Enregistrer sous" 2 fois, puis plantage. Le fichier est carrément supprimé, puis procédure de récupération des fichiers.

Y-a-t-il un autre code qui permet de copier un fichier avec sélection de deux feuilles seulement, et sauvegarde sous un nouveau nom, sans plantage?

merci beaucoup
Ludivine