Le point sur activeworkbook.saveas

Bonjour,

je ne trouve pas la réponse à uen demande de débutant sur l amanipulation des fichiers:

Je veux ouvrir un fichier pour travailler dessus, wb1, mais en faire tout de suite une sauvegarde de réserve avant de le réenregistrer en fin de processus sous un nouveau nom.

ainsi j'aurais la sauvegarde avant, et le fichier modifié enregistré daté après.

J'ai écrit

Set wb1 = ThisWorkbook
Set ws1 = wb1.Worksheets("Feuille1")
ws1.Copy
ActiveWorkbook.SaveAs "\\Station-serveur\BDD\Sauv BDD Avant Import\SAUVEGARDE BASE avt IMPORT du " & Format(Now(), "mmdd-hhmm") & ".xlsm"

' Traitements divers et notamment nombreuses créations à partir de ce fichier BASE qui est une Base de données Excel

ws1.activate

activeworkbook.close savechanges:=true (le sauvegarde modifié)

'ou

ws1.activate

ActiveWorkbook.SaveAs "\\Station-serveur\BDD\Sauv BDD Avant Import\BASE Modifiée le " & Format(Now(), "mmdd-hhmm") & ".xlsm"

J eprends un debogage dès la première ligne Activeworkbook.....

J voudrais y vois clair ou est l'erreur ?

Merci de votre attention

Set wb1 = ThisWorkbook
Set ws1 = wb1.Worksheets("Feuille1")
ws1.Copy
ActiveWorkbook.SaveAs "\\Station-serveur\BDD\Sauv BDD Avant Import\SAUVEGARDE BASE avt IMPORT du " & Format(Now(), "mmdd-hhmm") & ".xlsm"
ActiveWorkbook.Close savechanges:=False    ' << fermer la copie de sauvegarde

ws1.activate    ' au cas où il y aurait d'autres classeurs ouvert

' Traitements divers et notamment nombreuses créations à partir de ce fichier BASE qui est une Base de données Excel

activeworkbook.close savechanges:=True (le sauvegarde modifié)

Bonjour,

À l'aide d'un pas-à-pas ( touche F8 ) > l'on voit qu'il y a inversion entre le traitement et l'activation du fichier source.

Un essai ...

ric

Merci Ric.

oui il y a d'autres fichiers ouverts à ce moment là

par contre le bog apparait bien unqiuement sur l'instruction

ActiveWorkbook.SaveAs "\\Station-serveur\BDD\Sauv BDD Avant Import\SAUVEGARDE BASE avt IMPORT du " & Format(Now(), "mmdd-hhmm") & ".xlsm"

et pas après. Donc c'est pas ça..

;-(

Bonjour,

msgbox "\\Station-serveur\BDD\Sauv BDD Avant Import\SAUVEGARDE BASE avt IMPORT du " & Format(Now(), "mmdd-hhmm") & ".xlsm"

Est-ce que le résultat obtenu dans le message-box est bon ?

Le nom du serveur > chacun des deux sous-dossiers > il n'y a pas d'erreur ??

Si tu te rends manuellement dans ce dossier > tu as bien le droit de créer des fichiers dont les noms seraient semblables au nom obtenu dans résultat du message-box ???

ric

J'ai mis du temps, Rick et je te remercie de ton aide.

bien sur je pense d'abord aux étourderies.

Mais ça bloque toujours..

Je te renvoie un résumé du code qui évite la fastidieuse suite des opérations de wb1 vers wb2,3,4 et ne fait apparaitre que la manipulation des fichiers.

J'y ai ajouté à la fin l'option de sauvegarde de wb1, qui jusqu'à présent restait ouvert (comme çe je le controle), mais comme il se met à jour qd les autres se mettent à jour sur lui( il prend la date de l'oparation), il faut aussi l'incréometer lui aussi; d'ou la dernière phase.

..

mais quand tu fais

ActiveWorkbook.Close savechanges:=False ' << fermer la copie de sauvegarde

ça me gêne: cette fonction là sauvegarde ou non les changements mais ne sauvegarde pas el fichier, non ? Là, il est bien fermé, et sauvegardé AVEC les changements, c'est bien ça ? et donc il n'est plus actif: or la suite des opérationsn c'est de l'utiliser comme source pour les ws2,3 et 4 qui y prenent les valeurs dont il a besoin; dnc ce ne sera plu spossible, non ? il faut le laisser ouvert et faire cette opération à la fin du code, qd tout le monde s'est servi et si je ne veux pas qu'il reste ouvert.

Comme c'est la Base de Données avec laquele je travaille, c'est vrai que je la liase souvent ouverte mais mon vrai besoin serait de la renommer (mise à jour de sa date JJMM-HHMM) et le laisser ouvert.

Dans ce cas il faudrait écrire, corrige moi si je dis une connerie,

‘ws1.activate

ActiveWorkbook.SaveAs "\\Station-serveur\BDD\GRANDE BASE " & " Format(Now(), "mmdd-hhmm") & ".xlsm"

‘si on veut la fermeture du fichier BDD

ActiveWorkbook.Close savechanges:=True

‘Sinon, on ferme comme ça:

End Sub

tu es d'accord ?

Bonjour,

Si tu ouvres ton fichier et tu en fais une copie de sécurité sous un autre nom >

Rien ne sert de sauvegarder cette sauvegarde ... car, tu viens de la créer ...

ric

Pui, je crois que c'est là que je galère..

