IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Référence marquée "manquante" sur un poste: résolution en macro? [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut Référence marquée "manquante" sur un poste: résolution en macro?
    Bonjour à tous,

    Dans un module que j'ai créé, j'utilise plusieurs références, en l’occurrence ceux-ci:



    Donc là c'est un screenshot depuis lequel ça bug. Une référence est marquée manquante, et du coup il m'est impossible d'exécuter la macro. J'ai tenté d'utiliser divers macros afin de résoudre le problème (y compris trouvés sur le forum), mais le code de fix ne s'exécute pas du tout étant donné que le blocage se fait dès que l'on tente d'exécuter le module:



    Sur les autres posts le code marche pourtant très bien.

    Voici le code utilisé pour tenter de résoudre le souci, mais qui ne fonctionne pas car il ne s'exécute pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    NbreRef = ThisWorkbook.VBProject.References.Count
     
    For i = 1 To NbreRef
     
        If ThisWorkbook.VBProject.References(i).IsBroken Then
     
            Debug.Print ThisWorkbook.VBProject.References(i)
            ThisWorkbook.VBProject.References.Remove     ThisWorkbook.VBProject.References(i)
     
        End If
     
    Next i
    NB: Si je décoche la référence manquante ça fonctionne bien.

    Merci à vous!

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 926
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 926
    Par défaut
    Salut
    Dans ta boucle il t'ai possible de tester si les références sont en bon état ou pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ThisWorkbook.VBProject.References(i).IsBroken then 'la reference ne fonctionne pas
    J’espère que cela t'aidera.

    Par contre 2 remarques, si la référence est marquée manquante sur un poste c'est que le fichier (Dll par exemple) est manquant sur le poste en question, essai de voir pour le rajouter si tu as les droits
    .
    Tu dis que si tu retires cette référence tout fonctionne bien, pourquoi ne pas carrément la retirer du fichier que tu diffuses?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 206
    Par défaut
    Il te manque un fichier DLL.
    Apparemment c'est Comctl32.dll

    Tu peux télécharger la librairie ici.

    Mais si ça fonctionne sans, pourquoi vouloir la référencer?

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut
    Coucou,

    Le souci c'est que si je le décoche sur ce poste et enregistre, il sera recoché après reboot, donc le décochage devra être fait à chaque boot, c'est pas difficile pour moi, mais pour les personnes du service qui ne savent même pas ce qu'est VBA ça peut poser problème.

    Sinon Qwazerty je l'ai bien mise cette condition dans mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If ThisWorkbook.VBProject.References(i).IsBroken Then
     
            Debug.Print ThisWorkbook.VBProject.References(i)
            ThisWorkbook.VBProject.References.Remove     ThisWorkbook.VBProject.References(i)
     
        End If
    Le souci c'est que le module ne se compile pas à cause de ça, du coup je ne peux pas exécuter la correction

    Je vais tester d'ajouter le .dll, mais par contre il y a aussi un souci à ce niveau, car ça marchera sur le poste à problème, mais rien ne dit que dans 6 mois il ne manquera pas la même dll ou une autre sur un autre poste et du coup ils seront bloqués (car je suis en stage, je pars dans un mois et demi), j'aurais voulu automatiser la résolution d'éventuels bugs pour pas qu'ils aient de soucis.

    Merci en tous cas!

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut
    Update: J'ai tenté d'installer la dll que tu m'as fourni, mais ça n'a pas fonctionné (rien changé), j'ai regardé le chemin de la référence, et ça donnait sur le fichier "mscomtc2.osx", j'ai aussi tenté, mais pareil ça n'a rien changé toujours le bug de référence manquante.

    (Je les ai mis dans C:\WINDOWS\System32, où ils étaient déjà présents, je les ai donc remplacés)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 206
    Par défaut
    J'avais eu le même soucis . Pour palier au problème, j'avais ajouté un dossier contenant les références nécessaires à l'application, dans le même répertoire que le fichier. A chaque démarrage de l'appli, je teste s'il ne manque pas de références, si c'est le cas, je les charge.

    Voilà le code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Public Sub verifReferences()
     
        Dim arrRef(5) As String
        Dim ref As Reference
        Dim blnExit As Boolean
        Dim strPath As String
        Dim i As Integer
     
        arrRef(0) = "X.DLL"
        ...
        arrRef(5) = "Y.DLL"
     
     
     
        For i = 0 To 5
            blnExist = False
            For Each ref In ThisWorkbook.VBProject.References
     
                If Right(ref.FullPath, Len(arrRef(i))) = arrRef(i) Then
                    blnExist = True
                End If
            Next ref
     
            If Not blnExist Then
                strPath = ThisWorkbook.Path & "\Sources\Utilitaires\" & arrRef(i)
                If Dir(strPath) = "" Then GoTo Err_File
                 ThisWorkbook.VBProject.References.AddFromFile strPath
            End If
        Next i
        Exit Sub
    Err_File:
            MsgBox "Une référence est manquante, certaines fonctionnalités de l'application risquent de ne pas être disponibles", vbCritical
     
    End Sub
    C'est un solution, peut-être pas la meilleur, mais s'en est une.

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut
    Merci je vais tester ça je vous tiens au courant!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 206
    Par défaut
    Message précédent en réponse à celui de 13:33.

    ça donnait sur le fichier "mscomtc2.osx"
    Je me suis peut-être (sans doute ) trompé.

    Du coup, le ficher mscomtc2.osx est-il présent sur ton disque?

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut
    Oui il est bien présent, je l'ai écrasé par un dl sur le net, mais ça ne fonctionnait toujours pas, je teste ta deuxième solution, ça a bien régénéré la référence donc elle n'est plus marquée manquante, je reboot pour voir si ça reste ou pas.

    Edit: Ta solution fonctionne parfaitement! La référence était toujours ok après reboot!

    Le code adapté au souci, si quelqu'un en a l'utilité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Public Sub verifReferences()
     
        Dim arrRef As String
        Dim blnExit As Boolean
        Dim strPath As String
     
        arrRef = "MSCOMCT2.OCX"
     
     
     
        'For i = 0 To 5
     
            blnExist = False
     
            For Each ref In ThisWorkbook.VBProject.References
                Debug.Print ref.Name & " " & arrRef
                If ref.Name = "MSComCtl2" Then
                    blnExist = True
                End If
     
            Next ref
     
            If Not blnExist Then
     
                strPath = ThisWorkbook.Path
                If Dir(strPath) = "" Then GoTo Err_File
                References.AddFromFile strPath
     
            End If
     
        Exit Sub
     
    Err_File:
            MsgBox "Une référence est manquante, certaines fonctionnalités de l'application risquent de ne pas être disponibles", vbCritical
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2000] Référence manquante sur certains postes
    Par moustika dans le forum Access
    Réponses: 5
    Dernier message: 08/04/2011, 22h46
  2. [Quote] DVP quoté sur Bashfr
    Par Skyounet dans le forum La taverne du Club : Humour et divers
    Réponses: 16
    Dernier message: 26/09/2006, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo