Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/03/2011, 14h22   #1
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Par défaut Utilisation publipostage sous word via Excel

Bonjour,

Voila quelques temps que j'ai "développé" une macro permettant de :

- Saisir des informations sous Excel
- Ouvrir word
- faire un publipostage
- enregistrer le document a un endroit spécifique
- fermer le document word nouvellement creé
- quitter word.

Cette macro fonctionne une fois sur 2.

La premiere utilisation : tout fonctionne tres bien
La deuxieme utilisation j'ai le message d'erreur suivant qui apparait :
Run time error '462'
The remote sever machine does not exist or is unavailable.



Mon niveau de connaissance en VBA est Bidouille ++ (Je teste, je vais sur google pour récuperer et modifier les codes que je voudrais mettre en place etc...) mais je penses que ce probleme vient d'une mauvaise fermeture de word.

Je l'ouvre comme ça :

Code :
1
2
3
4
    Dim wrdDoc As Word.Document
    Set wrdApp = New Word.Application
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Open("c:\mondoc.docx")
et je le ferme comme ça :

Code :
1
2
3
4
5
6
7
 
    wrdApp.ActiveDocument.Close
    wrdApp.ActiveDocument.Close
    wrdApp.Quit
 
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
Est-ce que quelqu'un peut m'aider?

EDIT : A priori je ne suis pas au bon endroit sur le forum : est ce qu'un modérateur peut me déplacer?
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 16h18   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 767
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 767
Points : 16 830
Points : 16 830
Envoyer un message via Skype™ à bbil
bonjour,

évite d'utiliser les divers ActiveDocument, ActiveCell ... et consorts..

tu as un objet :
qui référence ton document, utilise le ...

D'ailleurs pourquoi la fermeture de 2 documents word ?
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h00   #3
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
En fait suite au publipostage, je dois fermer le document que je viens de créer après l'avoir enregistre, puis je ferme la trame qui m'a servi de support pour le publipostage.
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h05   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 767
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 767
Points : 16 830
Points : 16 830
Envoyer un message via Skype™ à bbil
et en créant ou sauvant ton document tu ne créé pas une variable qui fait référence à celui-ci ? montre nous ton code ..
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h23   #5
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Je ne suis pas super au point sur l'optimisation du codage et donc je ne crée presque pas de variable. De plus les noms de mes documents ne sont pas fixe et change a chaque fois que je lance la macro (modification d'une partie du nom et/ou numéro) Quoi qu'il en soit je posterai lundi le code. Par contre il faudra être indulgent car il être bien lourd
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h26   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 767
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 767
Points : 16 830
Points : 16 830
Envoyer un message via Skype™ à bbil
pas tout le code seulement celui qui te permet de créer ce nouveau document...
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h29   #7
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Ok je ne mettrai que la fonction utilisée pour création, enregistrement et fermeture du doc.
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h30   #8
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 767
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 767
Points : 16 830
Points : 16 830
Envoyer un message via Skype™ à bbil
un peu de lecture en attendant : Le publipostage Word-Excel
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 10h59   #9
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Voila le code en question :
Code :
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
    Windows("chrono.xlsm").Activate
    Sheets("overview").Select
    Range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, 9).Range("A1").Select
    If Selection = "Non" Then GoTo Line8 Else
 
    Dim wrdDoc As Word.Document
    Set wrdApp = New Word.Application
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Open("P:\Trame du VMP.docx")
    Windows("chrono.xlsm").Activate
    Sheets("overview").Select
    Dim Projet$
    Projet = Range("A6000") 
' en sachant que précédemment j'ai collé en A6000 le chemin du dossier cible
 
 
'démarre le publipostage
 
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "P:\Création projet.xlsm", _
        ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=P:\Création projet.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet " _
        , SQLStatement:="SELECT * FROM `Sheet1$`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
 
 
    With wrdDoc.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
 
'Enregistrement
Windows("Création projet.xlsm").Activate
 
service = "Service :"
VS = InputBox(service)
 
numéro = "Numéro Projet :"
NumeroProjet = InputBox(numéro)
 
Version = "Version du Projet :"
v = InputBox(Version)
 
ActiveDocument.SaveAs Filename:=Projet & "\DRAFT_VMP-PROD-" & VS & "-" & NumeroProjet & " v" & v & ".docx" _
        , FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=True, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False
 
 
'ferme le DRAFT_VMP créé
    wrdApp.ActiveDocument.Close
 
' ferme le fichier trame
    wrdApp.ActiveDocument.Close
 
'ferme word
    wrdApp.Quit
 
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
Ce code se repete plusieurs fois consécutivement : à chaque fois que je trouve un oui dans la cellule de mon chrono, je dois créer un document spécifique.

