OVH Cloud OVH Cloud

erreur 429 activex ne peut créer l'objet

9 réponses
Avatar
neirda
Bonjour,

J'ai ce message d'erreur lorsque je compile ce code:
---------------------------------------------------------------------------=
------
Private Sub cmd_show_Click()
Dim Xl As Object
Set Xl =3D Nothing
Set Xl =3D GetObject(, "Excel.Application")
If Xl Is Nothing Then
Set Xl =3D CreateObject("Excel.Application")
Xl.Visible =3D True
If Xl Is Nothing Then
MsgBox "Impossible de d=E9marrer Excel", vbCritical
Exit Sub
End If
End If
End Sub

---------------------------------------------------------------------------=
------
ce qui est =E9trange c'est qu'il fonctionne une fois et ensuite le
message appara=EEt.

Merci pour votre aide.

9 réponses

Avatar
david
salut,

déjà, il faut a tout prix exécuter la méthode quit pour les objets
"application" (de chez Ms et d'autres aussi).
En effet, si tu ne fait pas cela, l'objet Xl est détruit en fin de
sous-programme, mais comme ces Dll disposent de l'attribut "garder en
mémoire", l'instance créée est alors toujours en mémoire : même si
ton programme se termine et là plus moyen (sauf via le gestionnaire de
tache) de la supprimer...
Pour cela, en fin d'utilisation fait toujours :
Xl.quit 'Force le déchargement de
Excel de la mémoire
set Xl = nothing 'Libére le pointeur vers un
objet qui n'existe plus

Une fois cette correction effectuée, rappelle nous...

A+
neirda a écrit :

Bonjour,

J'ai ce message d'erreur lorsque je compile ce code:
------------------------------------------------------------------------- --------
Private Sub cmd_show_Click()
Dim Xl As Object
Set Xl = Nothing
Set Xl = GetObject(, "Excel.Application")
If Xl Is Nothing Then
Set Xl = CreateObject("Excel.Application")
Xl.Visible = True
If Xl Is Nothing Then
MsgBox "Impossible de démarrer Excel", vbCritical
Exit Sub
End If
End If
End Sub

------------------------------------------------------------------------- --------
ce qui est étrange c'est qu'il fonctionne une fois et ensuite le
message apparaît.

Merci pour votre aide.


Avatar
Gloops
Bonjour,

Ah oui l'erreur 429 je l'ai du premier coup, dans un appel entre Access
et Word.

A ce que j'ai lu un jour, ce qui va marcher sur une machine ne
fonctionnera pas forcément sur une autre, tellement les causes pouvant
mener à cette erreur sont diverses.

Cherche voir "429" sur le site Microsoft : tu vas voir, il y a de la
lecture.

En passant par Google, la première réponse est celle-ci :
http://support.microsoft.com/?id‚8550

Quand tu arrives sur une page qui commence par l'avertissement sur la
traduction automatique, si tu peux la lire en Anglais c'est mieux, ça
t'évite d'avaler de la bouillie pour les chats. On choisit la langue en
haut à droite de la page.



Le fait que tu puisses ouvrir Excel une fois et pas les fois suivantes
fait penser, en regardant le code, que CreateObject fonctionne, mais que
GetObject ne réussit pas à retourner l'objet correctement. Je me demande
si ce ne serait pas une bonne idée de jouer sur les paramètres de
GetObject, mais c'est juste une interrogation comme ça en l'air.

_____________________________________
neirda a écrit, le 10/11/2005 10:52 :

Bonjour,

J'ai ce message d'erreur lorsque je compile ce code:
---------------------------------------------------------------------------------
Private Sub cmd_show_Click()
Dim Xl As Object
Set Xl = Nothing
Set Xl = GetObject(, "Excel.Application")
If Xl Is Nothing Then
Set Xl = CreateObject("Excel.Application")
Xl.Visible = True
If Xl Is Nothing Then
MsgBox "Impossible de démarrer Excel", vbCritical
Exit Sub
End If
End If
End Sub

---------------------------------------------------------------------------------
ce qui est étrange c'est qu'il fonctionne une fois et ensuite le
message apparaît.

Merci pour votre aide.



Avatar
Gloops
J'étais déjà en train de taper quand David a envoyé sa réponse, si je
l'avais vue je crois que j'aurais attendu ...
Avatar
neirda
Bon j'ai bien essayer de fermer les objet avec .quit etc...

Le problème est toujours présent et comme la dit Gloops il semble y
avoir plusieurs raisons.

C'est assez embétant car dans mon application il me faudra ouvrir un
fichier Excel à la demande de l'utilisateur :(
Avatar
neirda
Bon en fait, j'ai régler le problème en zappant le GetObject. Ce qui
a pour conséquence de ne pas pouvoir tester si une instance Excel est
déjà ouverte. Ce n'est pas super grave en soit mais ça aurait était
un peu mieux.
Avatar
Jacques93
Bonjour neirda,
neirda a écrit :
Bonjour,

J'ai ce message d'erreur lorsque je compile ce code:
---------------------------------------------------------------------------------
Private Sub cmd_show_Click()
Dim Xl As Object
Set Xl = Nothing
Set Xl = GetObject(, "Excel.Application")
If Xl Is Nothing Then
Set Xl = CreateObject("Excel.Application")
Xl.Visible = True
If Xl Is Nothing Then
MsgBox "Impossible de démarrer Excel", vbCritical
Exit Sub
End If
End If
End Sub

---------------------------------------------------------------------------------
ce qui est étrange c'est qu'il fonctionne une fois et ensuite le
message apparaît.




Est ce à la compilation (ce qui serait étrange), ou a l'exécution ?
Avec le code tel quel, si Excel n'est pas lancé avant, il est normal que
ça plante sur :

Set Xl = GetObject(, "Excel.Application")

qui cherche une instance existante d'excel, et ne la trouve pas.

--
Cordialement,

Jacques.
Avatar
Jacques93
Bonjour neirda
neirda a écrit :
Bon en fait, j'ai régler le problème en zappant le GetObject. Ce qui
a pour conséquence de ne pas pouvoir tester si une instance Excel est
déjà ouverte. Ce n'est pas super grave en soit mais ça aurait était
un peu mieux.



Essaie :

On Error Resume Next
Set Xl = GetObject(, "Excel.Application")
On Error GoTo 0
If Xl Is Nothing Then
Set Xl = CreateObject("Excel.Application")
...

--
Cordialement,

Jacques.
Avatar
Gloops
Salut,

En fait, on va dire que ça génère une erreur. :)

