Portabilité VBA [Résolu]

ThomasFalguieres 36 Messages postés mardi 21 février 2012Date d'inscription 11 juillet 2012 Dernière intervention - 23 mai 2012 à 16:37 - Dernière réponse : ThomasFalguieres 36 Messages postés mardi 21 février 2012Date d'inscription 11 juillet 2012 Dernière intervention
- 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.

J'implore votre aide...

En vous remerciant d'avance.

Thomas
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
ThomasFalguieres 36 Messages postés mardi 21 février 2012Date d'inscription 11 juillet 2012 Dernière intervention - 7 juin 2012 à 09:02
3
Merci
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 !!

Thomas

Merci ThomasFalguieres 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de ThomasFalguieres
Utilisateur anonyme - 23 mai 2012 à 16:47
0
Merci
Bonjour,

Commence par enlever cette ligne:

On Error Resume Next


Tu vas au moins avoir un message d'erreur
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 23 mai 2012 à 17:02
0
Merci
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
Commenter la réponse de ucfoutu
ThomasFalguieres 36 Messages postés mardi 21 février 2012Date d'inscription 11 juillet 2012 Dernière intervention - 24 mai 2012 à 07:56
0
Merci
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
Commenter la réponse de ThomasFalguieres
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 24 mai 2012 à 08:21
0
Merci
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 24 mai 2012 à 08:34
0
Merci
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 24 mai 2012 à 10:32
0
Merci
Essaye donc (pour voir) :
Application.VBE.ActiveVBProject.References.AddFromGuid("{1C3B4210-F441-11CE-B9EA-00AA006B1A69}", 5, 0)

si le CLSID plus haut ne "marche ps", essaye avec celui-ci :
Application.VBE.ActiveVBProject.References.AddFromGuid("{0D452EE1-E08F-101A-852E-02608C4D0BB4}
", 2, 0)



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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 24 mai 2012 à 10:41
0
Merci
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
Commenter la réponse de ucfoutu
ThomasFalguieres 36 Messages postés mardi 21 février 2012Date d'inscription 11 juillet 2012 Dernière intervention - 24 mai 2012 à 14:19
0
Merci
Merci beaucoup ucfoutu !!

Je vais me pencher sur le problème et te ferai un retour par la suite

Encore merci de ton aide !!! c'est vraiment sympa !!

Thomas
Commenter la réponse de ThomasFalguieres

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.