> Tous les forums > Forum Bureautique
 Comment savoir si un fichier existe déjà ? en VBASujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Yaloo
  Posté le 09/04/2011 @ 21:02 
Aller en bas de la page 
Petit astucien

Bonjour,

Dans un document word .doc, j'ai une macro à la fermeture du document qui m'enregistre mon courrier sous le nom d'un client :

Private Sub Document_Close()
If NOM_CLIENT <> "" Then
répertoire = "C:\Essai"
Z = répertoire & "\" & NOM_CLIENT & ".doc"
If Dir(répertoire, vbDirectory) = "" Then MkDir répertoire
ActiveDocument.SaveAs Z
ActiveWindow.Close
Application.DisplayAlerts = False
ThisDocument.Saved = True
MsgBox "Le courrier est enregistré sous " & NOM_CLIENT & vbNewLine & _
"dans le répertoire " & répertoire
Else
Application.DisplayAlerts = False
ThisDocument.Saved = True
End If
End Sub

Le NOM_CLIENT est définit par un USF.

Le problème que je rencontre, c'est que si un fichier existe déjà à ce nom, cela m'écrase le premier.

Je voudrais donc ouvrir la boite "Enregistrer sous" et non écraser mon premier fichier.

Est-ce possible et comment ?

Merci d'avance

Yaloo



Modifié par Yaloo le 09/04/2011 21:03
Publicité
galopin01
 Posté le 09/04/2011 à 21:44 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

De la même manière que tu as fait pour le répertoire :

If Dir(NOM_CLIENT & ".doc") = "" Then
ActiveDocument.SaveAs Z
Else
"blabla"
End if

A+

Yaloo
 Posté le 10/04/2011 à 09:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

Merci Galopin, c'est OK

Je voudrait améliorer encore ma macro :

Private Sub Document_Close()
If NOM_CLIENT <> "" Then
répertoire = "C:\Essai"
Z = répertoire & "\" & NOM_CLIENT & ".doc"
If Dir(répertoire, vbDirectory) = "" Then MkDir répertoire
If Dir(Z) = "" Then
ActiveDocument.SaveAs Z
MsgBox "Le courrier est enregistré sous " & NOM_CLIENT & vbNewLine & _
"dans le répertoire " & répertoire
Else
J'aimerai que la boite ci-dessous s'ouvre directement dans le bon répertoire et si possible avec le nom du client pour avoir la possibilité de rajouter juste un nom ou un chiffre
Application.Dialogs(wdDialogFileSaveAs).Show
J'aimerai un message disant "courrier enregistrer sous NOM DU FICHIER dans le répertoire

Si la personne annule la boite enregistrer sous que ce passe-t-il ? Si annuler peut on avoir un message indiquant que le fichier n'est pas enregistrer ?
End If
ActiveWindow.Close
Application.DisplayAlerts = False
ThisDocument.Saved = True
Else
Application.DisplayAlerts = False
ThisDocument.Saved = True
End If
End Sub

S'il y a moyen de simplifier, ou si je m'y prends mal. On peut modifier.

