Activer des références

GeoTrouvePas

XLDnaute Impliqué
Bonjour tout le monde.

Je finalise la plus grosse application Excel que j'ai jamais conçu et je me trouve face à un problème de taille.

Je me rend compte que certaines fonctions (Format, Date$, Chr...) ne fonctionnent pas sur d'autres postes que le mien (Bibliothèque absente). Pas de panique, je farfouille sur le net et je trouve moyen d'activer ces bibliothèques au démarrage. Seulement je ne suis pas sur que ces bibliothèques soient présentes sur tous les postes. J'ai donc récupéré tous les fichiers (dll, tlb, ocx) relatifs à ces bibliothèques pour les placer sur le réseau. Je crée mon répertoire "H:\Références", j'y met toutes mes bibliothèques et je place la procédure suivante au démarrage de mon application :

Code:
Sub ActiverReferences()

  Dim Path As String
  Application.DisplayAlerts = False
  With ThisWorkbook.VBProject.References
    .AddFromFile Path & "H:\Références\FM20.DLL"
    .AddFromFile Path & "H:\Références\MSCOMCTL.OCX"
    .AddFromFile Path & "H:\Références\MSCAL.OCX"
    .AddFromFile Path & "H:\Références\FPDTC.DLL"
    .AddFromFile Path & "H:\Références\MSCOMCT2.OCX"
    .AddFromFile Path & "H:\Références\scrrun.dll"
    .AddFromFile Path & "H:\Références\msado21.tlb"
  End With
  Application.DisplayAlerts = True

End Sub

Mais voilà, ça aurait été trop beau que ça marche aussi bien.

Je me retrouve avec les bibliothèques "Microsoft Calendar Control 8.0" et "Microsoft Windows Common Controls-2 6.0 (SP6)" qui ne fonctionnent toujours pas.

Quelqu'un aurait une diée sur la façon de résoudre ce problème ?

J'avoue que là ça atteind un niveau que je ne maîtrise plus du tout.

Je remercie par avance ceux qui auront pris le temps d'y réfléchir et je souhaite, par avance, un très bon week end à tout le monde !!!

Edit :

Ce qui me pose le plus de problème en fait, c'est que cela m'empèche d'exécuter cette procédure qui permet de supprimer le cadre autour des userform :

Code:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

Private Sub UserForm_Initialize()
    
    Dim hwnd As Long
    hwnd = FindWindow(vbNullString, Me.Caption)
    'Style = GetWindowLong(hwnd, -16) And Not &HC00000
    'SetWindowLong hwnd, -16, Style
    DrawMenuBar hwnd

End Sub

C'est pourtant du plus bel effet sur les pages de chargement.

Edit n°2 : Une grosse faute d'orthographe qui pique les yeux :eek:
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Activer des références

Bonjour GeoTrouvePas,

Si Format, Date, Chr... ne fonctionnent pas sur un poste c'est trés mauvais signe car ce sont des fonctions de base de VBA...

Sur le poste en question, il faudrait ouvrir ton projet et aller voir dans les Références s'il n'y a pas de soucis sur une référence quelconque (marqué MANQUANT)
si c'est le cas et que cette référence n'est pas utile à ton projet, décoche simplement cette référence, le code devrait tourner ensuite
 

GeoTrouvePas

XLDnaute Impliqué
Re : Activer des références

Merci pour ta réponse Tototiti !

Il me semblait bien que ces fonctions n'avaient rien d'extraordinaire et j'étais bien étonné qu'elles ne fonctionnent pas. J'ai toute fois remédié à ce problème en rajoutant "vba." devant chacune d'elles et ça fonctionne très bien.

Concernant les références manquantes, j'en ai effectivement deux autres qui apparemment n'existent pas sur les autres postes de ma boîte (voir image ci - jointe).

Saurais tu me dire comment remédier à ce problème ?

Merci d'avance
 

Pièces jointes

  • moz-screenshot.jpg
    moz-screenshot.jpg
    31 KB · Affichages: 171

Cousinhub

XLDnaute Barbatruc
Re : Activer des références

Bonjour,

Une procédure de Frédéric Sigonneau :

