XL 2021 Accélérer la copie du classeur actif faite par vba

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous :)
Je vous souhaite un beau WE...
et pour ce fil
Bjr Gérard, Bjr Fipat, Bjr le Fil :)

Dans ce fil, j'ai choisi le code de Gérard qui fonctionne super bien, Merci Gérard :)
Merci aussi à Fipat :) ton code fonctionne aussi et je le garde.

Je reviens en référence au fil ci-dessus pour une autre question.
Est-il possible "d'Accélérer la copie du classeur actif faite par vba ?"

Je m'explique :
Le but de ce code est de faire une copie dans un dossier "sauvegarde",
- Cette copie doit se faire après l'affectation du résultat d'un appel,
- Pour cette mission, chaque appel dure entre 2 et 6mn en moyenne,
(autant dire qu'il y en a beaucoup, donc autant d'affectations.

J'en viens à ma question :
- Si, par exemple, je fais un copier/coller d'un classeur sur le bureau de mon ordi, il m'est demandé si je veux le renommer et la copie est faite quasi instantanément pour un classeur de moins de 2Mo.

- la copie faite par vba avec le code de Gérard
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B1]) Is Nothing Then Exit Sub
Dim fichier1$, chemin$, fichier2$, a$(), n%
fichier1 = ThisWorkbook.Name
If fichier1 Like "* ## ## ##*" Then Exit Sub
ThisWorkbook.Save 'enregistre le fichier
chemin = ThisWorkbook.Path & "\Sauvegarde\"
If Dir(chemin, vbDirectory) = "" Then MkDir chemin
fichier2 = Dir(chemin & "*.xlsm")
While fichier2 <> ""
    ReDim Preserve a(n) 'base 0
    a(n) = fichier2
    If n Then Kill chemin & a(n - 1) 'vide le dossier
    n = n + 1
    fichier2 = Dir
Wend
ThisWorkbook.SaveCopyAs chemin & Left(fichier1, Len(fichier1) - 5) & Format(Now, " hh mm ss") & ".xlsm" 'sauvegarde
End Sub
Prend environ 3 secondes, et quelques fois jusqu'à 7 secondes.
Et 3/7 secondes X par un nombre de fois important, ça fini par compter et c'est "un peu barbant" d'attendre chaque fois 3/7 secondes avant de continuer le boulot.

Ma question donc (j'y crois pas trop lol)
Est-il possible "d'Accélérer la copie du classeur actif faite par vba ?"
J'ai fait des recherches cette nuit sans rien trouver pour l'instant.

Mais qui sait avec nos ténors......
Merci à toutes et à tous pour m'avoir lu,
:)
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bjr Gérard :), Bjr Le Fil :), Bjr le Forum :)

Voilà une semaine que je teste le code adapté de mon cher Gérard.
Je n'ai aucun souci tout fonctionne (selon moi) :)

Si une bonne âme passe par la (le Forum n'en manque pas), veut bien tester et me dire comment ça fonctionne...

C'est à prendre : procès et fichier au #post 28
Un grand merci par avance,
:)
 

job75

XLDnaute Barbatruc
Je crois comprendre ce qui te perturbe et te fait croire que la 1ère sauvegarde fonctionne.

Tu n'as pas compris que les modifications du fichier de base sont toujours prises en compte par la 2ème sauvegarde, même quand elles n'ont pas été enregistrées.
 

Usine à gaz

XLDnaute Barbatruc
Bjr Gérard :), Bjr Le Fil :), Bjr le Forum :)

Bon, les renards verts sont toujours là :p🤪🙃
mais je crois que mon incompréhension vient du mot "sauvegarde"
Pour moi, ton code que j'ai tenté d'adapter ne fait plus une "sauvegarde" mais une copie

"te fait croire que la 1ère sauvegarde fonctionne"
J'ai bien compris que la 1ère sauvegarde ne fonctionne pas
En cas de plantage Excel ou ordi, je n'ai pas besoin de "sauvegarde" car la copie qui fonctionne, enregistre bien le fichier avec toutes les modifs (y compris la dernière).

"Tu n'as pas compris que les modifications du fichier de base sont toujours prises en compte par la 2ème sauvegarde, même quand elles n'ont pas été enregistrées.)
Ben si, je l'ai compris car la copie fonctionne (pour moi, c'est une copie pas une sauvegarde)

Et puisqu'en cas de plantage, je repars de la copie qui est dans le dossier "sauvegarde", j'ai bien toutes mes modifications.

Bon, je retourne à la chasse aux renards
:)
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel, le forum,
la copie fonctionne (pour moi, c'est une copie pas une sauvegarde)
Dans mon code il y a 2 sauvegardes, la 1ère sans copie de fichier, la 2ème avec copie.

La 1ère est inutile s'il n'y a pas de modification, on peut alors l'éviter avec :
VB:
If Not ThisWorkbook.Saved Then ThisWorkbook.Save 'enregistre le fichier
PS : j'ai déjà dit que l'enregistrement à la fermeture n'est pas une bonne chose.

A+
 

Usine à gaz

XLDnaute Barbatruc
Bjr Gérard :)
Quelle patience !!!
Comme pour tes codes, j'en suis admiratif :)
"j'ai déjà dit que l'enregistrement à la fermeture n'est pas une bonne chose"

Nos fichiers de travail "doivent" toujours" être enregistrés à leurs fermetures (sous peine de perdre nos saisies)
J'ai mis l'enregistrement à la fermeture pour que mes Commerciales n'aient pas à choisir entre "enregistrer ou pas" et surtout pour qu'il n'y ait pas de risque d'erreur de clic.
C'est un problème de prévoir l'enregistrement en "automatique" ?
:)
 

Usine à gaz

XLDnaute Barbatruc
Mon "usine à gaz" biscornue, codes bidouillés etc... est verrouillée de tous côtés et pour le moindre clic = Impossible de faire ce que je n'ai pas programmé.
Donc, par exemple "pour voir" l'utilisateur efface toute la feuille ce sera enregistré ! IL NE PEUT PAS :)
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 087
Messages
2 116 083
Membres
112 655
dernier inscrit
fannycordi