Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro word qui lit un fichier Excel provoque une erreur

6 réponses
Avatar
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.

Merci beaucoup

6 réponses

Avatar
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+
Avatar
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/

----------------------------------------------------------------------------------

"Geo" a écrit dans le message de news:

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+




Avatar
AfterBoy
J'ai posté le meme poste sur le forum Excel aussi.

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

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
======================================================
Avatar
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/

----------------------------------------------------------------------------------

"AfterBoy" a écrit dans le message de news:

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.