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 word, enregistrement d'un fichier avec un nom publiposté


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Macro word, enregistrement d'un fichier avec un nom publiposté
    Bonjour,

    Malgré le post posté il y a peu avec un problême un peu similaire, cela ne m'a malheureusement pas permi de trouver une solution à mon problême.

    Je m'explique:
    J'ai publiposté un nom, prénom, référence d'un document excel à un document word et j'aimerais enregistrer mon document word avec le nom, le prenom et la référence de la personne.
    Vu qu'il y a un tres grands nombre d'utilisateur, je suis obliger d'utiliser une macro pour effectuer cet enregistrement.
    Il y aura donc autant de document word contenant les infos (nom, prénom,ref) que de personnes
    Mais je suis absolument nul en macro, je commence juste à essayer de bidouiller

    J'ai essayé d'utiliser les signets mais je ne sais pas si ca a fonctionné dans ma macro.

    Je vous link mon 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
    Sub enr()
    '
    ' enr Macro
    ' Macro créée le 19/06/2008
    '
     
    Dim chemin As String
    Dim nomfichier As String
    Dim nom As String
    Dim prenom As String
    Dim ref As String
     
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
     
    nom = ActiveDocument.Bookmarks("signet_nom").Range.Text
    prenom = ActiveDocument.Bookmarks("signet_prenom").Range.Text
    ref = ActiveDocument.Bookmarks("signet_ref").Range.Text
     
    Debug.Print nom
     
    chemin = "C:\Documents and Settings\GIROD_G\Mes documents\Rapport stage\"
    nomfichier = chemin & nom & prenom & ref & ".doc"
    With ActiveWorkbook
    .SaveAs FileName:=nomfichier
    End With
    Application.ScreenUpdating = True
     
    End Sub
    J'ai une erreur d'execution 424 (objet requis) à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SaveAs FileName:=nomfichier
    Je ne sais pas si le reste de mon code est correct donc si qqn passe dans le coin pour me donner son avis ca serait sympa

    Merci d'avance

    EDIT: Je viens de m'apercevoir que Debug.Print nom ne renvoie rien.
    Ce qu'il fait un problème de plus

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut


    je fais bref car je suis vachement pris.

    Il y a un problème de conception dans ton code car en fait tu essaie de sauver ton classeur Excel
    With ActiveWorkbook
    avec un nom de fichier word, mais ca ne donnera rien de ce que tu souhaites.

    Cherches sur le forum excel avec publipostage (ou dans la faq excel) et tu trouveras ce que tu cherches. ou alors remplace
    With ActiveWorkbook
    par
    With Activedocument
    peut-être que cela t'aideras.

    Tu es sur la mauvaise voie.

    (Désolé pas de temps pour l'instant mais j'aime pas laisser les gens dans la m....)

  3. #3
    Membre habitué Avatar de golliat
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 104
    Points : 125
    Points
    125
    Par défaut
    C'est plutot l'inverse, il voulait enregistrer un document word avec un nom de classeur excel.
    Bref gg pour avoir trouvé l'erreur.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour cette petite réponse rapide!
    Ça fait toujours plaisir d'avoir des gars comme ça

    Comme je vous l'avais dit je commence juste à me mettre aux macros donc en effet j'ai fait une erreur bête. D'ailleurs il doit surement y en avoir d'autres...

    Je vous relink mon nouveau code corrigé avec ce qui m'a été dit ci dessus

    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
    Sub enr()
    '
    ' enr Macro
    ' Macro créée le 19/06/2008
    '
     
    Dim chemin As String
    Dim nomfichier As String
    Dim nom As String
    Dim prenom As String
    Dim ref As String
     
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
     
    nom = ActiveDocument.Bookmarks("signet_nom").Range.Text
    prenom = ActiveDocument.Bookmarks("signet_prenom").Range.Text
    ref = ActiveDocument.Bookmarks("signet_ref").Range.Text
     
    Debug.Print prenom
     
    chemin = "C:\Documents and Settings\GIROD_G\Mes documents\Rapport stage\"
    nomfichier = chemin & nom & prenom & ref & ".doc"
    With ActiveDocument
    .SaveAs FileName:=nomfichier
    End With
    Application.ScreenUpdating = True
     
    End Sub
    J'ai maintenant comme erreur à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SaveAs FileName:=nomfichier
    "Erreur d'execution 4198, la commande a échouée"

    Je me suis peut être mal exprimé pour mon problême:
    Ce que je cherche à faire c'est enregistrer sous mon document word avec les informations contenues dans mon document word (nom, prénom, ref) ces informations ayant été importées d'un classeur excel par publipostage.
    Je ne me soucie plus du classeur excel maintenant et j'aimerais avoir autant de document word sauvegardé de la forme "nom prenom ref.doc" que de personnes.

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Je vais te donner un lien vers un article qui traite de ce problème.

    Perso, pour éviter ce genre de problème, je mets mes documents dans des variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim oDoc As Document
     
    Set oDoc = Application.document.Add ("c:\temp\monmodele.dot")
     
    oDoc.SaveAs ....
    http://heureuxoli.developpez.com/off.../publipostage/

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Ok bien compris,

    donc ta macro tourne sous word.

    je te suggère d'ajouter un break point, ou debug.print ou..... sur le code suivant car je pense que le contenu pourrait causer l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nomfichier = chemin & nom & prenom & ref & ".doc"
    A toi de jouer et de dire ce que vaut nomfichier.

    NB : Quand je fais thisdocument.Bookmarks(1).Range.Text, je ne récupérère rien, donc à mon avis c'est ton problème.


  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    ThisDocument utilise le fichier qui contient la maco !

    En fait, dans le code, il manque certaines choses.

    En général, on part d'un modèle pour faire un document. A aucun moment on ne voit un ajout de document à la collection documents.

    Il est beaucoup plus simple lorsque l'on travaille sur des documents qui vont se succéder de le mettre dans un variable document.

    Si c'est le même document et pas modèle qui est utilisé à chaque fois, il est possible que les signets ne se trouvent plus dans le document.
    Il arrive souvent qu'ils sont supprimés lors du remplissage.
    Donc, ce qui fonctionne, c'est l'inscription des données dans le document, mais comme les signets sont supprimés, on ne peut plus récupérer la valeur qu'ils contiennent. Il est plus intéressant de récupérer la valeur hors signet que dans les signets.

    Le tuto que je donne en lien devrait lui venir en aide au moins pour comprendre le processus à utiliser.

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Ben merci pour vos réponses!
    J'ai essayé de réorienter un peu mon code selon le lien que tu m'as donné!
    Cependant, je ne comprends pas bien à quoi corresponds la variable rs, donc je n'arrive pas à l'utiliser et cela me cause une 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub enr()
     
    Dim chemin As String
    Dim nomfichier As String
    'Dim nom As String
    'Dim prenom As String
    'Dim ref As String
    Dim oDoc As Document
    Dim rs As String
     
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
     
    Set oDoc = Documents.Add("C:\Documents and Settings\GIROD_G\Mes documents\Rapport stage\Fiche Affectation du matériel informatique.doc")
     
    oDoc.Bookmarks(1).Range.Text = rs.Fields(1)
    oDoc.Bookmarks(2).Range.Text = rs.Fields(2)
    oDoc.Bookmarks(3).Range.Text = rs.Fields(3)
     
    'nom = oDoc.Bookmarks(1).Range.Text
    'prenom = oDoc.Bookmarks(2).Range.Text
    'ref = oDoc.Bookmarks(3).Range.Text
     
    chemin = "C:\Documents and Settings\GIROD_G\Mes documents\Rapport stage\"
     
    oDoc.SaveAs chemin & rs.Fields(1) & rs.Fields(2) & rs.Fields(3) & ".doc"
     
    oDoc.Close
    Set oDoc = Nothing
    rs.Close
    Set rs = Nothing
     
    End Sub
    J'ai donc comme erreur "erreur de compilation, quantificateur incorrect" en me surlignant rs.

    Est ce qu'il faut que j'utilise ce que j'ai mis en commentaire ou bien les rs.Fields car je suis un peu perdu la je dois vous avouer.

    EDIT En regardant mon code je suis peut être completement parti en vrille avec les rs.fields...

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Es-tu certain que rs est bien un string ?

    rs est un recordset. C'est donc un objet Access qui est un enregistrement.
    C'est le code suivant qui doit être plus adapté, on y mentionne la récupération de données dans une feuille Excel.

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Ok ok c'est ce que je pensais c'est ça de recopier bêtement...on se trompe.
    Bref encore une question avant que je me lance dans l'exemple que tu utilises dans ta page web:
    Suis je obliger de récupérer le nom, prénom, reference à partir d'excel comme tu le montres dans ta page en utilisant oDoc.Bookmarks(3).Range.Text = xlSh.Cells(i, 3) par exemple ou est ce que je peux le récupérer à partir de mon document word (j'ai déja utilisé le publipostage donc les noms prénons et ref sont maintenant aussi dans word) vu que j'ai mis un signet pour nom, prénom et ref?

    Si je peux utiliser les signets faut-il que je l'utilise avec le nom du signet ou avec le numero du signet (premier ou deuxieme ou troisieme signet)?

    Puis dernière question est ce que {MERGEFIELD "nom"} peut être utile et utilisé dans mon code ou il vaut mieux utiliser les signets?

    Je sais ca fait beaucoup de questions donc pardonnez mon ignorance dans le domaine

    Merci d'avance de vos réponses




    EDIT
    Un peu de nouveau sous le soleil, en attendant une réponse, j'ai repris mon ancien code en le modifiant un peu:

    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 enr()
     
    Dim chemin As String
    Dim nomfichier As String
    Dim nom As String
    Dim prenom As String
    Dim ref As String
    Dim oDoc As Document
     
    Set oDoc = Documents.Add("C:\Documents and Settings\GIROD_G\Mes documents\PC Portable\Fiche Affectation du matériel informatique.doc")
     
    nom = oDoc.Bookmarks(1).Range.Text
    prenom = oDoc.Bookmarks(2).Range.Text
    ref = oDoc.Bookmarks(3).Range.Text
     
    Debug.Print nom
     
    chemin = "C:\Documents and Settings\GIROD_G\Mes documents\Rapport stage\"
    nomfichier = chemin & nom & prenom & ref & ".doc"
    oDoc.SaveAs nomfichier
     
    oDoc.Close
    Set oDoc = Nothing
     
    End Sub
    Bon j'ai une erreur à la ligne
    oDoc.SaveAs nomfichier
    "Erreur 4198, la commande a échouée"
    mais il m'ouvre un nouveau document (quand j'exécute la maccro) exactement pareil que celui d'origine mais pas enregistré.
    Il a comme nom de base Document1

  11. #11
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oDoc.Bookmarks(3).Range.Text = xlSh.Cells(i, 3)
    J'ai utilisé les indices par facilité.

    Par contre, les {MERGEFIELD "nom"} ne sont plus utilisables.

    Je te conseille de lire le tuto et de poser les questions ensuite.

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai bien lu le tuto mais il reste une chose que je ne comprends pas, c'est pourquoi est on obligé d'utiliser les données dans excel alors que justement ac le publipostage elles sont maintenant présentes dans word?
    Je ne peux donc pas utiliser les données dans word en utilisant uniquement les signets?

  13. #13
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Parce que après le publipostage, tu n'as plus de signets.
    Et le publipostage, ne permet pas de faire un traitement global enregistrement par enregistrement.
    Si tu veux le faire en publipostage, c'est manuellement un fichier à la fois ou tous les enregistrements dans un seul document.

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je propose une alternative à ce que propose Heureux Oli.
    Tu ouvres ta base de données Excel depuis Word, tu récupères dans word et dans un tableau le nom des correspondants, tu fermes le fichier et l'instance d'Excel, enfin tu lances la fusion ligne par ligne. Après chaque fusion, tu enregistres la lettre type sous le nom correspondant de ton tableau
    Si tu as plus de 10 à 20 correspondants et si surtout cette tâche peut être répétitive, ça vaut la peine.
    Tous les codes existent, suffit de les attacher ensemble
    Ici tu as "un" code pour ouvrir une instance d'Excel et ouvrir un classeur.
    Au lieu de copier la donnée, tu la mets dans un tableau.
    Tu remplaces cette ligne
    Selection.TypeText Text:=Xlfl.Cells(4, 5).Value
    par les suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Tablo(nbc) as string 'où nbc est le Nbre de correspondants
    For i = 2 to nbc
         Tablo(i) = Xlfl.Cells(i, ColRef).Value & "_" _
                   & Xlfl.Cells(i, ColNom).Value  & "_" _
                   & Xlfl.Cells(i, ColPreNom).Value
    Next
    Ton tableau est fait, tu peux fermer l'instance d'Excel, soit la suite du code du même post.
    Ensuite tu lances la fusion ligne par ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For No = 2 to DerniereLigne
         'Fusion (tu dois avoir le code pour ne fusionner qu'une ligne à la fois)
         DoEvents
         ActiveDocument.SaveAs FileName:=Chemin & "\" & Tablo(i) & ".doc"
         DoEvents
         ActiveDocument.close False
         DoEvents
    Next
    Si tu as des difficultés, essaie de t'en sortir avec ce qu'offre le forum avant de nous rappeler, ça voudra dire que tu as tout compris
    A+ quand même

  15. #15
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup à vous deux je vais essayer de m'en sortir avec ça

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Un truc qui serait bien serait que tu mettes le code ici une fois terminé. L'un de nous pourrait le vérifier, éventuellement le nettoyer et le commenter et tu pourrais le passer dans contribuez.
    Juste une idée mais c'est une question redondante et il serait intéressant d'avoir une solution quelque part... Un lien plutôt qu'une longue explication...

Discussions similaires

  1. Enregistrer un fichier avec un nom qui s'incrémente automatiquement
    Par Tomtomtvn dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 26/07/2012, 15h24
  2. Enregistrer un fichier avec un nom précis
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/10/2009, 23h28
  3. Macro pour créer un nouveau fichier avec de nouvelles macros
    Par yodu29 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2008, 15h21
  4. Enregistrer sur un fichier avec Actionscript
    Par sparil dans le forum Dynamique
    Réponses: 3
    Dernier message: 22/06/2007, 11h00
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 16h17

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