Macro word qui lit un fichier Excel provoque une erreur
6 réponses
AfterBoy
Bonjour,
J'ai une macro Word qui va lire dans un fichier Excel. =C7a fonctionnait
bien depuis 4 ans. La macro Word avait =E9t=E9 cr=E9=E9 lorsque je travaill=
ais
sous Word 2003. Sur mon poste cohabite maintenant Office 2003 et 2007
depuis l'an pass=E9 et ca fonctionnait. J'ai chang=E9 mon ordinateur
depuis et la ma macro ne fonctionne plus. Voici mon code
Set MyXL =3D New Excel.Application
Set MyXL =3D GetObject(, "Excel.Application")
MyXL.Workbooks.Open "Admission.xlsx"
MyXL.Visible =3D True
(jusqu'ici le code s'execute bien, je vois l'application Excel
apparaitre avec mon document ouvert
c'est la prochaine ligne qui est en erreur, elle fonctionnait bien
avant)
MyXL.Selection.SpecialCells(xlCellTypeLastCell).Select 'se positionne
sur la derni=E8re cellule
Cette derni=E8re ligne (ci haut) provoque l'erreur 424 Objet requis. Au
fait ca semble pas etre la ligne proprement dite qui est en erreur
mais plut=F4t l'appel =E0 MyXl puisque la ligne (ci-bas) aussi provoque
cette erreur.
Last =3D MyXL.ActiveCell.Row
j'me demande si c'est pas un probl=E8me de r=E9f=E9rences les voici dans
l'ordre
Visual basic for applications
Microsors Word 12 object library
Microsors Excel 12 object library
J'ai test=E9 la macro sous word 2003 et 2007 et j'ai le m=EAme probl=E8me.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Geo
Bonjour
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ]
[...]
Cette dernière ligne (ci haut) provoque l'erreur 424 Objet requis. Au fait ca semble pas etre la ligne proprement dite qui est en erreur mais plutôt l'appel à MyXl puisque la ligne (ci-bas) aussi provoque cette erreur.
Vu que votre document s'ouvre, MyXL ne parait pas mis en cause. Hier j'ai fait un truc du même genre, j'ai utilisé : Set objExcel = CreateObject("Excel.Application")
P'tet que ça irait mieux ?
-- A+
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]
[...]
Cette dernière ligne (ci haut) provoque l'erreur 424 Objet requis. Au
fait ca semble pas etre la ligne proprement dite qui est en erreur
mais plutôt l'appel à MyXl puisque la ligne (ci-bas) aussi provoque
cette erreur.
Vu que votre document s'ouvre, MyXL ne parait pas mis en cause.
Hier j'ai fait un truc du même genre, j'ai utilisé :
Set objExcel = CreateObject("Excel.Application")
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ]
[...]
Cette dernière ligne (ci haut) provoque l'erreur 424 Objet requis. Au fait ca semble pas etre la ligne proprement dite qui est en erreur mais plutôt l'appel à MyXl puisque la ligne (ci-bas) aussi provoque cette erreur.
Vu que votre document s'ouvre, MyXL ne parait pas mis en cause. Hier j'ai fait un truc du même genre, j'ai utilisé : Set objExcel = CreateObject("Excel.Application")
P'tet que ça irait mieux ?
-- A+
heureux-oli
Salut,
Je pense que dans ces deux lignes, il y a une de trop
Set MyXL = New Excel.Application Set MyXL = GetObject(, "Excel.Application")
Pour la première ligne, tu vas créer un nouvelle instance de l'application XL, alors que pour la seconde, tu récupères une instance ouverte d'XL. Par contre, SpecialCells est une collection qui appartient à un WorkSheet. Dans ton code, MyXL est un objet application.
Je pense que tu devrais poser ta question sur le forum XL.
-- Heureux-oli Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur. http://heureuxoli.developpez.com/ http://word.developpez.com/ http://marie-lebeau.heaj.be/
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ]
[...]
Cette dernière ligne (ci haut) provoque l'erreur 424 Objet requis. Au fait ca semble pas etre la ligne proprement dite qui est en erreur mais plutôt l'appel à MyXl puisque la ligne (ci-bas) aussi provoque cette erreur.
Vu que votre document s'ouvre, MyXL ne parait pas mis en cause. Hier j'ai fait un truc du même genre, j'ai utilisé : Set objExcel = CreateObject("Excel.Application")
P'tet que ça irait mieux ?
-- A+
Salut,
Je pense que dans ces deux lignes, il y a une de trop
Set MyXL = New Excel.Application
Set MyXL = GetObject(, "Excel.Application")
Pour la première ligne, tu vas créer un nouvelle instance de l'application
XL, alors que pour la seconde, tu récupères une instance ouverte d'XL.
Par contre, SpecialCells est une collection qui appartient à un WorkSheet.
Dans ton code, MyXL est un objet application.
Je pense que tu devrais poser ta question sur le forum XL.
--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/
http://marie-lebeau.heaj.be/
"Geo" <Geo@sans.pub> a écrit dans le message de news:
mn.34eb7d9b7f1166f7.41568@sans.pub...
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]
[...]
Cette dernière ligne (ci haut) provoque l'erreur 424 Objet requis. Au
fait ca semble pas etre la ligne proprement dite qui est en erreur
mais plutôt l'appel à MyXl puisque la ligne (ci-bas) aussi provoque
cette erreur.
Vu que votre document s'ouvre, MyXL ne parait pas mis en cause.
Hier j'ai fait un truc du même genre, j'ai utilisé :
Set objExcel = CreateObject("Excel.Application")
Je pense que dans ces deux lignes, il y a une de trop
Set MyXL = New Excel.Application Set MyXL = GetObject(, "Excel.Application")
Pour la première ligne, tu vas créer un nouvelle instance de l'application XL, alors que pour la seconde, tu récupères une instance ouverte d'XL. Par contre, SpecialCells est une collection qui appartient à un WorkSheet. Dans ton code, MyXL est un objet application.
Je pense que tu devrais poser ta question sur le forum XL.
-- Heureux-oli Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur. http://heureuxoli.developpez.com/ http://word.developpez.com/ http://marie-lebeau.heaj.be/
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ]
[...]
Cette dernière ligne (ci haut) provoque l'erreur 424 Objet requis. Au fait ca semble pas etre la ligne proprement dite qui est en erreur mais plutôt l'appel à MyXl puisque la ligne (ci-bas) aussi provoque cette erreur.
Vu que votre document s'ouvre, MyXL ne parait pas mis en cause. Hier j'ai fait un truc du même genre, j'ai utilisé : Set objExcel = CreateObject("Excel.Application")
P'tet que ça irait mieux ?
-- A+
AfterBoy
J'ai posté le meme poste sur le forum Excel aussi.
Merci.
J'ai posté le meme poste sur le forum Excel aussi.
J'ai posté le meme poste sur le forum Excel aussi.
Merci.
AfterBoy
J'ai trouvé la solution, bizarrement j'ai du rajouter cette ligne au début de la macro
public MyXL as object
Je ne comprends toujours pas pourquoi ca fonctionnait avant sans que je doive déclarer la variable publiquement. Il doit y avoir une particularité spécifique à ma nouvelle machine. O u bien une mise-a-jour de microsoft ait changé la donne...qui sait..j'aimerais tout de meme savoir..
Merci.
J'ai trouvé la solution, bizarrement j'ai du rajouter cette ligne au
début de la macro
public MyXL as object
Je ne comprends toujours pas pourquoi ca fonctionnait avant sans que
je doive déclarer la variable publiquement.
Il doit y avoir une particularité spécifique à ma nouvelle machine. O u
bien une mise-a-jour de microsoft ait changé la donne...qui
sait..j'aimerais tout de meme savoir..
J'ai trouvé la solution, bizarrement j'ai du rajouter cette ligne au début de la macro
public MyXL as object
Je ne comprends toujours pas pourquoi ca fonctionnait avant sans que je doive déclarer la variable publiquement. Il doit y avoir une particularité spécifique à ma nouvelle machine. O u bien une mise-a-jour de microsoft ait changé la donne...qui sait..j'aimerais tout de meme savoir..
Merci.
Lotre
Bonsoir,
Il me semble que ce n'est pas très clair Il faut se méfier des truc genre "selection" qui ne représente rien de bien précis ;o) Mieux vaut utiliser des références claires du type.
Mais tout dépend de ce qu'il faut faire réellement ;o) On peut aussi nommer dans le classeur une partie de la feuille ( insertion nom) et récupérer les coordonnées de la zone associée...
Exemple en fin de message ... ( testé avec depuis Word sous office 2000) Le classeur se nomme TEST.xls Une zone a été selectionné sur la feuille1 et a été nommée "ZONE" Le *.doc et le xls sont au même niveau
Pour de plus amples détails, le NG excel est plus approprié ;o)
Cordialement,
HB =================================================== Dim MyXL, MonClasseur, Ranj
Set MyXL = CreateObject("Excel.Application") CH = ThisDocument.Path & "TEST.xls" Set MonClasseur = MyXL.workbooks.Open(CH)
MsgBox "Valeur Col4 Ligne5 : " & Valeur_Col4_Ligne5 AA = MonClasseur.Names.Item("ZONE").RefersTo R = InStr(AA, "!") AD = Mid(AA, R + 1) Set Ranj = MonClasseur.worksheets(1).Range(AD) MsgBox "Nb de cellules dans la zone choisie : " & Ranj.Cells.Count ======================================================
Bonsoir,
Il me semble que ce n'est pas très clair
Il faut se méfier des truc genre "selection" qui ne représente rien de
bien précis ;o)
Mieux vaut utiliser des références claires du type.
Mais tout dépend de ce qu'il faut faire réellement ;o)
On peut aussi nommer dans le classeur une partie de la feuille (
insertion nom)
et récupérer les coordonnées de la zone associée...
Exemple en fin de message ...
( testé avec depuis Word sous office 2000)
Le classeur se nomme TEST.xls
Une zone a été selectionné sur la feuille1
et a été nommée "ZONE"
Le *.doc et le xls sont au même niveau
Pour de plus amples détails, le NG excel est plus approprié ;o)
Cordialement,
HB
=================================================== Dim MyXL, MonClasseur, Ranj
Set MyXL = CreateObject("Excel.Application")
CH = ThisDocument.Path & "TEST.xls"
Set MonClasseur = MyXL.workbooks.Open(CH)
MsgBox "Valeur Col4 Ligne5 : " & Valeur_Col4_Ligne5
AA = MonClasseur.Names.Item("ZONE").RefersTo
R = InStr(AA, "!")
AD = Mid(AA, R + 1)
Set Ranj = MonClasseur.worksheets(1).Range(AD)
MsgBox "Nb de cellules dans la zone choisie : " & Ranj.Cells.Count
======================================================
Il me semble que ce n'est pas très clair Il faut se méfier des truc genre "selection" qui ne représente rien de bien précis ;o) Mieux vaut utiliser des références claires du type.
Mais tout dépend de ce qu'il faut faire réellement ;o) On peut aussi nommer dans le classeur une partie de la feuille ( insertion nom) et récupérer les coordonnées de la zone associée...
Exemple en fin de message ... ( testé avec depuis Word sous office 2000) Le classeur se nomme TEST.xls Une zone a été selectionné sur la feuille1 et a été nommée "ZONE" Le *.doc et le xls sont au même niveau
Pour de plus amples détails, le NG excel est plus approprié ;o)
Cordialement,
HB =================================================== Dim MyXL, MonClasseur, Ranj
Set MyXL = CreateObject("Excel.Application") CH = ThisDocument.Path & "TEST.xls" Set MonClasseur = MyXL.workbooks.Open(CH)
MsgBox "Valeur Col4 Ligne5 : " & Valeur_Col4_Ligne5 AA = MonClasseur.Names.Item("ZONE").RefersTo R = InStr(AA, "!") AD = Mid(AA, R + 1) Set Ranj = MonClasseur.worksheets(1).Range(AD) MsgBox "Nb de cellules dans la zone choisie : " & Ranj.Cells.Count ======================================================
heureux-oli
Salut,
Effectivement, il n'était pas toujours nécessaire de déclarer les variables. C'est obligatoire maintenant.
Mais, Dim myXL as Excel.application devrait suffire si tu gardes cette ligne
Set myXL = New Excel.Application
Par contre, Dim myXL as Object le fera si tu gardes la ligne
Set myXL = GetObject('"Excel.Application")
Ce sont deux méthodes différentes, l'une est en EarlyBinding alors que la seconde est en LateBinding. Dans la première, la bibliothèque Excel doit être référencée dans le projet alors que pour la seconde pas.
-- Heureux-oli Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur. http://heureuxoli.developpez.com/ http://word.developpez.com/ http://marie-lebeau.heaj.be/
J'ai trouvé la solution, bizarrement j'ai du rajouter cette ligne au début de la macro
public MyXL as object
Je ne comprends toujours pas pourquoi ca fonctionnait avant sans que je doive déclarer la variable publiquement. Il doit y avoir une particularité spécifique à ma nouvelle machine. Ou bien une mise-a-jour de microsoft ait changé la donne...qui sait..j'aimerais tout de meme savoir..
Merci.
Salut,
Effectivement, il n'était pas toujours nécessaire de déclarer les variables.
C'est obligatoire maintenant.
Mais,
Dim myXL as Excel.application devrait suffire si tu gardes cette ligne
Set myXL = New Excel.Application
Par contre,
Dim myXL as Object
le fera si tu gardes la ligne
Set myXL = GetObject('"Excel.Application")
Ce sont deux méthodes différentes, l'une est en EarlyBinding alors que la
seconde est en LateBinding.
Dans la première, la bibliothèque Excel doit être référencée dans le projet
alors que pour la seconde pas.
--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/
http://marie-lebeau.heaj.be/
"AfterBoy" <RBRADETTE@CSTFELICIEN.QC.CA> a écrit dans le message de news:
ddcbd7b8-f1d3-4777-91c3-83fb99bd544f@t2g2000yqn.googlegroups.com...
J'ai trouvé la solution, bizarrement j'ai du rajouter cette ligne au
début de la macro
public MyXL as object
Je ne comprends toujours pas pourquoi ca fonctionnait avant sans que
je doive déclarer la variable publiquement.
Il doit y avoir une particularité spécifique à ma nouvelle machine. Ou
bien une mise-a-jour de microsoft ait changé la donne...qui
sait..j'aimerais tout de meme savoir..
Effectivement, il n'était pas toujours nécessaire de déclarer les variables. C'est obligatoire maintenant.
Mais, Dim myXL as Excel.application devrait suffire si tu gardes cette ligne
Set myXL = New Excel.Application
Par contre, Dim myXL as Object le fera si tu gardes la ligne
Set myXL = GetObject('"Excel.Application")
Ce sont deux méthodes différentes, l'une est en EarlyBinding alors que la seconde est en LateBinding. Dans la première, la bibliothèque Excel doit être référencée dans le projet alors que pour la seconde pas.
-- Heureux-oli Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur. http://heureuxoli.developpez.com/ http://word.developpez.com/ http://marie-lebeau.heaj.be/
J'ai trouvé la solution, bizarrement j'ai du rajouter cette ligne au début de la macro
public MyXL as object
Je ne comprends toujours pas pourquoi ca fonctionnait avant sans que je doive déclarer la variable publiquement. Il doit y avoir une particularité spécifique à ma nouvelle machine. Ou bien une mise-a-jour de microsoft ait changé la donne...qui sait..j'aimerais tout de meme savoir..