Problème Macro entre Excel et Word

Résolu/Fermé
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012 - 14 août 2012 à 12:58
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012 - 21 août 2012 à 22:32
Bonjour,
Après plusieurs questions posées sur le forum, et dont les réponses m'ont été très utiles, je me tourne à nouveau vers CCM pour un autre point à éclaircir :

J'ai un environnement de travail qui lie deux classeurs, en l'ouvrant je tombe sur le classeur [Nomenclature] qui est lié au classeur [Liste des Fournisseurs].

Sur la feuille Liste Matériel Aéraulique du classeur [Nomenclature], il y a un bouton qui me permet d'ouvrir un fichier Word afin de créer un publipostage automatique à l'aide d'un VBA.
Mon problème est le suivant : lorsque je test le VBA sous Word, il fonctionne parfaitement, mais lorsque je l'utilise par le bouton Excel, une erreur s'affiche et donc cela ne fonctionne pas.
Pour visualiser le fonctionnement, je pense qu'il faut d'abord regarder le programme du fichier Word (pour info, pour ouvrir le fichier word, maintenir Maj enfoncé car il y a une fermeture auto), puis essayer le bouton excel après.

Merci de votre aide.

Liste des fichiers : https://www.cjoint.com/?BHom5aYnbaD



A voir également:

51 réponses

Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
14 août 2012 à 13:38
Bonjour,
Il me semble avoir repérer une procédure dans le fichier que vous m'avez transmis hier.
Je regarde si c'est faisable.
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
Modifié par nicodu072 le 14/08/2012 à 13:42
Bonjour,
Attention, les dossier que je vous ai transmis hier doivent être différents car j'ai compléter/créer le programme aujourd'hui.
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
14 août 2012 à 14:10
Bonjour,
Pouvez-vous me communiquer le message d'erreur exact... ?
Merci.
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
14 août 2012 à 15:59
Bonjour,
Dans votre document Word, ce n'est vraiment pas une bonne idée de mettre une procédure qui ferme le fichier sitôt que l'on veut l'ouvrir ... a quoi cela sert-il..., quel impératif ... !Neutraliser cette macro [Private Sub Document_Open()] et ensuite essayé depuis l'application Excel, cela devrait marcher.
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
14 août 2012 à 16:42
Le message d'erreur est le suivant : "Erreur d'exécution '5852'. L'objet demandé n'est pas disponible."
Ensuite lorsque je lance le débogage j'ai :

With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument (=> surligné en jaune)
.SuppressBlankLines = True

Je souhaite fermer le fichier word de base par une fois le publipostage terminé, je nai pas besoin d'avoir 2 fichier Word d'ouvert mais seulement le fichier provenant du publipostage.

Je ne comprend pas pourquoi vous souhaité neutraliser [Private Sub Document_Open()] car s'est cela qui lance le publipostage automatique à l'ouverture de word.

Dans l'attente de votre réponse.
0

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

Posez votre question
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
14 août 2012 à 18:16
Bonjour,
Merci de l'information.
Il serait mieux d'avoir les commandes de publipostage directement dans la macro sur Excel [Sub Bouton1_Clic] est c'est là que vous fermez votre document de base après utilisation.
En plus dans votre code l'extension du fichier Word est [.docx] et le document de base est en [.docm] ; ce qui ne fonctionne pas.
Concernant l'erreur avec : [wdSendToNewDocument] contrôler dans Outils de de l'éditeur VBA sous Référence que la [Microsoft Word xx.0 Object Library] soit coché (si pas le cas la chercher dans la liste..)
Essayer déjà avec ce dernier point pour voir... !
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
14 août 2012 à 19:22
Concernant [Micrososf Word xx.0 Object Library], il est bien coché, donc mon problème est toujours présent.

Ensuite dans mes fichier les extensions sont bien en .doxm.

