ThomasFalguieres
Messages postés36Date d'inscriptionmardi 21 février 2012StatutMembreDernière intervention11 juillet 2012
-
23 mai 2012 à 16:37
ThomasFalguieres
Messages postés36Date d'inscriptionmardi 21 février 2012StatutMembreDernière intervention11 juillet 2012
-
7 juin 2012 à 09:02
Bonjour,
Je suis en train de développer une application en VBA dans le cadre de mon stage et rencontre un GROS problème.
En effet, l'application s'exécute correctement sur mon poste au travail ET sur mon ordinateur portable personnel. Seulement, quand je le mets sur un autre poste (ceux de mes collègues) au travail, c'est la catastrophe
Des erreurs surviennent comme:
- l'erreur '429'par rapport au ActiveX: en effet j'utilise une fonction "Nz()" permettant de vérifier le contenu d'une variable ou objet. Étant une fonction de MS ACCESS, et les postes de mes collègues ne possédants pas ACCESS, il est normal que ça ne marche pas.(enfin du moins c'est ce que je crois car quand je ne l’utilise pas, je n'ai plus d'erreur à ce propos)
- ListView: Quand bien même que les références (dans VBE) soient les même sur le poste de mes collègues que sur le mien, les objets ListView ne sont pas reconnus je ne comprends pas.
J'ai donc passé la journée à chercher des informations sur le problème et ai juste trouver la solution de charger les références au démarrage de l'application comme ceci :
Sub ajoutREf()
'La procédure boucle sur la collection de références et supprime celles qui sont
'spécifiées manquantes.
For Each Ref In ThisWorkbook.VBProject.References
If Ref.IsBroken = True Then _
ThisWorkbook.VBProject.References.Remove Ref
Next Ref
On Error Resume Next
With ThisWorkbook.VBProject.References
Application.DisplayAlerts = False
'Ajout de la dll FM20.dll
.AddFromFile "C:\WINDOWS\system32\FM20.DLL"
End With
Application.DisplayAlerts = True
End Sub
J'ai beau rajouter autant de dll que je veux, cela ne fait absolument rien de plus.
Je voulais donc savoir si quelqu'un avait la solution "Miracle" ou du moins aurait des pistes car si je ne résous pas ce problème, mon application est tout simplement inutilisable par d'autre personnes.
ThomasFalguieres
Messages postés36Date d'inscriptionmardi 21 février 2012StatutMembreDernière intervention11 juillet 2012 7 juin 2012 à 09:02
Salut ucfoutu !!
Je n'ai pas pu répondre avant ni même me pencher sur le problème plus tôt car j'avais d'autre priorité imposées quant au développement de mon application.
Du coup j'ai essayé toutes tes solutions qui n'ont certes pas résolues le problème directement mais qui m'ont fait avancer dans ma démarche dans le sens où grâce à tes conseils j'ai pu voir que tous les PC sur lesquels je voulais faire tourner mon application utilisaient les bonnes DLL, ou du moins les même que moi.
Cela m'a donc conduit à penser que ça venait des bibliothèques Access (que mes collègues n'avaient pas) et c'était bien ça . Du coup, problème résolu !!
Merci pour ton aide et les pistes que tu m'a donné, vraiment !!
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 23 mai 2012 à 17:02
Bonjour,
En plus de ce que dit fort justement cmarcotte :
cette ligne :
.AddFromFile "C:\WINDOWS\system32\FM20.DLL"
est surprenante ! Elle suppose en effet de manière péremptoire que ta dll se trouve dans le dossier "C:\WINDOWS\system32", ce qui n'est pas forcément le cas !
non seulement elle peut être absente, mais encore :
- elle peut s'y trouver, mais ne pas être enregistrée
- le dossier system32 n'est pas forcément dans le répertoire Windows (WINNT sur certaines machines)
- le dossier system32 de Windows n'est pas celui à utiliser si WIN 7 64 bits ! (c'est alors SysWow64)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
ThomasFalguieres
Messages postés36Date d'inscriptionmardi 21 février 2012StatutMembreDernière intervention11 juillet 2012 24 mai 2012 à 07:56
Bonjour,
@cmarcotte: En effet je viens de retirer le "On Error Resume Next" et il ne me met pas d'erreur dans la mesure ou lorsque j'ai écrit cette ligne je savais que la dll FM20 était au bon endroit. Il me dit juste que la bibliothèque ou référence est déjà utilisée.
Du coup je n'ai aucune idée de quoi faire ni comment faire pour résoudre ce problème. Je trouve quand même cela dingue qu'il y ait ce genre de problème d'un MS OFFICE 2007 à MS OFFICE 2007...je trouve ca très dommage.
@ucfoutu, je suis entièrement d'accord, les bibliothèques peuvent/ou pas exister et suivant l'OS, les noms de dossiers vont changer, donc je ne peut opter pour cette solution dans le sens ou ce n'est absolument pas multiplateforme. Au moins tu m'as fait pointer du doigt que ce que je faisais ne servais à rien
Du coup, une idée pour palier au problème ? Avez-vous déjà rencontré ce problème auparavant ?
Je vous remercie de votre aide,
Thomas
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 mai 2012 à 08:21
Tu peux toujours utiliser la fonction Environ et des expressions conditionnelles !
regarde ce que ferait ceci, par exemple :
toto = Environ("ComSpec")
toto = Left(toto, InStrRev(toto, ""))
MsgBox toto
toto = Environ("os")
MsgBox toto
toto = Environ$("PROCESSOR_ARCHITECTURE")
MsgBox toto
A toi de "faire joujou" avec tout cela (expressions conditionnelles).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 mai 2012 à 08:34
Tu peux également tenter à l'aide du CLSID .
Exemple pour ta FM.Dll :
1C3B4210-F441-11CE-B9EA-00AA006B1A69
Tu le trouves par exemple dans ta base de registre, à cette clé :
HKEY_CLASSES_ROOT\CLSID\{1C3B4210-F441-11CE-B9EA-00AA006B1A69}
ainsi que, pour son chemin, ici :
HKEY_CLASSES_ROOT\CLSID\{1C3B4210-F441-11CE-B9EA-00AA006B1A69}\InprocServer32
=>> chez moi, avec XP ===>> C:\WINDOWS\system32\FM20.DLL
Voilà ...
Bonne recherche.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Regarde par ailleurs (sur TA machine) ce que ferait ceci, qui devrait te donner pas mal d'indications :
MsgBox ActiveWorkbook.VBProject.References("MsForms").Name
MsgBox ActiveWorkbook.VBProject.References("MsForms").Description
MsgBox ActiveWorkbook.VBProject.References("MsForms").GUID
MsgBox ActiveWorkbook.VBProject.References("MsForms").Major
MsgBox ActiveWorkbook.VBProject.References("MsForms").Minor
MsgBox "chemin sur sur ta machine " & ActiveWorkbook.VBProject.References.Item("MsForms").fullpath
Voilà, ami : je t'ai donné plusieurs pistes. Elles me semblent toutes assez utiles.
A toi de jongler maintenant avec tout cela
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 mai 2012 à 10:41
Je viens de parcourir en l'analysant mieux (j'ai enfin bu mon café) ma base de registre ===>>
c'est bien le 2éme CLSID ( {0D452EE1-E08F-101A-852E-02608C4D0BB4} )
on le trouve en sous-clé Typelib, ici :
HKEY_CLASSES_ROOT\CLSID\{46E31370-3F7A-11CE-BED6-00AA00611080}\TypeLib
où on lit la valeur par défaut : [b]{0D452EE1-E08F-101A-852E-02608C4D0BB4}
/b Voilà voilà !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