Macro word qui lit un fichier Excel provoque une erreur

Le
AfterBoy
Bonjour,

J'ai une macro Word qui va lire dans un fichier Excel. Ça fonctionnait
bien depuis 4 ans. La macro Word avait été créé lorsque je travaill=
ais
sous Word 2003. Sur mon poste cohabite maintenant Office 2003 et 2007
depuis l'an passé et ca fonctionnait. J'ai changé mon ordinateur
depuis et la ma macro ne fonctionne plus. Voici mon code

Set MyXL = New Excel.Application
Set MyXL = GetObject(, "Excel.Application")
MyXL.Workbooks.Open "Admission.xlsx"
MyXL.Visible = 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ère cellule

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.

Last = MyXL.ActiveCell.Row

j'me demande si c'est pas un problème de références les voici dans
l'ordre
Visual basic for applications
Microsors Word 12 object library
Microsors Excel 12 object library

J'ai testé la macro sous word 2003 et 2007 et j'ai le même problème.

Merci beaucoup
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Geo
Le #20504071
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+
heureux-oli
Le #20504231
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"
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+




AfterBoy
Le #20504221
J'ai posté le meme poste sur le forum Excel aussi.

Merci.
AfterBoy
Le #20504331
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
Le #20504521
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.

Valeur_Col4_Ligne5 = MonClasseur.Worksheets(1).Cells(5, 4).Value

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...

Ensuite, pour l'objet Range correspondant

on peut utiliser la taille

Ranj.Cells.Count
Ranj.rows.count
Ranj.columns.count

et des références relatives : Ranj.cells(I,J)

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)

MyXL.Visible = True
Valeur_Col4_Ligne5 = MonClasseur.worksheets(1).Cells(5, 4).Value

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
Le #20504661
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"
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.
Publicité
Poster une réponse
Anonyme