Re : VBA excel 2000 et 2003
| tester cette partie de code, donc pas de certitude que ça marche
'--------------------------
For Each Ref In Refs
If Ref.IsBroken Then
Refs.Remove Ref.name
End If
Next
'-------------------------
Cela fonctionne! Tu n'es pas croyant? ;-))
Tu peux tester la chose sur ton ordinateur.
A )
Tu crées un fichier avec un formulaire où tu insères une référence
une référence inutile au code qui est dans le fichier en identifiant
bien le nom de la DLL et son chemin.
B )
Tu enregistres le fichier et tu fermes Excel.
C )
Tu dé-enregistres le fichier DLL de la référence dans la base de registre
que tu as ajouté inutilement à ton fichier.
Pour ce faire, tu ouvres une fenêtre CMD (invite de commande) en tant
qu'administrateur, sous Windows 7 / bouton démarrer / accessoires /
un clic droit sur la commande "invite de commande" et tu appelles la
commande du menu contextuel "exécuter en tant qu'administrateur"
D )
Dans la fenêtre de l'invite de commande, tu tapes:
Regsvr32 /u c:\Windows\System32\MonFichier.dll
(au besoin, tu adaptes le chemin et le nom de la dll.)
E )
Tu devrais obtenir un petit message comme quoi la commande a réussi.
F )
Ouvre Excel et ledit fichier dont la dll a été dé-enregistré.
Si tu essaies d'exécuter le code, une erreur devrait être générée.
G ) Si tu places mon code dans le ThisWorkbook du classeur, cela devrait régler le
problème.
Attention, certaines DLL ne peuvent pas être dé-enregistré avec la ligne de commande
Regsvr32 /u ..... C'est le cas en autre pour la Dll RefEdit.dll pour le contrôle RefEdit.
Si tu essaies, tu obtiendras ce message d'erreur:
'-----------------------
Le module "c:\Program Files\Microsoft Office\Office14\RefEdit.dll"
a été chargé, mais le point d'entrée dIllnstal est introuvable.
Vérifier que "c:\Program Files\Microsoft Office\Office14\RefEdit.dll"
est un fichier DLL ou OCX valide, puis réessayer.
'-----------------------
Dans ces cas, ce message d'erreur lors de l'exécution de la ligne de code est du au fait
puisqu'elle n'a pas de point d'entrée 'DllUnregisterServer'. On peut seulement l'enregistrer
en utilisant la commande Regsvr32 "c:\....\RefEdit.dll"
Pour plus d'informations, je suppose qu'il doit bien y avoir des gurus de Windows susceptible
d'apporter des précisions sur les forums Windows...
En VBA, on pourrait utiliser ce code :
P.S. Tu adaptes le chemin et le nom de la référence "RefEdit.dll"
même en VBA, on ne peut pas dé-enregistré la référence "RefEdit.dll"
dans cette ligne, il y a beaucoup de guillemets :
Source = """C:\Program Files\Microsoft Office\Office14\""""RefEdit.dll"
La cause : la présence d'espace dans le chemin de la DLL
(Soius Windows 8 64bits et Excel 2010)
'--------------------------------
Sub test()
Dim Source As String
Source = """C:\Program Files\Microsoft Office\Office14\""""RefEdit.dll"
commande = Environ$("comspec") & " /c c:\Windows\syswow64\Regsvr32.exe /u """ & Source & """"
Shell "runas /user:MichD" & commande, 0
End Sub
'--------------------------------
Voilà!
Un week-end de 3 jours, cela devrait te laisser suffisamment de temps
pour effectuer tous les tests que tu désires ou tu me crois sans tester!
Et pour mardi, tu nous trouves la manière de dé-enregistrer manuellement
cette DLL (refedit.dll)
Tu peux te faire aider par ceci:
'-------------------------------------------------
à cette adresse :
RegDllView - Register dll/ocx/exe utility
Il y a un freeware pour faire ce travail pour toutes les versions de Windows 32 ou 64 bits
RegDllView v1.45 - View registered dll/ocx/exe files on your system and Register dll files from Explorer
-------------------------------------------------
J'ai tenté de dé-enregistrer "RefEdit.dll" de la base de registre avec ce
petit utilitaire et cela n'a pas davantage fonctionner!
;-))