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 :

Problème ADO - excel - access


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Problème ADO - excel - access
    Bonjour,

    Je suis actuellement en train d'essayer de lier une base access avec un tableur excel (le tableur me servant à calculer mes tarifs, la base access à enregistrer les prix de mes fournisseurs).

    Je me suis servi de ce tutoriel, qui semble correspondre à ce que je souhaite faire (dernière méthode, via ADO) :

    http://cafeine.developpez.com/access/tutoriel/excel/

    Seulement voilà, ça ne semble pas fonctionner chez moi, et je ne vois pas pourquoi. Je tourne en rond depuis ce we.

    L'exemple étant assez facile à rééditer, je me dis que si certains ont des connaissances sur cette question, ils verront certainement mieux que moi d'où ça vient. Le but, c'est de récupérer dans mon tableur excel, le prix d'un produit, en fonction de sa référence (passée en argument)

    J'ai une base : mabase.mdb
    Dans cette base, une table "TARIF_FOURNISSEUR", avec les champs suivants :
    Champ "REF_PRODUIT" (texte)
    Champ "PRIX_UNITE_UTILISE" (reel simple, en euro)

    J'ai également une requète qui affiche l'ensemble de tout ça, comme suggéré dans le tutoriel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TARIF_FOURNISSEUR.REF_PRODUIT, TARIF_FOURNISSEUR.PRIX_UNITE_UTILISE
    FROM TARIF_FOURNISSEUR;
    Cette requète s'appelle "qryXLSlookup"

    Dans mon tableur excel, j'ai créé un "module1", qui contient le code suivant :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Public cnx As ADODB.Connection
     
    Sub auto_open()
        ' La sub auto_open possède la propriété d'être automatiquement
        '  exécutée à l'ouverture du classeur Excel
        '  à l'identique : auto_close est exécutée sur la fermeture
        Dim strPath As String
     
        ' Seule contrainte une cellule nommée strPath
        '  doit être présente dans le classeur et
        '  renvoyer sur le chemin de l'appli
        '  en l'occurence Comptoir.mdb
        Application.Goto Reference:="StrPath"
     
        strPath = ActiveCell
     
        ' Nous testons si le fichier est accessible
        If Len(Dir(strPath)) > 0 Then
            ' Déclaration de la variable de connexion
            Set cnx = New ADODB.Connection
     
            ' Connexion à la base
            ConnectDB cnx, strPath
        Else
            MsgBox "La base n'a pas pu être trouvée" & vbCrLf & _
                    strPath & vbCrLf & _
                    "n'est pas un chemin valide.", vbCritical + vbOKOnly
        End If
     
    End Sub
     
    Sub ConnectDB(ByRef cnx As ADODB.Connection, ByVal strPath As String)
     
        'Définition du pilote de connexion
        cnx.Provider = "Microsoft.Jet.Oledb.4.0"
        'Définition de la chaîne de connexion
        cnx.ConnectionString = strPath
        'Ouverture de la base de données
        cnx.Open
     
    End Sub
     
    Public Function xretrieve(Optional ByVal Référence As String = vbNullString)
    ' Chaine de caractère : Référence du produit recherché
     
     
        Dim rec As New ADODB.Recordset
        Dim strSQL As String
     
     
        'Redaction du SQL
        strSQL = "SELECT [PRIX_UNITE_UTILISE] AS MONTANT " & _
                 "FROM [qryXLSlookup] WHERE 1=1"
     
        ' rappelons que les chaines de caractères en SQL sont à entourer de ''
        ' /!\ toute insertion de chaine dans un SQL comporte un danger pour les données
        '     nous pourrions fort bien ici contrôler le contenu pour neutraliser la
        '     la présence de mots clés placés involontairement ou par malveillance
        If Len(Référence) > 0 Then
            strSQL = strSQL & " And ([REF_PRODUIT] = '" & Référence & "')"
        End If
     
     
        Dim rst As New ADODB.Recordset
     
        rst.Open strSQL, cnx8
     
        On Error GoTo errH01
        rst.MoveFirst
     
        xretrieve = CDbl(rst("MONTANT"))
     
        rst.Close
        Set rst = Nothing
        Exit Function
     
    errH01:
        ' Nous sommes dans un tableur excel,
        '  nous ne cherchons pas à analyser les éventuelles erreurs
        '  nous rendons la main au tableur.
        Err.Clear
        xretrieve = 0
        rst.Close
        Set rst = Nothing
     
     
    End Function
    Je pense avoir suivi tous les éléments du tutoriel.
    Pourtant, dans mon tableur, les champs retournés sont avec l'inscription "#VALEUR!", comme s'il y avait un problème de variable.



    Auriez-vous une idée de l'erreur venue ?

    A titre indicatif, voici les références activées dans Excel :



    Merci de votre aide, pour ceux qui pourront m'en apporter.

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Bonjour !


    D'abord, au niveau de tes références, seule
    Microsoft Activex Data Objects 2.8 Library

    est utile dans ton cas

    ensuite, dans xretrieve, tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rst.Open strSQL, cnx8
    et moi, j'aurai plutôt parié sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rst.Open strSQL, cnx
    à priori

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Maxence HUBICHE
    Bonjour !


    D'abord, au niveau de tes références, seule
    Microsoft Activex Data Objects 2.8 Library

    est utile dans ton cas

    ensuite, dans xretrieve, tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rst.Open strSQL, cnx8
    et moi, j'aurai plutôt parié sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rst.Open strSQL, cnx
    à priori
    C'était tout à fait ça, merci.

    Pour la petite histoire, les "8", c'est une erreur assez fréquente chez moi, consécutive à un mauvais contact de mon clavier.

    Quand je reste longtemps appuyé sur une flèche, de temps en temps, un "8" vient s'intercaler, sans que je sache pourquoi. Sans doute une interférence.

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

Discussions similaires

  1. [XL-2007] Problème de fonctions dans VBA excel & Access via ADO
    Par Djohn92 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/06/2015, 18h35
  2. [AC-2003] Problème hyperlink excel access
    Par sharivary dans le forum Access
    Réponses: 2
    Dernier message: 12/03/2014, 14h52
  3. [XL-2007] Problème connexion Excel-Access
    Par Sonilight dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/02/2012, 19h59
  4. Problème communication Excel-Access
    Par apriliaman dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/06/2008, 21h33
  5. [Visual C++] Problème ADO Access violation
    Par irnbru dans le forum MFC
    Réponses: 2
    Dernier message: 24/10/2005, 11h46

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