IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Saveas puis Save


Sujet :

VBA Word

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut Saveas puis Save
    Bonsoir,
    J'ai fait une macro qui sauvegarde mon fichier dans Documents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Set WshShell = CreateObject("WScript.Shell")
        ChangeFileOpenDirectory WshShell.SpecialFolders("MyDocuments")
        With Dialogs(wdDialogFileSaveAs)
            .Name = Format(Now, "dddd d mmmm yyyy")
            .Show
        End With
    par contre je voudrais que le prochaine fois que je passe dans cette boucle je fasse simplement
    un save sans ouvrir le dialogbox.
    Je ne trouve pas la fonction qui indique que le fichier possède déjà un nom.
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Tu dois t'y prendre autrement.

    Fais un Save et si c'est la première fois, une boîte de dialogue sera proposée, dans le cas contraire, il sera sauvegardé.
    Save réagit comme SaveAs si c'est la première fois.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Actuellement je fais ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Set WshShell = CreateObject("WScript.Shell")
        ChangeFileOpenDirectory WshShell.SpecialFolders("MyDocuments")
        With Dialogs(wdDialogFileSaveAs)
            .Name = Format(Now, "dddd d mmmm yyyy")
            .Show
        End With
    mais la fonction wdDialogFileSave ne fonctionne pas
    et si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.Save FileName:=(Format(Now, "dddd d mmmm yyyy"))
    il m'enregistre mon fichier sans m'ouvrir la dialog box de SaveAs.
    Je pense cela peut venir du fait que ma macro est enregistrée dans le ruban de mon fichier Template pour word, il doit considérer que le fichier est déjà sauvegardé car il a déjà un nom :"normal.docm" pourtant quand j'ouvre word le nom du fichier dans le cadre en haut de Word est "Document1-Word" ????

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Je viens de comprendre.

    La boîte de dialogue est ouverte parce que tu le demande.
    Pour quelle raison passes-tu par une boîte de dialogue ?

    Un Activedocuement.SaveAs2 te permettra d'enregistrer avec le nom souhaité sans boîte de dialogue.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Dans le premier cas je propose un nom par défaut avec la date du jour ,et ce nom doit être modifié par l'opérateur

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Quelle est la condition du second passage ?
    Pourquoi l'utilisateur a-t-il la possibilité de modifier la première fois et pas les suivantes ?
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    En gros tu ouvres Word tu travailles quand tu sauvegardes la première fois tu donnes un nom , et les fois suivantes tu enregistres simplement sous le nom que tu as donné précédement.
    En fait c'est le fonctionnement de la fonction Save de Word.
    Je dois faire ça plutôt qu'un simple save , car chaque fois que je fais une sauvegarde je copie aussi le fichier sur une clé USB.

  8. #8
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Si ton document n'a jamais été enregistré alors son path est une chaîne vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Thisdocument.Path = vbNullString Then
        'placer ici le code de la fenêtre SaveAs
    Else
        ThisDocument.Save
    End If
    Cordialement,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Ben non si je fais comme ça j'ai quand même un path
    C:\Users\PC\AppData\Roaming\Microsoft\Templates"
    Je vais faire le test sur "Roaming" avec Instr et si <> 0 alors c'est la première sauvegarde.

  10. #10
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    C'est parce que tu utilises un modèle. Dans ce cas tu peux directement comparer ThisDocument.AttachedTemplate.Path avec ThisDocument.Path. Ou Name au lieu de Path, ou la concaténation des deux : FullName.

    Cordialement,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    J'ai essayé aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Tmp As String
    Tmp = ThisDocument.AttachedTemplate.Name
    Tmp = ThisDocument.Name
    Au démarrage les deux me renvoie "normal.dotm"
    si je sauvegarde le fichier Word le nom dans la barre des titres change et si je rappelle la fonction les deux noms restent à "normal.dotm".
    C'est comme si je ne sortais jamais de mon template

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Bon ben j'ai fait avec une variable Boolean globale , tant pis.

  13. #13
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Ton code doit être dans un module du projet Normal, et non pas dans le classeur à enregistrer.
    Si tel est le cas, tu ne peux pas utiliser ThisDocument mais une instance du classeur à enregistrer...

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  14. #14
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par sdecorme Voir le message
    J'ai essayé aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Tmp As String
    Tmp = ThisDocument.AttachedTemplate.Name
    Tmp = ThisDocument.Name
    Au démarrage les deux me renvoie "normal.dotm"
    si je sauvegarde le fichier Word le nom dans la barre des titres change et si je rappelle la fonction les deux noms restent à "normal.dotm".
    C'est comme si je ne sortais jamais de mon template
    C'est tout à fait normal. Le "ThisDocument" (en Word), et le "ThisWorkbook" (en Excel), désignent le fichier qui contient la macro qui s'exécute. Également, avec Word, il est impossible de séparer complètement le document de son modèle, lequel n'est pas obligatoirement "Normal.quelque chose".

    Par ailleurs, l'"ActiveDocument" (Word), l'"ActiveWorkbook" (Excel) et l'"ActivePresentation" (PowerPoint) désignent le fichier "actif" ou, en d'autres termes, le fichier sur lequel la macro exécute son travail.

    Pour être sûr que l'"ActiveDocument" est bien celui que l'on veut on peut le désigner spécifiquement en passant par la collection Windows() qui désigne tous les documents Word qui sont ouverts dans l'instance Word en cours:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("Fichiers.docm").Activate 'Pour un document enregistré
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("Document1").Activate 'Pour un document non-enregistré
    Règle générale, c'est le nom qui apparaît dans la barre des tâches

    Par exemple, j'ai créé un nouveau document (Document2) et j'ai mis la macro suivante dans mon Normal.dotm. De plus, le document A RichTextBox that can Bind to the RTF Property.docx n'est pas basé sur le modèle Normal, mais sur le modèle CodeProject, et il est déjà ouvert.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub testinfo()
        Dim Tmp1 As String
        Dim Tmp2 As String
        Dim Tmp3 As String
        Dim Tmp4 As String
        Tmp1 = ActiveDocument.AttachedTemplate.name
        Tmp2 = ActiveDocument.name
        Windows("A RichTextBox that can Bind to the RTF Property.docx").Activate
        Tmp3 = ActiveDocument.AttachedTemplate.name
        Tmp4 = ActiveDocument.name
        Debug.Print "Tmp1 =", Tmp1
        Debug.Print "Tmp2 =", Tmp2
        Debug.Print "Tmp3 =", Tmp3
        Debug.Print "Tmp4 =", Tmp4
    End Sub

    Voici les résultats obtenus:
    Tmp1 = Normal.dotm
    Tmp2 = Document2
    Tmp3 = CodeProjet.dotm
    Tmp4 = A RichTextBox that can Bind to the RTF Property.docx

    Voici une variante, où j'ouvre mon second document et où je fais afficher le ThisDocument. J'ai également mis la macro dans un module de Document2 au lieu d'in module de Normal.dotm:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub testinfo1()
        Dim Tmp1 As String
        Dim Tmp2 As String
        Dim Tmp3 As String
        Dim Tmp4 As String
        Dim Tmp5 As String
        Dim Tmp6 As String
        Tmp1 = ActiveDocument.AttachedTemplate.Name
        Tmp2 = ActiveDocument.Name
        Documents.Open FileName:="C:\Users\Clément Marcotte\Documents\A RichTextBox that can Bind to the RTF Property.docx"
        Tmp3 = ActiveDocument.AttachedTemplate.Name
        Tmp4 = ActiveDocument.Name
        Tmp5 = ThisDocument.AttachedTemplate.Name
        Tmp6 = ThisDocument.Name
        Debug.Print "Tmp1 =", Tmp1
        Debug.Print "Tmp2 =", Tmp2
        Debug.Print "Tmp3 =", Tmp3
        Debug.Print "Tmp4 =", Tmp4
        Debug.Print "Tmp5 =", Tmp5
        Debug.Print "Tmp6 =", Tmp6
    End Sub
    C'est le dernier document ouvert qui devient l'ActiveDocument comme le montre ce résultat:

    Tmp1 = Normal.dotm
    Tmp2 = Document2
    Tmp3 = CodeProjet.dotm
    Tmp4 = A RichTextBox that can Bind to the RTF Property.docx
    Tmp5 = Normal.dotm
    Tmp6 = Document2

    Et on voit bien la différence entre l'ActiveDocument et le ThisDocument
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Je crois que maintenant c'est parfaitement clair
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] compromis entre fonction "saveas" et "save"
    Par nunnu27 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/08/2010, 23h11
  2. JBuilder 7 personnal sort à chaque save
    Par Hannouz dans le forum JBuilder
    Réponses: 4
    Dernier message: 17/12/2002, 22h53
  3. [VB6] [Graphisme] Dimensions d'une image au saving
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/12/2002, 19h09
  4. Algo carry save adder
    Par bashou dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 18/10/2002, 11h32
  5. comment puis-je recupérer l'extesion du fichier?
    Par mirella dans le forum Langage
    Réponses: 7
    Dernier message: 14/08/2002, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo