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 :

VBA Excel: Perte de la connexionString (ODBC)


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Points : 168
    Points
    168
    Par défaut VBA Excel: Perte de la connexionString (ODBC)
    Bonjour,

    tout d'abord merci par avance aux propositions que vous pourrez faire à ce sujet.

    Je suis complètement bloqué du à l'erreur Excel suivante :

    [Microsoft][Pilote ODBC Excel] La connexion permettant de visualiser votre feuille de calcul Microsoft Excel liée est perdue

    pour ce faire j'ai une feuille Excel nommée DATAPLUS

    au lancement du traitement VBA, j'ai une connexion ADODB comme montré ci-dessous


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set g_o_cnx = New ADODB.Connection
     
        'on crée une connection ADODB sur ce document Excel
        With g_o_cnx
            .Provider = "MSDASQL"
            .ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
                "DBQ=" & ThisWorkbook.FullName & ";ReadOnly=False;HDR=NO;IMEX=1;"
     
            .Open
        End With
    La connexion semble fonctionné parfaitement. ?g_o_cnx --> result : Provider=MSDASQL.1;

    Puis je défini un premier recordset qui m'avait déjà posé bien du soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Set l_o_rsDATA = New ADODB.Recordset
    l_o_SQLrsDATA = "SELECT DATAP.IDENT, DATAP.LADATE, DATAP.LIBELLE, DATAP.QUANTITE, DATAP.REF From [DATAPLUS$] as DATAP"
    l_o_rsDATA .ActiveConnection = g_o_cnx
    l_o_rsDATA .CursorLocation = adUseClient
    l_o_rsDATA .Open l_o_SQLrsDATA , g_o_cnx, adOpenDynamic, adLockOptimistic
    l_o_rsDATA .Sort = "LADATEASC"
    Cette "Requete" semble bien fonctionnée.

    Puis j'appelle ma fonction DonneesDetail avec en param mon recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For l_i_num = 1 To l_i_nbTotalNum
          DonneesDetail l_i_num , l_o_rsDATA
        ....
    Next l_i_num
    Dans cette procédure, j'effectue un filtre sur ce recordset puis créé un NOUVEAU recordset comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    p_o_rsDATA.Filter = "IDENT= " & NzLng(l_s_num) 'filtre le recorset en param sur l'identifiant en cours
       If Not p_o_rsDATA.EOF Then
           p_o_rsDATA.MoveFirst
           While Not (p_o_rsDATA.EOF)
                 .....
                 .....
     
                 Set l_o_rsref = New ADODB.Recordset 'on définit notre nouveau recordset
     
                 'ci dessous la requete qui ne fonctionne pas
                 Set l_o_rsref = g_o_cnx.Execute("SELECT count(*) as nb From [DATAPLUS$] as DATAP WHERE DATAP.IDENT = " & MaVal & " AND MONTH(DATAP.LADATE)= 3 AND YEAR(DATAP.LADATE)= 2017 GROUP BY DATAP.REF")
    Lorsque j'essaie d’exécuter cette ligne j'obtiens l'erreur citée plus haut.

    A savoir que cette requête fonctionne uniquement sans clause where ni group by.

    Merci par avance à tous ceux qui tenteront de m'aider.

    Cordialement,

    Dorian

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjout,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     with CreateObject("ADODB.Connection")
    .Open "Provider = Microsoft.ACE.OLEDB.12.0;data source="& ThisWorkbook.FullName & ";extended properties=""Excel 12.0;HDR=Yes;IMEX=1;"""
    set Rs=.excute("SELECT DATAP.IDENT, DATAP.LADATE, DATAP.LIBELLE, DATAP.QUANTITE, DATAP.REF From [DATAPLUS$] as DATAP order by LADATEASC")
    Set l_o_rsref = .Execute("SELECT count(*) as nb From [DATAPLUS$] as DATAP WHERE DATAP.IDENT = " & MaVal & " AND Format(DATAP.LADATE,'mm-yy')= '03-2017' GROUP BY DATAP.RE"
    Dernière modification par Invité ; 11/04/2017 à 19h12.

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Points : 168
    Points
    168
    Par défaut
    bonjour dysorthographie et merci pour cette proposition,

    malheureusement, je viens d'essayé sur la première requête (recordset) et sans succès,
    cette même requête si on lui enlève le Order By fonctionne? c'est assez incompréhensible.

    Par ailleurs le code ci-dessous fonctionne sur la première requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Set l_o_rsDATA = New ADODB.Recordset
    l_o_SQLrsDATA = "SELECT DATAP.IDENT, DATAP.LADATE, DATAP.LIBELLE, DATAP.QUANTITE, DATAP.REF From [DATAPLUS$] as DATAP"
    l_o_rsDATA .ActiveConnection = g_o_cnx
    l_o_rsDATA .CursorLocation = adUseClient
    l_o_rsDATA .Open l_o_SQLrsDATA , g_o_cnx, adOpenDynamic, adLockOptimistic
    l_o_rsDATA .Sort = "LADATE ASC"
    Mais sur la requete suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set l_o_rsref = g_o_cnx.Execute("SELECT count(*) as nb From [DATAPLUS$] as DATAP WHERE DATAP.IDENT = " & MaVal & " AND MONTH(DATAP.LADATE)= 3 AND YEAR(DATAP.LADATE)= 2017 GROUP BY DATAP.REF")
    impossible de le faire fonctionné...

    Si quelqu'un a une idée.

    Merci par avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu peux fournir un fichier Excel en bidonnant le données confidentielles? (Au format XLSX)!

    Vérifie la présence de tous tes entêtes et d'éventuel espace!
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 12/04/2017 à 09h59.

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Points : 168
    Points
    168
    Par défaut
    dysorthographie,

    Merci pour ton fichier, effectivement, il semblerait que ca fonctionne dans ce fichier. je ferai des nouveaux tests avec des données moins nombreuses.

    En cas d'echec je t'envoie un fichier propre dans la soirée.

    Merci pour ton aide.

Discussions similaires

  1. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 13h09
  2. [vba-excel] Le temps de fermeture trop court ?
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 10h03
  3. [VBA-Excel]
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/01/2005, 10h17
  4. [VBA EXCEL] Réduire/Agrandir UserForms
    Par Fench dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2003, 16h02
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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