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 :

Macro pour imprimer, enregistrer sous un nom et dans un dossier particuliers et fermer un document [WD-2007]


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut Macro pour imprimer, enregistrer sous un nom et dans un dossier particuliers et fermer un document
    Bonjour et bonne année à tous.

    Je me permet de venir poser mon problème ici car je suis un novice total en VBA. Je ne débarque pas non plus directement sans avoir parcouru le forum pour voir si une réponse à mes questions existe.
    J'ai trouvé quelques sujets approchants mais j'avoue ma plate incompétence à résoudre mon problème.

    Alors voilà, si vous le permettez, ce que je voudrais faire

    J'ai un compte-rendu et je voudrais après l'avoir fini et en appuyant sur le bouton imprimer que le fichier s'imprime, s'enregistre sous un nom composé de la date du jour suivi du nom du patient (que je suppose devrait être dans un userForm?) dans un dossier défini puis se ferme.

    D'après ce que j'ai vu sur le forum cette manipulation devrait pouvoir se faire allégrement, pour peu qu'on soit avertit en VBA.

    Puis-je prétendre à une aide de votre part?

    Merci beaucoup d'avance.

  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,

    Commence par enregistrer une macro avec les différents processus.

    Pour le nom, on regardera ensuite avec le code que tu auras.
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    je vais essayer.

    Merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Bonsoir

    Alors j'ai essayé et évidemment je bute quelque part.

    Une partie du code fonctionne parfaitement, en fait je bloque sur l'étape qui ajoute le nom du patient au nom du fichier, en effet je veux que ma macro enregistre le nom du fichier dans un dossier choisi sous le nom par exemple "PierrePaul 21-01-2013.doc" où PierrePaul est le nom de mon patient que j'ai mis dans un champs de formulaire. Je ne sais ni où mettre la variable ni comment la récupérer, j'ai mis ça arbitrairement dans "signet" est ce le bonne procédure?

    voici mon code (soyez indulgents!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Enregistrement()
    ' Enregistrement Spécial
    '
    Dim Nom As String
    ChangeFileOpenDirectory "E:\GrandDossier"
    ActiveDocument.SaveAs FileName:=Format(Date, "dd") & "-" & Format(Date, "mm") & "-" & Format(Date, "yyyy") & Nom & ".doc"
    ActiveDocument.PrintOut
    ActiveDocument.Close
    End Sub

  5. #5
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Si c'est un champ de formulaire, alors l'objet à utiliser est formfields
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nompatient=activedocument.formfields(1).result
    Ensuite, il ne reste plus qu'à intégrer cette partie au bon endroit dans la commande saveas
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup, vraiment.

    Votre réponse m'a bien aidé. J'ai même trouvé mieux en remplaçant la zone de formulaire par une zone de texte qui est beaucoup plus facile à éditer voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Enregistrement()
    Dim MaZoneDeTexte As Shape
    Dim Nom As String
    Nom = Selection.ShapeRange.TextFrame.TextRange.Words(1).Text
    ChangeFileOpenDirectory "E:\GrandDossier\compte rendu test"
    ActiveDocument.SaveAs FileName:=Nom & Format(Date, "dd") & "-" & Format(Date, "mm") & "-" & Format(Date, "yyyy") & ".doc"
    Application.Dialogs(wdDialogFilePrint).Show
    ActiveDocument.Close
    End Sub
    Ce code fonctionne bien, par contre je ne sais pas si il y avait des lignes de codes pour par exemple sélectionne le mot qui vient juste après un mot prédéfini par exemple sélectionner le mot qui vient juste après le mot "Nom:"

    Merci pour votre contribution, vous êtes simplement géniaux
    auriez vous une idée?

  7. #7
    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,

    Pour ce qui se trouve derrière un mot précis, on peut utiliser la fonction recherche qui permet de trouver le mot, ensuite, on déplace la sélection sur le mot suivant.
    On peut aussi utiliser un signet, on récupère le contenu du signet.
    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 !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Pour ce qui se trouve derrière un mot précis, on peut utiliser la fonction recherche qui permet de trouver le mot, ensuite, on déplace la sélection sur le mot suivant.
    On peut aussi utiliser un signet, on récupère le contenu du signet.
    Serait il possible d'a,voir une idée de code?
    Merci pour votre aide

  9. #9
    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,

    Voilà une piste avec une recherche sur un mot.

    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 TrouverMot()
    Selection.HomeKey unit:=wdStory
     
    With Selection.Find
        .Text = "Nom : "
        .Forward = True
        .Execute
     
    End With
    If Selection.Find.Found Then
        Selection.Move unit:=wdWord, Count:=1
        Selection.Expand unit:=wdWord
        MsgBox Selection.Range.Text
    End If
     
    End Sub
    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 !

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Re bonsoir,

    c'est exactement ça. Merci beaucoup

    Mes respects.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Chers amis bonjour

    j'ai amélioré le code pour qu'en plus le fichier soit enregistré dans le dossier de la date du jour afin de regrouper les comptes rendu des patients par dossiers de date

    si cela peut aider des personnes qui auraient besoin de la même procédure, voici le code:

    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
    22
    23
    24
    25
    Sub Enregistrement()
    ' Cette macro enregistre le document sous un nom reprenant le nom du patient avec la date du jour dans un repertroire défini qui porte notamment la date du jour
    On Error Resume Next
    Dim Nom As String
    Selection.HomeKey unit:=wdStory
     
    With Selection.Find
        .Text = "Nom : "
        .Forward = True
        .Execute
     
    End With
    If Selection.Find.Found Then
        Selection.Move unit:=wdWord, Count:=1
        Selection.Expand unit:=wdWord
        Nom = Selection.Range.Text
    End If
    Dim FileNameDir As String
    FileNameDir = "E:\GrandDossier\" & Format(Date, "dd") & "-" & Format(Date, "mm") & "-" & Format(Date, "yyyy")
    MkDir (FileNameDir)
    ChangeFileOpenDirectory FileNameDir
    ActiveDocument.SaveAs FileName:=Nom & " " & Format(Date, "dd") & "-" & Format(Date, "mm") & "-" & Format(Date, "yyyy") & ".doc"
    Application.Dialogs(wdDialogFilePrint).Show
    ActiveDocument.Close
    End Sub

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Chers amis bonsoir

    Je ne sais pas pourquoi tout d'un coup mon code ne fonctionne plus correctement, en effet il ne me renvoi plus le nom du patient dans le nom du fichier quand je veux y adjoindre la date. quand je fais un MsgBox avec la variable Nom il me la donne sans probleme mais quand je veux récupérer le FileName il ne me le donne pas, d'où pourrais venir le problème?

    voici le code:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub EnregistrementSpecial()
    ' Cette macro enregistre le document sous un nom reprenant le nom du patient avec la date du jour dans un repertroire défini qui porte notamment la date du jour
    On Error Resume Next
     
    Dim Nom As String
    Dim FileNameDir As String
    Dim FileName As String
    Dim maDate As String
    maDate = Format(Date, "dd") & "-" & Format(Date, "mm") & "-" & Format(Date, "yyyy")
    Selection.HomeKey unit:=wdStory
     
    With Selection.Find
        .IgnoreSpace = True
        .MatchPhrase = True
        .Forward = True
        .Text = "Nom:"
        .Execute
     
    End With
    If Selection.Find.Found Then
        Selection.Move unit:=wdWord, Count:=1
        Selection.Expand unit:=wdWord
        Nom = Selection.Range.Text
    End If
     
    FileNameDir = "E:\GrandDossier\" & maDate
    MkDir (FileNameDir)
    ChangeFileOpenDirectory FileNameDir
    ActiveDocument.SaveAs FileName:=Nom & " " & maDate & ".doc"
    MsgBox (FileName)
    Application.Dialogs(wdDialogFilePrint).Show
    ActiveDocument.Close
    End Sub

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    après quelques tests j'ai constaté que le problème venait du fait que le code n'ignorait pas l'éventuel espace qu'il y avait avant les deux points ":" qui suivaient le mot "Nom", l'erreur parvenait quand il y avait marqué "Nom :" et pas "Nom:" comme le signifiait le code.
    Je me suis affranchi de ça avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With Selection.Find
        .IgnoreSpace = True
        .MatchPhrase = True
        .Forward = True
        .Text = "Nom"
        .Execute
     
    End With
    If Selection.Find.Found Then
        Selection.Move unit:=wdWord, Count:=2
        Selection.Expand unit:=wdWord
        Nom = Selection.Range.Text
    End If
    avec ce nouveau code je ne cherche plus "Nom:" mais "Nom" et je déplace ma sélection vers le Count:=2 pour ignorer les deux point et tous les éventuels espaces qu'il y aurait aussi bien avant qu'après.

    Cette solution a l'air de marcher, qu'en pensez vous? qu'aurais je pu faire de mieux.

    Bonne nuit à tous

  14. #14
    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,

    Si tu veux passer outre.

    Tu récupères le paragraphe qui contient Nom et tu fais un split avec comme caractère le ":", tu peux même faire un trim.
    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 !

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    re salut la compagnie,

    je souhaite développer mon code. Je voudrais inviter via une inputbox l'utilisateur à insérer le nom du patient dans le cas où il aurait oublier de le faire, puis d'insérer ceci à un emplacement bien précis, en l'occurrence après le mot "Nom:". Je sais qu'il faudrait utiliser des signets, j'ai essayé après avoir fait des recherches mais je n'y arrive pas, voici le code que j'ai:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub EnregistrementSpecial()
    ' Cette macro enregistre le document sous un nom reprenant le nom du patient avec la date du jour dans un repertroire défini qui porte notamment la date du jour
    On Error Resume Next
     
    Dim Nom As String
    Dim maDate As String
    Dim FileName As String
    maDate = Format(Date, "dd") & "-" & Format(Date, "mm") & "-" & Format(Date, "yyyy")
    Selection.HomeKey unit:=wdStory
     
    With Selection.Find
        .IgnoreSpace = True
        .MatchPhrase = True
        .Forward = True
        .Text = "Nom"
        .Execute
    End With
    Selection.Bookmarks.Add Name:="Nom", Range:=Selection.Range
    If Selection.Type = 1 Then
        Selection.Move unit:=wdWord, Count:=2
        Selection.Expand unit:=wdWord
        Nom = Selection.Range.Text
        Else: 'MsgBox "Vous n'avez pas entrer de nom pour le patient!"
        Nom = InputBox("Entrez le nom du patient ici", "NOM DU PATIENT")
        ActiveDocument.Content.InsertAfter (Nom)
        End If
     
    Dim FileNameDir As String
    FileNameDir = "C:\Users\S\Desktop\" & maDate
    MkDir (FileNameDir)
    ChangeFileOpenDirectory FileNameDir
    ActiveDocument.SaveAs FileName:=Nom & ".doc"
    'Application.Dialogs(wdDialogFilePrint).Show
    'ActiveDocument.Close
    End Sub
    auriez vous une petite idée de ce qui cloche?

    Merci

  16. #16
    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,

    Le signet doit exister dans le document avant d'être rempli.
    Et on ajoute du texte au signet avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.Bookmarks(1).Range.Text = "ma valeur"
    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 !

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Bonjour chers amis;

    je déterre ce très vieux topic, qui a été résolu au passage, pour vous demander si ce code fonctionnerait en l'état sur mac?

    car en essayant ça bute sur la ligne de code ".IgnoreSpace = True"

    Y a t-il des spécificités ou modifications à apporter sur mac ?

    Merci d'avance

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

Discussions similaires

  1. [XL-2003] Macro pour imprimer en pdf avec nom de fichiers variables
    Par YoTaPi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/07/2014, 18h50
  2. Réponses: 8
    Dernier message: 13/02/2014, 18h51
  3. Réponses: 3
    Dernier message: 09/11/2010, 09h48
  4. Macro d'enregistrement sous un nom
    Par caligoose dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/12/2007, 18h17
  5. macro pour un "enregistrer sous" automatique
    Par Cilou38 dans le forum VBA Word
    Réponses: 1
    Dernier message: 19/07/2007, 13h22

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