Code:
Sub RemoveBrokenRefs(Wbk As Workbook)
Dim Ref As Object, Refs As Object
  
  Set Refs = Wbk.VBProject.References
  For Each Ref In Refs
    If Ref.IsBroken = True Then
      Refs.Remove Refs.Item(Ref.Name)
    End If
  Next Ref
  
End Sub 'fs

Sub TestBrokRefs()
  RemoveBrokenRefs ThisWorkbook 'par exemple
End Sub

A la place du TestBrokRefs, tu peux mettre la ligne :

Code:
RemoveBrokenRefs ThisWorkbook

Dans l'Open...

Bonne journée
 

Cousinhub

XLDnaute Barbatruc
Re : Activer des références

Re-,

Ce code ne fait que supprimer les références "MANQUANTES"

Le plus sûr moyen de le savoir, est de faire un essai...

Sinon, il existe un autre code, pour essayer de rajouter ces références, de Frédéric Signonneau également :

Code:
Sub AddMissingRefs()
'examine les références d'un projet, repère celles qui
'sont déclarées manquantes et essaye de les réinstaller
'à tester
Dim LesRefs As Object, i&, Msg$, Cpt&, Rep&, Mnq&, Chemin$, Nom$

  Set LesRefs = ThisWorkbook.VBProject.References
  For i = 1 To LesRefs.Count
    With LesRefs(i)
      If .IsBroken Then
        Mnq = Mnq + 1: Chemin = .FullPath: Nom = .Name
        LesRefs.Remove LesRefs.Item(.Name)
        If Dir(Chemin) = "" Then
          Msg = "La librairie " & Nom & " est manquante et le fichier" & vbLf
          Msg = Msg & "'" & Chemin & "'" & vbLf
          Msg = Msg & "ne peut être trouvé pour l'installer."
          MsgBox Msg, vbCritical
          Cpt = Cpt + 1
        Else
          LesRefs.AddFromFile Chemin
          Rep = Rep + 1
        End If
      End If
    End With
  Next i
  
  If Mnq > 0 Then
    If Cpt > 0 Then Msg = Cpt & " référence(s) toujours manquante(s)"
    If Rep > 0 Then Msg = Msg & Rep & "référence(s) réinstallée(s)"
  End If
  
End Sub 'fs

Je te laisse tester...
 

GeoTrouvePas

XLDnaute Impliqué
Re : Activer des références

Bon en me relisant, c'est vrai que je n'ai pas forcément été très explicite, désolé. En tout cas merci pour tes procédures bhbh, cela va bien me servir pour le ménage ^^.

En fait mon plus gros soucis, c'est que j'ai la procédure suivante qui ne veut pas fonctionner et impossible de trouver la bibliothèque dont elle se sert (j'ai bien essayé de les décocher / cocher chacunes leur tour mais vba se comporte bizarrement (un coup ça marche, un coup ça marche pas)) :

Code:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

Private Sub UserForm_Initialize()
    
    Dim hwnd As Long
    hwnd = FindWindow(vbNullString, Me.Caption)
    [COLOR="Red"]Style = GetWindowLong(hwnd, -16) And Not &HC00000
    SetWindowLong hwnd, -16, Style[/COLOR]
    DrawMenuBar hwnd

End Sub

Le code bloque sur les deux lignes en rouge en me disant que la bibliothèque est absente (à noter que je ne sais même pas en quoi déclarer la variable "style").

Comme je le disais plus haut, cette procédure n'est pas vitale pour mon application mais niveau présentation ça assure quand même pas mal.
 
Dernière édition:

GeoTrouvePas

XLDnaute Impliqué
Re : Activer des références

STOOOOOOOOOOOOPPPPPPPPPPPPPPP !!!!!!!!!!!!!!!!

Arrétez de réfléchir. Ca marche très bien en fait ! C'est juste que le bonhomme qui lance la macro (moi en l'occurence) est un peu (beaucoup ?) débile quand il s'y met. Il s'est juste trompé dans le chemin des références.

Désolé de vous avoir fait perdre du temps. Je sors discrètement par la petite porte.......

Bonne journée à tous !
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 938
Membres
103 988
dernier inscrit
Feonix