[vba] créer doc word sur base donnée XLS

Fermé
Babelge Messages postés 7 Date d'inscription vendredi 23 juin 2006 Statut Membre Dernière intervention 11 décembre 2007 - 7 juil. 2006 à 12:55
Babelge Messages postés 7 Date d'inscription vendredi 23 juin 2006 Statut Membre Dernière intervention 11 décembre 2007 - 11 déc. 2007 à 12:11
Bien le bonjours mes chers lecteurs,

Je souhaite créer des documents en partant de donnée disponible dans une feuille de donnée XLS ou une requete access.

Solution 1> un simple publipostage
Oui mais il s'agit de créer plusieurs documents différents sur base d'un même enregistrement (l'enregistrement est une commande à un prestataire ou fournisseur et les documents sont... bon de commande, transmis du bon de commande au prestataires, transmis à la compta, transmis de la facture à la compta,...) et pas plusieurs documents identiques/personnalisés sur base d'enregistrement différents.


Solution 2> une macro word qui ouvre une instance de XL, le fichier de donnée, lit des données et crée le document en consquence.
Je n'ai pas encore essayé

Solution 3 > une macro XL qui ouvre une instance de word en lui transmettant des données et en lui faisant créer les divers documents.
Oui mais là j'ai testé et je n'arrive pas à utiliser avec fruit un "aller au signet" du document word pour insérer une donnée
Par exemple

Dim Docu As Object
Set Docu = CreateObject("Word.Application")
With Docu ' l'instance de WOrd
.Documents.Open "C:\doctest2.doc"
.Application.Selection.GoTo What:=wdGoToBookmark, Name:="StopDate"
.Application.Selection.InsertDateTime DateTimeFormat:="dddd d MMMM yyyy"
end with

J'ai un message d'erreur
"5102 - vous avez tapé plusieurs destination pour une page, une ligne, une note de bas de page, une note de fin ou un commentaire"

Alors que le code utilisé directement dans word (sans référence à la variable objet docu) permet d'atteindre le signet et d'insérer le texte ou la date).


Par quel bout prendriez vous le problème?

PS: le vba, je découvre... l'automation c'est du tout tout neuf pour moi.
A voir également:

7 réponses

Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 214
9 juil. 2006 à 23:10
salut Babelge,

essaie ceci, ça fonctionne bien chez moi :
Sub OuvrirFichierWord()
    Dim objWord As Word.Application
    Dim Docu    As Word.Document
    
    ' création de l'objet Word
    Set objWord = New Word.Application
    
    ' Word visible
    objWord.Visible = True
    
    'ouverture du fichier
    Set Docu = objWord.Documents.Open("D:\doctest2.doc")
    ' positionnement sur le signet
    objWord.Selection.GoTo What:=wdGoToBookmark, Name:="StopDate"
    ' insertion de la date
    objWord.Selection.InsertDateTime DateTimeFormat:="dddd d MMMM yyyy"
    
    ' sauvegarde
    Docu.Save
    ' fermeture du document
    Docu.Close
    ' quitter Word
    objWord.Quit
    
    ' libérer la mémoire des variables objet
    Set Docu = Nothing
    Set objWord = Nothing
End Sub
0
Merci de m'avoir répondu.

J'ai été contrain de m'absenter un temps et je ne peux te répondre qu'aujourd'hui. Désolé.

J'ai testé ta macro mais j'ai des message d'erreur sans doute lié au fait qu'il y a des choses sur ton système qui ne le sont pas sur le mien.

Ainsi, pour ces trois lignes,
Dim objWord As Word.Application
Dim Docu As Word.Document
Set objWord = New Word.Application
j'ai l'erreur :
"type d'fini par l'utilisateur non défini"

En cherchant un peu j'ai compris qu'il fallait définir "Word" avec type... oui mais comment et où... je ne sais?

J'ai essayé dans le même module, juste avant la macro (ou dans un module suivant, sans rien d'autre)
Public Type Word
Application As Object
Document As Object
End Type
0
Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 214 > Babelge
18 juil. 2006 à 21:52
as-tu coché la référence Microsoft Word x.x Object Library dans le menu Outils\Références de l'éditeur VBA ?

0
Babelge Messages postés 7 Date d'inscription vendredi 23 juin 2006 Statut Membre Dernière intervention 11 décembre 2007 > Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008
21 juil. 2006 à 09:27
Oui,
Word object library 11.0 et office object library11.0 sont cochés.
0
Babelge, a mon avis, je serai partis d'un doc Word et j'aurai utilisé son outil de publipostage avec en fichier source ton fichier XLS.

Dans le doc, je ferai plusiers pages des formulaires à la suite - tous ceux de ta liste. Puis, j'introduis les different champs (colonnes du XLS) où il faut dans les formulaires. C'est fait.

En suite, la fonction Word de publipostage te permets soit de faire tous les formulaires pour tout le contenu de ton XLS soit tu choisis les ligne d'XLS qui t'interessent.
0
Babelge Messages postés 7 Date d'inscription vendredi 23 juin 2006 Statut Membre Dernière intervention 11 décembre 2007
7 déc. 2007 à 07:42
Merci de ta réponse,

