Plantage d'excel à cause d'un appel DLL en vba

alpha35

XLDnaute Nouveau
Bonjour,

Je rencontre un problème difficile sous excel 2003/windows XP :
Je fais un appel à une fonction d'une dll dans une subroutine vba.
J'utilise donc la déclaration Private Declare Function maFonction Lib "c:\madll.dll" dans l'entête du module vba.
Lorsque j'appelle ma subroutine vba, tout marche parfaitement et excel me rend la main.
Le seul hic, c'est que lorsque je ferme le classeur ou Excel, j'ai un message Microsoft Office Excel a rencontré un problème et doit être fermé. Nous vous prions de nous excuser blablabla...:

Signature de l'erreur :
AppName: excel.exe AppVer: 11.0.6560.0 AppStamp:4296b6f2
ModName: ntdll.dll ModVer: 5.1.2600.2180 ModStamp:41109627
fDebug: 0 Offset: 0000eae0


Cette erreur arrive aussi de manière aléatoire avant de fermer le classeur.

Tout d'abord, j'ai cru que c'était un pb dans la dll, mais ce n'est pas le cas : si je fait un appel à GetSystemMetrics dans user32.dll, c'est pareil : ci-joint le source du vba qui me pose problème (c:\u32.dll est le même fichier que c:\windows\system32\user32.dll".

Private Declare Function GetSystemMetrics Lib "c:\u32.dll" (ByVal nIndex As Long) As Long
Sub AfficherResolution()
Largeur = GetSystemMetrics(0)
Hauteur = GetSystemMetrics(1)
MsgBox "La résolution de votre écran est de " & Largeur & " par " & Hauteur
Exit Sub
End Sub


Petits points supplémentaires :
- lorsque je vire c:\ dans c:\user32.dll, tout se passe bien.
- quand je mets u32.dll dans c:\windows\system32 et que je retire le c:\ devant u32.dll dans le source, le pb est tjs là.
- après lancement de la subroutine (qui appelle c:\u32.dll) et avant fermeture d'excel, le fichier c:\u32.dll ne peut pas être supprimé (accès refusé) : il est tjs ouvert.

Est-ce que quelqu'un a une idée ?

Merci pour votre aide.

Ma config : excel 2003 sp2, windows XP Pro SP2.
 

MJ13

XLDnaute Barbatruc
Re : Plantage d'excel à cause d'un appel DLL en vba

Bonjour alpha35 et le forum.

J'ai l'impression que tu as un bug. Cela peut arrivé lorsqu'on commence à faire appel à des routines assez complexes.
Dans ce cas tu peux essayé de faire du débogage pour voir où se passe le problème. Autrement, il faudra surement essayer une autre solution.
 

jeanpierre

Nous a quitté
Repose en paix
Re : Plantage d'excel à cause d'un appel DLL en vba

Bonsoir,

J'ai eu un (plusieurs problèmes) similaire(s) avec Excel 2003 et Win Xp et sans faire appel à des Biblios....

Je n'ai toujours pas de solutions....

C'est vrai que c'est casse-pieds lorsque tu perds tout...

Que la soirée et le week-end soient bons en tous cas.

Jean-Pierre (qui n'avait pas grand chose à dire)
 

kiki29

XLDnaute Barbatruc
Re : Plantage d'excel à cause d'un appel DLL en vba

Dans un Module Standard
Code:
Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1

Sub Tst
Dim DefinitionX as long ,DefinitionY as long
	DefinitionX = GetSystemMetrics(SM_CXSCREEN)
	DefinitionY = GetSystemMetrics(SM_CYSCREEN)
	Debug.print DefinitionX,DefinitionY
End Sub
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Plantage d'excel à cause d'un appel DLL en vba

Bonjour à tous,

Pourrais-tu vérifier ton message :

Tu parles de user32.dll et de u32.dll ?????

Je connais user32.dll , je mangeais encore avec lui hier soir :p, mais u32.dll....

A+

Edition : ah ben kiki29 est passé avant moi ;-)
 
Dernière édition:

alpha35

XLDnaute Nouveau
Re : Plantage d'excel à cause d'un appel DLL en vba

Kiki29,
J'ai fais un copier/coller de ton code dans une nouvelle feuille excel (module vba), j'ai remplacé user32.dll par c:\user32.dll (qui est un copier/coller du c:\windows\system32\user32.dll). Le pb est tjs là (excel a rencontré un problème blablabla...).

Tu l'as aussi ?


JCGL,
u32.dll est juste le fichier user32.dll que j'ai copié dans c:\ et dans c:\windows\system32 (juste le nom est différent).
 

kiki29

XLDnaute Barbatruc
Re : Plantage d'excel à cause d'un appel DLL en vba

Quoique c'est quand même délicat de toucher à une dll systeme, le risque étant un plantage complet du PC, donc à tes risques et périls, il ne faudra pas venir pleurer.Et utilitaire ou pas il te jette donc acte.
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Plantage d'excel à cause d'un appel DLL en vba

Re,

Que l'on soit bien d'accord : il n'y pas de risque à déclarer une *.DLL ou un *.OCX connu

L'utilitaire de Ti permet de placer le fichier de liaison dans le bon répertoire.

C'est ce que tu préconisais avec Regsvr32...

Pour ceux qui préfèrent la méthode par Exécuter : Ce lien n'existe plus

A+
 

kiki29

XLDnaute Barbatruc
Re : Plantage d'excel à cause d'un appel DLL en vba

Affirmataf d'ailleurs l'utilitaire ou regsvr32 fonctionne pour d'autres dll, mais pour des dll systeme je pense que l'unicité de ces dll est vérifiée car je n'ose imaginer le bordel que ça pourrait être

Il y a de ça qqs années il faut se souvenir des pbs de régression de dll sur NT
 
Dernière édition:

alpha35

XLDnaute Nouveau
Re : Plantage d'excel à cause d'un appel DLL en vba

Mon problème initial est bien sur une dll perso. L'utilisation de user32 n'était qu'une étape pour vérifier si le problème venait de la programmation de la dll ou de vba/excel.

Je testerai sur la dll originale et je vous dirai si ca résoud problème.

J'ai quand même lancé regsvr32 sur mon u32.dll, et j'ai un message c:\u32.dll a été chargé mais le point d'entrée DllRegisterServer est introuvable. Ce fichier ne peut pas être enregistré. Puis regsvr32 a rencontré un probleme et doit fermer blablabla.
Ca doit être dû au fait qu'elle est déjà présente. Non ?

Une question complémentaire : regsvr32 est appelable sans les droits administrateur et d'écriture dans la base de registre ?
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino