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 :

Enregistrer sous avec un libellé spécifique macro Word [WD-2010]


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 11
    Points : 16
    Points
    16
    Par défaut Enregistrer sous avec un libellé spécifique macro Word
    Bonjour,

    J'ai un modèle de courrier Word qu'un collaborateur doit pouvoir remplir manuellement avec les coordonnées du client en tête de courrier. L'opération suivante serait que ce collaborateur clique sur le bouton de la macro (que j'ai créée) afin que le fichier puisse s'enregistrer sous un répertoire précis avec un nom de fichier suivant : Prénom, Nom et Numéro d'adhérent.
    Ma macro actuelle fonctionne bien si j'utilise le NOM et le NUMERO D'ADHERENT pour donner automatiquement un nom à mon fichier et qu'il puisse s'enregistrer. Dans ma macro, il est précisé que le nom est situé au 3ème paragraphe et 3ème mot.

    Mon Problème est le suivant :
    Si j'ai un prénom composé de deux prénoms associés (Ex : pierre-Antoine ou Anne-Sophie par exemple), ma macro ne fonctionne plus.

    Aussi, est ce que quelqu'un a une solution pour apporter une solution à ce blocage ? N'y aurait-il pas la possibilité de prendre toute la ligne pour récupérer la CIVILITE, PRENOM et NOM quelque soit le nombre de caractères ?
    Sinon, je suis preneur si vous avez une autre solution. Mon souhait aurait été de prendre le PRENOM, NOM et NUMERO D'ADHERENT.
    Je vous joins un modèle de courrier pour mieux visualiser ma demande.

    Par avance, merci pour votre aide


    Ma macro est la suivante :

    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
    Sub Enregistrer_sous()
     
    Dim nom As String, nom2 As String
     
    chemin = "F:\Documentations\mon répertoire\"
     
    nom = ActiveDocument.Paragraphs(3).Range.Words(3)
    nom2 = ActiveDocument.Paragraphs(9).Range.Words(5)
     
    NomFichier = nom & "_" & nom2 & ".docx"
     
    ActiveDocument.SaveAs chemin & NomFichier
    MsgBox "Votre courrier a bien été enregistré dans le répertoire."
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Au lieu d'utiliser une position dans un document, il est préférable d'utiliser les signets (objet Bookmark)
    C'est beaucoup plus simple à gérer et bien plus facile à maintenir. Ainsi dans le modèle, on crée tout le texte et on place des signets aux endroits souhaités, on y applique la mise forme que l'on veut, on peut utiliser le renvoi au signet, etc;

    Code des procédures

    La fonction nommée ReplaceBookmarkByText qui effectue le remplacement du signet par le texte adéquat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function ReplaceBookmarkByText(BookMarkName As Variant, Text As Variant, Optional oDocument As Document)
      Dim bmRange As Range
      If oDocument Is Nothing Then Set oDocument = ActiveDocument
      With oDocument
        Set bmRange = .Bookmarks(BookMarkName).Range
        bmRange.Text = Text
       .Bookmarks.Add BookMarkName, bmRange
      End With
      Set bmRange = Nothing
    End Function
    Exemple d'une procédure qui l'invoque qui effectue le remplacement du signet par le texte adéquat

    Pour l'exemple, j'ai utilisé un prénom non composé mais bien entendu, on peut remplacer Séraphin par Jean-Philippe
    Attention, il n'y a pas d'interception d'erreur

    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 TestReplaceBookmarkByText()
      Const SubFolder As String = "Template"           ' Nom du sous-répertoire des modèles
      Const TemplateName As String = "myTemplate.docx" ' Nom du modèle
      Dim oDoc As Document
      Dim TableText As Variant
      Dim TableBookMark As Variant
      Dim RootPath As String
      ' Dim FullName As String
      Dim Elem As Integer
      '
      RootPath = ThisDocument.Path
      FullName = RootPath & "\" & SubFolder & "\" & TemplateName
      Set oDoc = Documents.Add(Template:=FullName)
      TableBookMark = Array("bmNumber", "bmFirstName", "bmName", "bmAddress", "bmCity")
      TableText = Array("2021-005", "Séraphin", "Lampion", "Rue de la Voix, 15", "Moulinsart")
      '
      For Elem = LBound(TableBookMark) To UBound(TableBookMark)
        ReplaceBookmarkByText TableBookMark(Elem), TableText(Elem)
      Next
      Set oDoc = Nothing
    End Sub
    Illustration

    A gauche le modèle, à droite le document après traitement (en jaune les signets remplacés par du texte)

    Nom : Côte à côte - Template &  Doc.png
Affichages : 95
Taille : 15,6 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 11
    Points : 16
    Points
    16
    Par défaut
    Bonjour,
    Merci pour votre réactivité. Cela m'a permis de débloquer mon problème. J'ai utilisé une partie du code qui m'a permis de comprendre où cela bloquait.

    Bonne journée à vous.

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

Discussions similaires

  1. Enregistrer-sous avec macro
    Par GR-MY dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 02/03/2020, 16h57
  2. enregistrer sous avec nom automatique
    Par liop49 dans le forum VBA Word
    Réponses: 4
    Dernier message: 26/01/2011, 18h03
  3. "Enregistrer sous" avec chemin cible intranet
    Par Diandre dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/05/2008, 12h15
  4. [VBA-W]Enregistrer sous au format excel un document Word
    Par tazamorte dans le forum VBA Word
    Réponses: 3
    Dernier message: 20/03/2007, 22h03
  5. Fenêtre Enregistrer sous avec TWebBrowser
    Par Chriss dans le forum Composants VCL
    Réponses: 2
    Dernier message: 15/03/2006, 21h01

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