{#}



Modifié par Yaloo le 10/04/2011 09:23
galopin01
 Posté le 11/04/2011 à 02:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

Euh... Là je ne suis pas très compétent : Les automatismes pas automatiques et semi programmés avec liberté d'action contrôlée, j'y crois pas trop...

Ou tu as une procédure infaillible et tu la mets en place, ou tu n'en a pas et tu fais confiance à l'opérateur pour se débrouiller.

ThisDocument.Saved = True

Cette ligne à pour but de tromper VBA pour lui faire croire que le fichier est enregistré alors qu'en fait il ne l'est pas. Si vous voulez fermer un classeur modifié sans l'enregistrer ou sans qu'un message vous propose de le faire (Crosoft dixit)

Il est donc parfaitement inutile (et dangereux) d'en saupoudrer un peu partout... Il suffit de le mettre uniquement avant de fermer la fenêtre ou l'application et surtout pas après.

...car dans ce cas toutes les modifications seront perdues sans préavis : Ton document étant marqué comme enregistré toute modification même ultérieure sera ignorée !

Application.DisplayAlerts = False

Cette ligne est inutile (et dangereuse) avant ThisDocument.Saved = True car dans tous les cas non seulement toute modification ultérieure serait ignorée mais d'autres messages systèmes pourraient passer à la trappe...

Pour résumer : un projet à abandonner au plus vite !

Yaloo
 Posté le 11/04/2011 à 08:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour Galopin,

OK je vais supprimer ces 2 lignes et repenser à la façon de remettre ça dans le droit chemin, mais as-tu une solution pour :

J'aimerai que la boite ci-dessous s'ouvre directement dans le bon répertoire et si possible avec le nom du client pour avoir la possibilité de rajouter juste un nom ou un chiffre
Application.Dialogs(wdDialogFileSaveAs).Show
J'aimerai un message disant "courrier enregistrer sous NOM DU FICHIER dans le répertoire

Est-ce possible ?

A+

galopin01
 Posté le 11/04/2011 à 14:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

C'est précisément ce qui me gêne le plus...

juste un nom ou un chiffre : Je suis plus que dubitatif...

Tu peux surement utiliser ChDir pour changer le répertoire par défaut (avec une variable pour mémoriser le répertoire courant -CurDir- et pouvoir y revenir)

mébon ça ne garantit rien... surtout pas que l'utilisateur n'en fera pas qu'à sa tête.

De toute façons le :

Application.Dialogs(wdDialogFileSaveAs).Show

...j'y crois pas du tout ! Il faudrait plutot passer par une commande du type GetSaveAsFilename qui n'existe que dans Excel mais pas dans Word !

En revanche Word à toute une ribambelle de commandes spécifiques que je ne connais malheureusement pas...

Il faudrait demander l'avis d'un macroteur en VBA Word. Moi c'est pas du tout mon terrain de jeu !

galopin01
 Posté le 11/04/2011 à 14:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

En fait, il faut certainement passer par

Il y a aussi : Application.FileDialog(msoFileDialogFolderPicker) qui peut permettre de renvoyer un répertoire... et :

Application.FileDialog(msoFileDialogSaveAs) pour sauvegarder, mais ça revient au même YFO d'abord trouver le macroteur Word compétent...

Yaloo
 Posté le 11/04/2011 à 21:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonsoir,

Galopin, j'ai cherché dans les directions que tu indiques mais je n'ai pas trouvé, quand a ChDir, j'avais déjà essayé mais sans réussir.

J'ai galéré mais je suis arrivé à peu près à ce que je voulais faire :

Private Sub Document_Close()
Dim dlgSaveAs As Dialog
If NOM_CLIENT <> "" Then
répertoire = "C:\Essai"
Z = répertoire & "\" & NOM_CLIENT & ".doc"
If Dir(répertoire, vbDirectory) = "" Then MkDir répertoire
If Dir(Z) = "" Then
ActiveDocument.SaveAs Z
MsgBox "Le courrier est enregistré sous " & NOM_CLIENT & vbNewLine & _
"dans le répertoire " & répertoire
Else
ChangeFileOpenDirectory "C:\Essai\"
Set dlgSaveAs = Dialogs(wdDialogFileSaveAs)
With dlgSaveAs
.Name = NOM_CLIENT
.Show
End With
NomDoc = ActiveDocument.Name
MsgBox "Le courrier est enregistré sous " & NomDoc & vbNewLine & _
"dans le répertoire " & répertoire
End If
ActiveWindow.Close
Else
Application.DisplayAlerts = False
ThisDocument.Saved = True
End If
End Sub

J'ai encore un petit souci, lorsque l'utilisateur clique sur "Annuler" dans la boite "Enregistrer sous", je souhaiterai que ça me ferme le document ou l'application en me mettant un message comme quoi ce n'est pas enregistré. Il faudrait récupérer la valeur comme quoi on clique sur "Annuler". Est-ce possible ?

{#}



Modifié par Yaloo le 11/04/2011 21:52
galopin01
 Posté le 12/04/2011 à 03:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Je ne pense pas... C'est pourquoi je pensai à quelque chose comme GetSaveAsFilename qui renvoie une valeur de retour et permet de choisir l'action à exécuter en fonction du choix de l'utilisateur.

A+

Publicité
Yaloo
 Posté le 13/04/2011 à 17:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Galopin,

J'ai cherché, cherché et encore cherché....

Je suis tombé sur ce site , qui indique comment utiliser une fonction Excel dans Word.

Donc "en prenant soin d'avoir inclu la bibliothèque Excel avec Outils/Références : cocher "Microsoft Excel XX.X Object Library" "

J'ai ceci dans ma macro Excel.Application.GetSaveAsFilename ça m'ouvre bien ma boite "enregistrer sous", comment faire dans ma macro pour savoir si l'utilisateur a cliqué sur "Annuler" ?

{#}

galopin01
 Posté le 13/04/2011 à 19:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

GetSaveAsFilename ne fait rien.

GetSaveAsFilename enregistre seulement le souhait de l'utilisateur. C'est à toi dans la suite de ta macro de déterminer quoi faire en fonction de son choix.

Exécute cette macro :

Sub test()
i = Application.GetSaveAsFilename
MsgBox i
End Sub

La macro ne fait rien : elle te dit quel a été le choix de l'utilisateur. A toi de développer ta macro en fontion de i...

A+

Yaloo
 Posté le 13/04/2011 à 22:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Ok, je vais tester ça.

A+

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Comment savoir le nb des mêmes valeurs dans 2 tab differents
Comment créer fichier client avec carte de fidélité
comment ouvrir fichier extension xspf
comment retélécharger Office déjà acheté ?
Comment rechercher un fichier protégé par un mot de passe
Comment réduire le poids d'un fichier PDF ?
comment lire fichier.odt sur word 2007
WORD - Mettre mot de passe sur fichier existant déjà
comment affecter une macro a un fichier excel ?
Powerpoint comment insérer un fichier musique
Plus de sujets relatifs à Comment savoir si un fichier existe déjà ? en VBA
 > Tous les forums > Forum Bureautique