Comme je disais en introduction, il s'agit de créer PLUSIEURS documents DIFFERENTS sur base d'un même enregistrement (l'enregistrement est une commande à un prestataire ou fournisseur et les documents sont... bon de commande, transmis du bon de commande au prestataires, transmis à la compta, transmis de la facture à la compta,...) et pas plusieurs documents identiques/personnalisés sur base d'enregistrement différents.

La simplicité du publipostage est aussi son handicap. C'est prévu pour un document, plusieurs enregistrement.
A la limite, je pourrais mettre l'ensemble de mes documents dans un seul fichier word, mais ça va avoir une forte influence sur l'organisation des fichiers.
Il faut que j'y réfléchisse. Je ne dois pas perdre plus de temps à rechercher mes petits que celui que je gagne à éditer les documents.

Merci quand même.
0
Nous sommes d'accord. Un fichier type - Doc Word - pour tous tes formulaires (bon de commande, transmis du bon de commande au prestataires, transmis à la compta, transmis de la facture à la compta,...).

Ceci dit:
1/ As-tu un fichier XLS par prestataire ou fournisseur qui regroupe toutes les commandes de ce prestataire ou fournisseur (une commande par ligne et toutes sur une même feuille)?
2/ Un XLS regoupant toutes les commandes (en ligne sur une feuille) pour tous les prestataires ou fournisseurs? C'est ce que j'ai compris!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Babelge Messages postés 7 Date d'inscription vendredi 23 juin 2006 Statut Membre Dernière intervention 11 décembre 2007
10 déc. 2007 à 07:28
As ta question, je répond dans le plus simple des cas c'est l'option "2":
Un XLS regoupant toutes les commandes (en ligne sur une feuille) pour tous les prestataires ou fournisseurs.

Par contre, j'ai déjà simplifié pas mal le problème par rapport au réel, car au départ il s'agit de partir d'une base de données ACCESS, et un "set de données" reprend parfois plus d'une ligne de donnée... et là, plus moyen de travailler avec le publipostage!

Ex:
Je passe commande pour deux devis en même temps (au même fournisseur) avec des adresses de livraison différentes pour chacun des devis ( j'ai 29 sites de livraison possible):
ou
Je transmets à la compta plusieurs factures relevant de commande différentes ou plusieurs factures partielles pour une seule et même commande.

Tu vois, je m'étais dis qu'en essayant d'abord de piloter word depuis une macro excell, je me mettrai ensuite à piloter word depuis ACCESS.... je fais des "exercices" en quelque sorte.
C'et un peu pour ça que la solution du publipostage est peu séduisante à mes yeux, c'est fort simple certes, mais aussi fort limitant.

Il n'est pas facilement envisageable de réaliser ces documents directement dans access via les ETATS car dans le texte des commandes, il m'arrive fréquemment de devoir modifier / adapter. On gère des approvisionnement ou des travaux, on gère de l'import ou de l'achat local, avec ou sans taxe incluse, en livraison avion ou bateau, incluse ou à notre charge, avec ou sans formule de retard/ pénalité, dans ou en dehors de marché public... et puis la mise en page d'un état access c'est galère.

Mais merci quand même d'avoir proposé
0
Je comprends mieux la complexité.
Tu as encore une autre solution possible. Sortir des formulaires direct depuis Excel. Suite à tes exemples, je prends 2 hypothèses: 1) même devis pour un fournisseur avec 2 adresses de livraison différentes = ce sont 2 lignes distinctes dans la feuille source, 2) chaque facture partielle pour une commande est une nouvelle ligne dans le fichier source. Puis, je construirai ainsi:

1/ il faut une nouvelle colonne A - obligatoirement - qui sera un index unique. P.ex. une concaténation de num.commande/code.fournisseur/code.adr.livraison/num.facture qui permet de traiter les devis et les factures multiples;
2/ dans le menu 'Insérer/Nom/Définir' on définit MonIndex =MesDonees!$A:$A;
3/ on ajoute autant des feuille que des formulaires. Sur chacune je construis un formulaire détaillé avec une place prévue pour la référence définie en 1/ et dans la mise en page il faut enlever l'option du grillage;
4/ dans chaque formulaire à l'endroit de la référence je fait un menu déroulant depuis le menu 'Données/Validation...' avec l'option Liste et la source MonIndex. Cela donne une liste déroulante avec toutes les références de la feuille source;
5/ pour les autres champs du formulaire j'utilise la fonction Excel vlookup (...) pour afficher les autres éléments depuis la feuille source sur la base de la valeur de la référence faite en 4/. Cela permet aussi de faire des calculs dynamiques type TVA si un % est affiché;
6/ dès là l'on peut utiliser l'un ou l'autre des formulaires et choisissant une référence imprimer ou faire un PDF pour e-mail.

Le fichier source deviendra long à temps, alors vu la complexité du suivi et la multitude des options, pense à une solution Access optimisée avec des formulaires calculés, le suivi des factures multiples ou par fournisseur, etc. Avec un cahier des charges clair et l'habitude d'Access on peut faire une application simple et utile en peu de temps.
0
Babelge Messages postés 7 Date d'inscription vendredi 23 juin 2006 Statut Membre Dernière intervention 11 décembre 2007
11 déc. 2007 à 12:11
Intéressant, intéressant
Je vais creuser cette idée pour apprendre.

Note que la feuille de données excel sera un export de ma base ACCESS.
Et donc je pourrais trier pour n'exporter dans excel que les dossier en cours en traitement.
Ca permettrai de ne pas allonger inutilement le menu déroulant.

Suite dans quelques jours après mes premiers essais
0