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

foutue erreur 1004

12 réponses
Avatar
pascal.cambier
Bonjour.

Le code ci-dessous est ex=E9cut=E9 dans Access 2002. Il fonctionne une
premi=E8re fois parfaitement. Lorsque je veux l'ex=E9cuter une deuxi=E8me
(3=E8me et +) fois, j'ai l'erreur 1004.
=AB la m=E9thode 'Cells' de l'objet '_Global' a =E9chou=E9 =BB ou =AB la m=
=E9thode
'Range' de l'objet '_Worksheet' a =E9chou=E9 =BB

Je ne comprends pas cette inconstance : le code fonctionne une fois et
puis plus jamais, =E0 moins de relancer vba

avec mes meilleures salutations

Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlBook As Excel.Workbook
(...)
Set xlApp =3D CreateObject("Excel.Application")
Set xlBook =3D xlApp.Workbooks.Add
xlApp.Visible =3D True
Set xlSheet =3D xlBook.Worksheets.Add
(...)
Temp$ =3D Fn_Expurge(Left$(Rst("Act_Code_Pub") & " - " & Rst
("Act_Denomination"), 31))
xlSheet.Name =3D Temp$
xlSheet.Cells(2, 2) =3D "Client : " & Rst("Cli_Nom_Entreprise")
xlSheet.Cells(3, 2) =3D "Action : " & Rst("Act_Code_Pub") & " -
" & Rst("Act_Denomination")
xlSheet.Range(Cells(2, 2), Cells(3, 2)).Font.Size =3D 15
(erreur juste ici dessus) ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
^ ^ ^
(...)
Set xlSheet =3D Nothing
Set xlBook =3D Nothing
Set xlApp =3D Nothing

2 réponses

1 2
Avatar
Blaise Cacramp
Bonjour ou bonsoir, selon.

Rectification importante :

Cells n'est pas un objet, mais une *propriété*. C'est pour cela qu'elle a
besoin de son objet worksheet.

Mais bon, chacun sait qu'une difficulté de la programmation objet est de
différentier tous ces "trucs".
Il fut même un moment où je disais que « "l'objet" chez Microsoft est le
"truc" chez l'enfant en mal de vocabulaire ».
À notre décharge, l'aide nous induit en erreur. Extrait :
«
Range et Cells
Pour renvoyer un objet Range, spécifiez Range(cell1, cell2), cell1 et cell2
étant des objets Range spécifiant les cellules de début et de fin. L'exemple
suivant montre comment définir le style de la bordure des cellules A1:J10.

With Worksheets(1)
.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End WithNotez le point devant chaque occurrence de la propriété Cells. Le
point est nécessaire si le résultat de l'instruction With précédente doit
être appliqué à la propriété Cells ; dans le cas présent, il permet
d'indiquer que les cellules se trouvent dans la feuille de calcul 1 (sans le
point, la propriété Cells renverrait les cellules de la feuille active).

»

Bonne et agréable soirée


Cdt, Blaise
---- ---- ----


"Blaise Cacramp" a écrit dans le message de news:
%
Mon frère Pascal,

C'est, comme tu le connais, toujours le même problème en VBA automation :
il faut être très explicite pour les manipulations d'objets hors
application porteuse. Donc comme tu es dans ACCESS, les objets EXCEL.

En cause ici : l'objet Cells (syntaxe 2) dans l'objet Range.
Pour la syntaxe 1 (références de type "A1"), cela ne pose pas de problème.

Et Microsoft le dit : « Ce comportement est inhérent au produit. »
http://support.microsoft.com/kb/178510/fr

La solution :

xlSheet.Range(Cells(2, 2), Cells(3, 2)).Font.Size = 15
doit devenir
xlSheet.Range(xlSheet.Cells(2, 2), xlSheet.Cells(3, 2)).Font.Size =
15


Et comme je sais que tu as une foule de lignes a changer, bon courage pour
demain

Cdt, Blaise
---- ---- ----


a écrit dans le message de news:

Bonjour.

Le code ci-dessous est exécuté dans Access 2002. Il fonctionne une
première fois parfaitement. Lorsque je veux l'exécuter une deuxième
(3ème et +) fois, j'ai l'erreur 1004.
« la méthode 'Cells' de l'objet '_Global' a échoué » ou « la méthode
'Range' de l'objet '_Worksheet' a échoué »

Je ne comprends pas cette inconstance : le code fonctionne une fois et
puis plus jamais, à moins de relancer vba

avec mes meilleures salutations

Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlBook As Excel.Workbook
(...)
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
xlApp.Visible = True
Set xlSheet = xlBook.Worksheets.Add
(...)
Temp$ = Fn_Expurge(Left$(Rst("Act_Code_Pub") & " - " & Rst
("Act_Denomination"), 31))
xlSheet.Name = Temp$
xlSheet.Cells(2, 2) = "Client : " & Rst("Cli_Nom_Entreprise")
xlSheet.Cells(3, 2) = "Action : " & Rst("Act_Code_Pub") & " -
" & Rst("Act_Denomination")
xlSheet.Range(Cells(2, 2), Cells(3, 2)).Font.Size = 15
(erreur juste ici dessus) ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
^ ^ ^
(...)
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing



Avatar
pascal.cambier
Merci à tous
1 2