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 :

détection bibliotheque manquante


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut détection bibliotheque manquante
    Bonsoir tout le monde,

    Je voulais simplement savoir si en VBA il était possible de détecter à l'ouverture d'un fichier excel si des bibliotheques sont manquantes.

    A l'ouverture de mon classeur je vérifie si une connexion à un serveur sql existe et selon le cas je traite différemment mon fichier.

    J'utilise donc le composant ADO.
    Le problème est que si j'ouvre ce fichier sur un ordinateur qui ne possède pas ce composant j'ai forcement une erreur de compilation.

    Est il possible justement de vérifier si le composant ADO est présent à l'ouverture et afficher ainsi un message du genre "Veuillez installer ADO...." ?

    Merci pour vos réponses

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonsoir,

    Cette procédure ajoute la référence à ADO si elle n'est pas déja présente.

    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
     
    Private Sub Workbook_Open()
        Dim Ref, AdoIsInstalled As Boolean
        Const RefName As String = "ADODB"
        With ThisWorkbook.VBProject
            For Each Ref In .References
                If Ref.Name = RefName Then
                    AdoIsInstalled = True
                    Exit For
                End If
            Next
            If AdoIsInstalled Then
                MsgBox "Version installée: " & Ref.Name & " " & Ref.Major & "." & Ref.Minor
            Else
                .References.AddFromFile "C:\Program Files\Fichiers communs\System\ado\msado15.dll"
                'Ou
                '.References.AddFromGuid "{2A75196C-D9EB-4129-B803-931327F72D5C}", 2, 8
            End If
        End With
    End Sub
    Cela ne provoque pas d'erreur de compilation à condition qu'il n y ait aucune déclaration de variable d'un type d'objet fourni par ADO dans la section déclaration du module ThisWorkbook ou dans la procédure WorkBook_Open.

    Cordialement,

    Tirex28/

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Merci pour ta réponse.

    La procédure ne fonctionne pas chez moi
    Je pense que Ref doit être d'un autre type que boolean.

    J'ai continué à chercher et apparemment Ref devrait être du type Reference hors visual basic editor m'indique que ce type n'existe pas.
    J'utilise excel 2003

    quelqu'un a une idée ?

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Pour que ca marche j'ai dû enlever "Option Explicit" sur ma feuille ainsi que la déclaration de la variable ref . Si quelqu'un a cependant l'explication du pourquoi le type "Reference" n'exite pas je suis preneur

    du coup ma fonction devient :

    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
     
    Private Function verification_ADO() As Boolean
     
       ' Dim ref As Reference
        Dim AdoIsInstalled As Boolean
        Const refName AS String = "ADODB"
     
        AdoIsInstalled = False
     
        For Each ref In ThisWorkbook.VBProject.References
             If ref.Name = refName Then
                 AdoInstalled = True
                 Exit For
             End If
        Next ref
     
        verification_ADO = AdoIsInstalled
     
    End Function

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Citation Envoyé par mikedavem
    Je pense que Ref doit être d'un autre type que boolean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim Ref, AdoIsInstalled As Boolean
    En l'occurence Ref est de type Variant puisque la déclaration du type n'est pas explicite.

    Citation Envoyé par mikedavem
    Ref devrait être du type Reference hors visual basic editor m'indique que ce type n'existe pas.
    Ce type existe bel et bien mais pour pouvoir l'utiliser il faut aller dans Outils>References et cocher Visual Basic for Application Extensibility 5.3

    Citation Envoyé par mikedavem
    Pour que ca marche j'ai dû enlever "Option Explicit" sur ma feuille ainsi que la déclaration de la variable ref
    Utilisant egalement Excel 2003, ca fonctionne tres bien avec Option Explicit et une variable de type Variant. Si tu veux absolument déclarer un type Reference il faut ajouter la reférence à VBA ext 5.3 comme indiqué ci-dessus.

    Cordialement,

    Tirex28/

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Effectivement ca marche bcp mieux en ayant coché la référence que tu as indiqué

    Merci

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

Discussions similaires

  1. Détection de données manquantes
    Par thirionet.b dans le forum SAS Base
    Réponses: 3
    Dernier message: 12/01/2009, 10h40
  2. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  3. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 19h32
  4. Détection de 2 touches appuyées
    Par cyrose dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 16h25
  5. [Kylix] bibliotheque libtwin32.so
    Par mic006 dans le forum EDI
    Réponses: 1
    Dernier message: 08/05/2002, 01h36

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