Problème Macro entre Excel et Word
Résolu
nicodu072
Messages postés
45
Date d'inscription
Statut
Membre
Dernière intervention
-
nicodu072 Messages postés 45 Date d'inscription Statut Membre Dernière intervention -
nicodu072 Messages postés 45 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Problème Macro entre Excel et Word
- Word et excel gratuit - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Word 2013 - Télécharger - Traitement de texte
- Tableau word - Guide
- Liste déroulante excel - Guide
51 réponses
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.
Il me semble avoir repérer une procédure dans le fichier que vous m'avez transmis hier.
Je regarde si c'est faisable.
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.
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.
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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... !
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... !
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.
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.
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.
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.
Bonsoir,
D'accord, je pensait que l'on pouvait seulement ouvrir des fichiers.
Je vous remercie.
Cordialement.
D'accord, je pensait que l'on pouvait seulement ouvrir des fichiers.
Je vous remercie.
Cordialement.
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 :
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
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 ;-).
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 ;-).
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
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
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
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
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.
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.
Bonjour,
Premier point, avez-vous essayé directement ma proposition ?
Premier point, avez-vous essayé directement ma proposition ?
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
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
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.
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.
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.
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.
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.
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.
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.).
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.).
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?
Ci joint les message d'erreur : https://www.cjoint.com/?BHpxIx8llcJ
Cela ne proviendrait-il pas d'un problème de chemin?
Attention, les dossier que je vous ai transmis hier doivent être différents car j'ai compléter/créer le programme aujourd'hui.