Bonne journée.
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 08h45   #10
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Bonjour,

Je me permets de remonter ce sujet pour voir si quelqu'un a pu se pencher sur mon probleme.

Bonne journée
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 14h23   #11
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

Combien de lignes de données saisis tu dans Excel pour faire ton publipostage ?
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 16h47   #12
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
J'ai un tableau qui fait 2 lignes (première ligne identification et deuxieme ligne ce que je veux avoir dans le champ identifié) et une 15aine de colonne.

Note : J'ai trouvé un moyen de contourner le probleme en fermant mon Excel et en le rouvrant pour génerer une nouvelle série de document... Pas très lean mais ça fonctionne.
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 18h27   #13
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

C'est un peu ce que je pensais.
Pourquoi utilises tu un publipostage ?

Les données peuvent être transférées de Excel vers Word sans devoir utiliser le publipostage, surtout lorqu'il n'est question de deux lignes.

On prélève la donnée dans la cellule et on l'injecte sur un signet et on peut le faire pour tout un classeur.
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 21h13   #14
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Peux tu m'indiquer ou je peux me documenter sur ce sujet? Je n'ai jamais utilisé les signets.
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 21h35   #15
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

Là : http://heureuxoli.developpez.com/off...ostage/#L8-D-1

Le publipostage est réellement intéressant quand on fait une multitude de documents.
Mais je pense que dans ton cas, l'utilisation de signets devrait être plus souple.
Et gros avantage, Word ne pose pas de question à l'utilisateur.
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 08h15   #16
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Je regarderai ça cette semaine si j'ai le temps. Je reviendrai vers vous pour un petit debrieffing.

Quoi qu'il en soit, merci pour le temps passé sur ce sujet.
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 11h28   #17
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Bon, j'ai lu le tutoriel et je t'avoue que je suis dans le noir le plus complet quand à l'utilisation des signets...

A ce que j'ai compris il faut partir sur du publipostage pour pouvoir utiliser les signets... Si c'est le cas, je preferes ma méthode qui tourne de maniere correct.

De plus je n'arrive pas creer un signet avec une valeur qui sera remplie via ma feuille Excel...

Je t'avouerai que je suis même a 2 doigts d'abandonner et de rester plutot sur m améthode de publipostage qui fonctionne même si ça doit me forcer a fermer Excel à chaque fois que j'ai généré mes X documents.

Pourrais tu me montrer un exemple dans lequel
1) On place des signets dans word
2) on prend des valeurs qui sont dans Excel
3) on met les valeurs prises et on les colle en valeur de signet.

Merci par avance.

Bonne journée.
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 20h46   #18
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

Voilà l'exemple le plus simple que je puisse faire.

Un signet S1 dans le document qui doit par facilité être placé dans le C:\Temp\, ce document est un .dot
Une donnée dans la première feuille du classeur.
Un petit code qui crée un document basé sur le .dot et qui remplit le signet avec le texte du classeur.
Fichiers attachés
Type de fichier : zip signet.zip (14,8 Ko, 14 affichages)
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/04/2011, 08h32   #19
Invité de passage
 
Homme
Ingénieur validation
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Alors là c'est beaucoup plus clair.

Merci

Par contre j'ai 2 ou 3 questions de forme.

Tu utilise des template en .dot avec le code

Code :
Set wDoc = wApp.Documents.Add(Template:="C:\Temp\signet.dot")

Est-ce qu'utiliser le code avec des .docx est embetant :



Code :
Set wDoc = wApp.Documents.Open("C:\Temp\Trame.docx")


2 choses m'interpellent :
1) le ...Documents.Add...
2) le ...(Template:=...

Comme je le disais au début de ce post, je me suis formé sur le tas et j'ai peur de ne pas comprendre le pourquoi de cette partie de code a la place d'un Document.Open.

Peux tu éclairer ma lanterne? Même si c'est pour m'envoyer sur un cours de débutant avec de la syntaxe : je suis preneur (Je me suis déja documenté mais je n'ai pas trouvé cette nuance dans ce que j'ai lu)
athalantar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h59   #20
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

Pour créer un nouveau document, j'utilise de préférence un modèle .dot, .dotx ou .dotm

si ta version est 2007 ou plus, ça ne change rien, par contre, pour les versions moins récentes, ça risque de moins bien le faire.


La différence entre Open et Add va changer le résultat, avec Add, c'est un nouveau document, alors qu'avec Open, c'est le document qui est ouvert.

si c'est pour traiter le contenu d'un document, on utilise Open, si c'est pour avoir un nouveau document comme dans le cas d'un publipostage, on utilise Add.
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h57.


 
 
 
 
Partenaires

Hébergement Web