Enfin, pour votre début de réponse, je suis novice dans le VBA (comme vous avez pu le remarquer je pense). Je croyais que Excel ne pouvait pas contrôler Word et inversement.
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
14 août 2012 à 22:19
Bonjour,
Depuis Excel on peut commander Word sans aucun problème. Dans votre code Excel vous avez bien utilisé cette instruction (Set Wrd = CreateObject("word.Application") qui permet d'avoir accès à l'objet Word.
Je regarde pour corriger la procédure et je vous la transmets dès que tout fonctionne.
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
14 août 2012 à 22:26
Bonsoir,

D'accord, je pensait que l'on pouvait seulement ouvrir des fichiers.
Je vous remercie.

Cordialement.
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
15 août 2012 à 00:05
Bonjour,
Vous utilisez le document [Fiche Technique DOE AERAULIQUE.docx] sans la macro [Private Sub Document_Open()] (la supprimer)
Dans le module du classeur [Nomenclature.xlsm ] vous coller la procédure qui suit valable pour la feuille [Liste Matériel Aéraulique] :
Note : contrôler que le chemin ("C:\Users\Nico\Des....... ) si nécessaire corriger !
Le code :
Sub Bouton1_Clic()
Dim Wrd As Object
Dim DocWord As Object
Set Wrd = CreateObject("word.Application")
Wrd.Visible = True
nombase = "C:\Users\Nico\Desktop\Nomenclature et Fiche tecnique\Nomenclature.xlsm" 
feuilbase = "'Lien Aéraulique$'"
nompubli = "C:\Users\Nico\Desktop\Nomenclature et Fiche tecnique\Fiche Technique DOE AERAULIQUE.docx" 
Set DocWord = Wrd.Documents.Open(nompubli)
With DocWord.MailMerge
    .OpenDataSource Name:=nombase, SQLStatement:="SELECT * FROM " & feuilbase
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    .Execute Pause:=False
'        nomfich = Wrd.ActiveDocument.Name
End With
DocWord.Close False
End Sub
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
15 août 2012 à 12:11
Bonjour,
votre protocole fonctionne, mais à l'ouverture du fichier Word [Fiche Technique DOE AERAULIQUE], celui-ci me demande de sélectionner ma table, or mon classeur n'est pas disponible dans le choix des classeurs et quand je fais annuler, mes champs de mon fichier Word ne sont plus liés à ceux d'Excel.
Quand je retourne sur le protocole, j'ai "erreur 4198, la commande à échouée" et la ligne suivante est surlignée :

.OpenDataSource Name:=nombase, SQLStatement:="SELECT * FROM " & feuilbase

On s'approche de la réussite ;-).
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
Modifié par Le Pingou le 15/08/2012 à 14:35
Bonjour,
Suite à votre message, j'ai constaté une petite erreur de syntaxe qui se produit dans le message de réponse ou Le signe accent grave ['] est transformé en apostrophe ['], ce qui provoque le problème que vous rencontrez.
Je suis en train de vous préparer une solution globale pour les 3 listes que je transmettrai par lien et il n'y aura plus de problème.
Si toutefois vous désirez faire la correction, il s'agit de ce code :
feuilbase = "'Lien Aéraulique$'"
Il faut l'accent grave à la place de l'apostrophe, avant le [L] et après le [$]

Salutations.
Le Pingou
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
15 août 2012 à 15:25
Bonjour,
Ma proposition se base sur le principe que tous les fichiers (xlsm, docx) sont dans le même dossier du répertoire. Pour le test j'ai créé 2 documents fictifs.
Toutes les procédures se trouvent dans le module [lepingou] tout le reste a été supprimer sauf le module1 (étrange car il n'y a pas de feuille [Fournisseur]... !)
Il vous suffit d'enregistre la proposition dans le dossier de votre choix : https://www.cjoint.com/?3HppxyC4V77
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
15 août 2012 à 16:51
Merci pour ce travail,
cependant j'ai un peu de mal à saisir la démarche à effectuer (désolé).

Que dois-je faire avec [Sub Publipostage(nompubli, nombase, feuilbase, chemin)] ?

Par exemple, pour le bouton 1, dois-je mettre :

Option Explicit

Sub Bouton1_Clic()
Dim docpub As Variant, nomcla As Variant, nomfeuil As Variant, chemin As Variant
docpub = "Fiche Technique DOE AERAULIQUE.docx"
nomcla = ActiveWorkbook.Name
nomfeuil = "Lien Aéraulique"
chemin = ActiveWorkbook.Path & "\"
Publipostage docpub, nomcla, nomfeuil, chemin
End Sub

Suivi de :

ub Publipostage(nompubli, nombase, feuilbase, chemin)
Dim DocWord As Object, Wrd As Object
Dim nomfich As String
Set Wrd = CreateObject("word.Application")
Set DocWord = Wrd.Documents.Open(chemin & nompubli)
With DocWord.MailMerge
.OpenDataSource Name:=(chemin & nombase), SQLStatement:="SELECT * FROM '" & feuilbase & "$'"
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.Execute Pause:=False
nomfich = Wrd.ActiveDocument.Name
End With
DocWord.Close False
Set DocWord = Nothing: Set Wrd = Nothing
MsgBox "Le document " & nomfich & " est pret"
End Sub

Ou dois-je compiler l'ensemble ? Et idem pour les autres boutons ?
Si vous pouvez m'éclaircir sur ce point.
Cordialement.
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
15 août 2012 à 17:26
Bonjour,
Premier point, avez-vous essayé directement ma proposition ?
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
Modifié par Le Pingou le 15/08/2012 à 18:02
Bonjour,
Pour être clair, la première chose c'est d'essayé la proposition soit ouvrir le classeur [Nomenclature] et pour chaque feuilles [List...] clic sur le bouton [Fiche TechniquePour] et contrôler si le document Word est correct.
Enregistrer la proposition sur le bureau par exemple....
J'attends votre réponse.
Salutations.
Le Pingou
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
15 août 2012 à 22:19
Bonsoir, oui j'ai utilisé votre proposition. J'ai fait un copier / coller sur un module, mais lorsque je clique sur les boutons j'ai une "erreur de compilation : variable non définie" qui apparaît et plus précisément à cette endroit :


Sub Publipostage(nompubli, nombase, feuilbase, chemin) (=>Surligné en jaune)
Dim DocWord As Object, Wrd As Object
Dim nomfich As String
Set Wrd = CreateObject("word.Application")
Set DocWord = Wrd.Documents.Open(chemin & nompubli)
With DocWord.MailMerge
.OpenDataSource Name:=(chemin & nombase), SQLStatement:="SELECT * FROM '" & feuilbase & "$'"
With .DataSource
.FirstRecord = wdDefaultFirstRecord (=>Mis en surbrillance)
.LastRecord = wdDefaultLastRecord
End With
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.Execute Pause:=False
nomfich = Wrd.ActiveDocument.Name
End With
DocWord.Close False
Set DocWord = Nothing: Set Wrd = Nothing
MsgBox "Le document " & nomfich & " est pret"
End Sub

Cependant, lorsque je clic droit sur le(s) bouton(s) et que je fait modifier la macro, cela me renvoi directement sur la partie de programme correspondant au bouton. Donc sur ce point, je pense que cela devrait fonctionner si l'erreur précédente n'apparaissait pas.

Mais cela marchait lors des essais de votre coté ?
Cordialement.
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
15 août 2012 à 22:29
Bonjour,
Je vous ai demandé si ma proposition fonctionnait et pas de réponse, j'apprécie.. !
Par principe, on essaie la proposition et ensuite on copiera le code sur le classeur de travail.
Maintenant vous précisez exactement ce que vous avez copier et ou vous l'avez coller, je ne suis pas devin.
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
15 août 2012 à 22:39
Rebonsoir,
pour être clair, j'ai essayé votre proposition tel quelle et l'erreur est apparue, puis en remplaçant mes fichiers par les votre toujours pareil.
Voyant cela, j'ai essayé sur les miens en supprimant mes anciens modules et en en créant un nouveau sur lequel j'ai réalisé le copier / coller.
désolé si ma réponse n'a pas été assez rapide, je me suis absenté dans la soirée.
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
15 août 2012 à 22:59
Bonjour,
Je vous joints le fichier que j'ai testé et qui fonctionne pour les 3 listes (Aera, Hydr et Regu). https://www.cjoint.com/?3Hpw1pj9u4G
Vous copier le fichier ZIP sur le bureau ensuite extraire tous les fichiers vers un nouveau dossier sur le bureau et vous ouvrez ce nouveau dossier puis le classeur [Nomenclature_jpp.xlw] et essayer les 3 listes.
Note, pas d'autre application Excel ou Word en attente.
J'attends la réponse (en cas d'erreur vous faite une copie d'écran que vous collez sur un document que vous me faite parvenir.).
0
nicodu072 Messages postés 45 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 21 août 2012
15 août 2012 à 23:35
Il y a toujours un problème, cependant maintenant le message d'erreur indique "Projet ou bibliothèque introuvable" et non plus "Variable non définie".
Ci joint les message d'erreur : https://www.cjoint.com/?BHpxIx8llcJ

Cela ne proviendrait-il pas d'un problème de chemin?
0
Le Pingou Messages postés 12069 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 mai 2024 1 431
15 août 2012 à 23:42
Bonjour,
Merci.
Et ceci que j'avais déjà précisé :
Concernant l'erreur avec : [wdSendToNewDocument] contrôler dans Outils de de l'éditeur VBA sous Référence que la [Microsoft Word xx.0 Object Library] soit coché (si pas le cas la chercher dans la liste..)
0