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 :

access > excel: xretrieve s'arrete à rst.Open strSQL, cnx


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut access > excel: xretrieve s'arrete à rst.Open strSQL, cnx
    Bonjour à tous,

    J'ai lu le tuto de connexion entre access et excel et j'en ai repris le code.

    J'ai une base access et j'ai un fichier excel dans lequel je veux récupérer des résultats à partir d'une requete dans le code vba.

    Il y a quelques mois, j'étais sous 2003, et ça fonctionnait (pas tout mon code lol, mais la connexion se faisait et je récupérais des chiffres dans excel. Aujourd'hui, je suis sous 2010, j'ai touché à mon code et je ne récupère plus rien. Pourtant, le verrou de la base access apparait bien, ce qui prouve qu'il y a une connexion entre excel et access.

    Le code, avec l'endroit où ça s'arrete (sans message d'erreur) :
    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
     
    Public Function xRetrieve(Optional ByVal whatparam As String = vbNullString, _
                              Optional ByVal Mois As Integer = 0)
        Dim rec As New ADODB.Recordset
        Dim strSQL As String
        strSQL = "SELECT countparam AS COMPTE_PARAM " & _
                 "FROM [QueryEtat] WHERE 1=1 "
        If Len(whatparam) > 0 Then
            strSQL = strSQL & " and ([what] = '" & whatparam & "')"
        End If
        If Mois > 0 Then
            strSQL = strSQL & " And ([moisparamG] = " & Mois & ");"
        End If
        Dim rst As New ADODB.Recordset
        rst.Open strSQL, cnx 	'en pas à pas, ça s'arrete ici, rien ne se passe, meme pas un message d'erreur
        On Error GoTo errH01
        rst.MoveFirst
        xRetrieve = CDbl(rst("COMPTE_PARAM"))
        rst.Close
        Set rst = Nothing
        Exit Function
    errH01:
        Err.Clear
        xRetrieve = 0
        rst.Close
        Set rst = Nothing
    End Function

    Merci de votre aide

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    En première lecture je me demande ou est instancié la variable cnx et à quoi sert la variable rec.
    Peux tu m'éclairer ?

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    ouh là...
    alors le vba je l'utilise en prenant des bouts de code à droite à gauche. dans le cas présent également.
    j'ai pris le tuto de caféine ici et j'ai tout coper coller, sans forcément comprendre

    cnx est déclarée public en haut du code et défini dans auto_open du tutoriel (moi j'ai mis une sub appelée CheckDB mais tout le reste est pareil).

    et rec, je me suis posé la meme question que toi...

    Code complet:
    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
    Public cnx As ADODB.Connection
     
    Public Sub CheckDB()
        Dim strPath As String
        Application.GoTo Reference:="StrPath"
        strPath = ActiveCell
        If Len(Dir(strPath)) > 0 Then
            Set cnx = New ADODB.Connection
            ConnectDB cnx, strPath
            'MsgBox "OK"
        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)
        cnx.Provider = "Microsoft.Jet.Oledb.4.0"
        cnx.ConnectionString = strPath
        cnx.Open
    End Sub
     
    Public Function xRetrieve(Optional ByVal whatparam As String = vbNullString, _
                              Optional ByVal Mois As Integer = 0)
        Dim rec As New ADODB.Recordset
        Dim strSQL As String
        strSQL = "SELECT countparam AS COMPTE_param " & _
                 "FROM [QueryEtat] WHERE 1=1 "
        If Len(whatparam) > 0 Then
            strSQL = strSQL & " and ([what] = '" & whatparam & "')"
        End If
        If Mois > 0 Then
            strSQL = strSQL & " And ([moisparamG] = " & Mois & ");"
        End If
        Dim rst As New ADODB.Recordset
        rst.Open strSQL, cnx
        On Error GoTo errH01
        rst.MoveFirst
        xRetrieve = CDbl(rst("COMPTE_param"))
        rst.Close
        Set rst = Nothing
        Exit Function
    errH01:
        Err.Clear
        xRetrieve = 0
        rst.Close
        Set rst = Nothing
    End Function

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Dans ton code, je ne retrouve pas l'appel à la procédure CheckDB.

    Si tu ne l'appelles pas, ta variable cnx ne fonctionnera pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim rst As New ADODB.Recordset
    Call CheckDB
    rst.Open strSQL, cnx

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    C'est de ma faute, j'ai oublié de mettre une partie du code.

    En fait, je me rappelle plus pourquoi j'ai fait ça, mais la sub auto open du tuto, je l'ai divisée en 2 parties:
    1. dans ThisWorkbook, le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public cnx As ADODB.Connection
     
    Private Sub Workbook_Open()
        CheckDB
    End Sub
    2. dans Module1, le code du post précédent

    En écrivant ce message, je me rends compte que cnx est déclarée Public dans ThisWorkbook et dans Module1, il doit surement y en avoir un qui sert à rien...

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    En écrivant ce message, je me rends compte que cnx est déclarée Public dans ThisWorkbook et dans Module1, il doit surement y en avoir un qui sert à rien...
    Ca ne doit arranger les choses

    Personnellement, je supprimerais celui de thisworkbook

Discussions similaires

  1. Export de données d'Access vers Excel
    Par ROPERS dans le forum Access
    Réponses: 4
    Dernier message: 11/10/2005, 17h44
  2. Liaison Office Access vers Excel
    Par PDR dans le forum Access
    Réponses: 4
    Dernier message: 04/10/2005, 10h20
  3. Renseigner un formulaire Access depuis Excel
    Par vciofolo dans le forum Access
    Réponses: 6
    Dernier message: 30/09/2005, 11h12
  4. comment afficher des données Access sur Excel ??
    Par merlubreizh dans le forum Access
    Réponses: 9
    Dernier message: 14/09/2005, 14h38
  5. Access vers excel
    Par tiopan dans le forum Access
    Réponses: 6
    Dernier message: 05/12/2003, 08h43

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