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
Re-Bjr Gérard :)
Merci à toi de me répondre encore après toutes mes "obstinations" et adaptations de sauvage :)

Il faut savoir que mes fichiers de travail sont, on va dire "compliqués" et qu'il m'est impossible d'exposer tous les tenants et aboutissants de mes questions.
C'est pourquoi, j'expose et j'explique mes demandes pour insérer les codes répondus dans mes "usines à gaz"
Je les bidouille - je patauge grave - j'essaie d'adapter en bricolant, en tâtonnant etc...

Pour l'instant, je fini toujours par y arriver et mes fichiers fonctionnent nickel.

Tout ça grâce à toi (je ne te dis pas le nombre de tes codes dans mes fichiers) et grâce aux autres membres du forum qui ont la gentillesse et la patience (comme toi) de me répondre (je ne vais pas tous les citer, j'en oublierait).

Pour revenir à SaveCopyAs, j'ai testé plusieurs fois car je m'en suis inquiété...
La copie du classeur est bien faite dans l'état avec sa dernière modification.
C'est'y bizarre ?
:)
 

Usine à gaz

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

Pas réussi à modifier mon fichier de prospection pour qu'il soit anonymisé.
J'ai donc fait un petit fichier qui reflète bien ce que je voudrais.
Le but étant de faire une copie (pas une sauvegarde)
Je le joins à ce #post
Merci encore une fois,
:)
 

Pièces jointes

  • copy test 2023 06 20.xlsb
    25 KB · Affichages: 3

Usine à gaz

XLDnaute Barbatruc
Bjr Gérard :)
Merci pour le retour.
Le souci de temps n'exécution n'est plus un souci puisque le code s'exécute dans mon fichier de travail en 0.6 sec.
Donc plus de souci de ce côté là .... à condition que :
Le code qui fait une copie (non une sauvegarde) soit bon.
C'est bien une copie dont j'ai besoin.
J'ai fait d'autres tests et ça semble bien fonctionner, même en "repartant" de la copie faite.
:)
 

job75

XLDnaute Barbatruc
Bon je vois qu'il faut te mettre les points sur les i.

Quand tu écris :
VB:
ThisWorkbook.SaveCopyAs Filename
la variable Filename n'est pas définie, ni déclarée, elle est de type Variant avec la valeur Empty.

L'expression ne fait aucune sauvegarde et les modifications éventuelles ne sont pas enregistrées.

C'est vraiment n'importe quoi.
 

Usine à gaz

XLDnaute Barbatruc
C'est vraiment curieux ???
Chez moi :
Etape 1 : ouverture du fichier de travail
- j'ouvre copy test 2023 06 20 (qui reste ouvert donc pas de sauvegarde faite)
- je saisie en I10 : "enregistré dans la copie"
- Clic sur I4 pour faire la copie,
- copy test 2023 06 20 (est resté ouvert donc pas de sauvegarde faite mais copie faite)
- Je simule un plantage Excel (ctrl-alt-supprime)

Etape 2 : ouverture de la copie

- j'ouvre la copie "copy test 2023 06 20 12 27 25" qui est dans le dossier "sauvegarde"
En I10 : "enregistré dans la copie" dernière saisie "non sauvegardée" est bien enregistré !

- Pour voir si la copie fonctionne toujours : clic sur I4 pour faire la copie,
Et ça fonctionne, j'ai bien ma nouvelle copie qui est dans le dossier "sauvegarde" et la nouvelle copie a bien les nvlles hh mm sec.


1687260918296.png

:)
Etape
 

Pièces jointes

  • copy test 2023 06 20.xlsb
    25 KB · Affichages: 1
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Je comprends Gérard et je suis désolé de te faire perdre du temps.
Techniquement évidement, je suis certain que tu as raison.

Mais alors je ne comprends pas pourquoi ça fonctionne chez moi ???

Le mieux est d'en rester là pour ce fil.
Je verrai bien à l'usage si ce que j'ai testé est bon.

Toutefois, je reviendrai dans quelques temps pour rendre compte.
Encore MERCI Gérard pour ta patience...
:)
 

Discussions similaires

Statistiques des forums

Discussions
313 258
Messages
2 096 613
Membres
106 684
dernier inscrit
ekouepatrick