Donc , je dois supprimer quelle ligne dans ce cas ?

Bonjour,

Une fois la copie de sauvegarde complétée > s'il n'est pas nécessaire de la garder ouverte en arrière plan ...

Ferme cette sauvegarde ainsi > ActiveWorkbook.Close savechanges:=False ' << fermer la copie de sauvegarde

ric

C'est ça qui n'est ^pas très clair pour moi

ActiveWorkbook.SaveAs = enregistrer sous

ActiveWorkbook.savechanges=enregistrer, simplement

ActiveWorkbook.Close savechanges:=False = Fermer sans enregistrer et :=True = Fermer en enregistrant, soit quelle différence avec ActiveWorkbook.savechanges ?

Bonjour,

Quelle différence ? Déjà le .close qui ferme le fichier. Ce que ne fait pas le reste.

Et plus généralement c'est un langage. Et la beauté des langages, c'est qu'il y a plein de façons différentes de dire la même chose. Ou de dire des choses avec quelques nuances.

Merci de ton retour

c'est peut être les nuances que je ne vois pas bien et qui m'enquiquines..

Les utilisations dont j'ai besoin, si j'ai bien compris

qd je fais

ws1.copy

activeworkbook.saveas ...que devient le copie ? elle n'est pas enregistrée et on peut le faire avec ActiveWorkbook.Close savechanges:= .. ?

Alors la copie existe toujours ou a changé de nom et ws1 n'existe plus ?

ce qui donne

- enregistrer sans fermer = activeworkbook.saveas

- enregistrer en fermant = ActiveWorkbook.Close savechanges:=true

- fermer sans enregistrer = ActiveWorkbook.Close savechanges:=false

Quand je fais

Set wb1 = ThisWorkbook
Set ws1 = wb1.Worksheets("Feuille1")
ActiveWorkbook.SaveAs "\\Station-serveur\maison delahaye\BDD\Sauv BDD Avant Import\GRANDE BASE " & "SAUV avt IMPORT du " & Format(Now(), "mmdd-hhmm") & ".xlsm"

puis j'ouvre les différents fichiers modèles qui vont être créés, ws2,3,4,5 à partir de ws1

et que je les sauvegarde en les nommant (par exemple pour ws5):

With ws5 'Fichier de mise à jour PQ pour P5
ws5.Copy
ActiveWorkbook.SaveAs "\\Station-serveur\PARTENAIRES MD\INTERNET\MARKET PLACE\INTERMARCHE\Fichier de stock\Imports\Offres\MAJ\MAJ PQ INT (v" & ver & ")" & name & "-" & Format(Now(), "mmdd-hhmm") & ".xlsx"
DoEvents
ws5.Activate
ActiveWorkbook.Close savechanges:=False

Comment je peux laisser le fichier source wb1/ws1 ouvert ?

Au début je l'ai sauvegardé sour la forme d'une sauvegarde AVANT opération (GRANDE BASE " & "SAUV avt IMPORT du " & Format(Now(), "mmdd-hhmm") & ".xlsm) mais je dois le sauvegarder APRES aussi car il s'incrémente pendant les copies de données de lui vers ws2,3,4,.5, ET le laisser ouvert.

Comment faire ça ?

Car là il se ferme, il ne me reste que sa copie AVANT opérations qui reste ouverte (..av IMPORT)

pourtant je n'ai pas fermé ws1; je l'ai seulement sauvegardé avec un autre nom; du coup c'est qui maintenant ws1 ?

Je voudrais un second ws1 AVEC les modifs induites par mes opérations entre son ouverture et sa sauvegarde à l'état intial en GRANDE BASE " & "SAUV avt IMPORT du " & Format(Now(), "mmdd-hhmm") & ".xlsm"

Entre les deux, dans le code, ws1 est enrichi des dates de mouvements de copie de lui même vers ws2, 3,4,5, qui sont donc des mises à jour à partir de la source ws1.

J'ai donc loupé qqchse puisque à la fin, j'ai tous les ws2,3,4,5 ouevrts et la copie initiale SAUV avant Import.

Biien sur cette sauvegarde était faite AVANT les fameuses opérations.

Hello,

.saveas change effectivement le nom de ton fichier actif.

.savecopyas ne touche pas à ton fichier modèle, et enregistre une copie de ton fichier sous un nouveau nom.

J"y vois pas clair dans les instructions.

Je veux mettre à jour 4 fichiers ws2, 3, 4, 5 à partir de données qui sont ds une base ws1.

ws2,3,4,5 initiaux sont des modèles.

En sortie de programme, ils sont renommés et rangés, peuvent rester ouverts ou être fermés, pas d'importance je dois les controler

La source, ws1, a un nom de base, il est toujours ouvert chez moi.

Avant les opérations, il doit être renommé en "sauvegarde de telle heure" qqpart et fermé

Après les opérations, il doit être de nouveau enregistré car lui même s'est enrichi des dates/heurs des opérations et rester ouvert.

J'ai mis en forme et simplifié pour faciliter la compréhension ds le fichier joint

27code-maj-pq-3.docx (15.54 Ko)

Merci de vos lumières;

Avec le code actuel, les fichiers cibles restent ouvert et sont bien remplis

Le fichier source est bien sauvegardé avant les opérations

Mais à la fin il ne reste pas ouvert, ni avec son nouveau nom "post opérations"

Rechercher des sujets similaires à "point activeworkbook saveas"