Parce qu'en matière de plantage, on connaît aussi le conflit de
périphérique : l'écran devient tout bleu, et il faut éteindre pour repartir.

Dans ce dernier cas ça a tendance à être plus coton pour dépanner, et en
plus, plus embêtant sur le moment, pour l'utilisateur.

Pour l'erreur, on exécute en environnement de développement, et on voit
où ça s'arrête, et avec quel numéro d'erreur.

Et bien souvent on peut traiter l'erreur grâce à On Error Goto, comme
dans l'exemple que tu donnes.

D'ailleurs, il faut prendre l'habitude de mettre systématiquement une
procédure d'erreur partout. En général je fais ça par procédure ou
fonction, une procédure générale je crois qu'on peut mais c'est plus
délicat, si on veut avoir une idée d'où l'erreur s'est produite.
________________________________________
Jacques93 a écrit, le 14/11/2005 14:07 :

Est ce à la compilation (ce qui serait étrange), ou a l'exécution ?
Avec le code tel quel, si Excel n'est pas lancé avant, il est normal que
ça plante sur :

Set Xl = GetObject(, "Excel.Application")

qui cherche une instance existante d'excel, et ne la trouve pas.



Avatar
Gloops
Gloops a écrit, le 15/11/2005 02:04 :
Parce qu'en matière de plantage, on connaît aussi le conflit de
périphérique



Enfin on va dire le conflit de périphériques, si on considère qu'il faut
être au moins deux pour se battre ...