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 :

Probleme de recordset parcourant excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 58
    Par défaut Probleme de recordset parcourant excel
    Bonsoir à tous!
    Ne me lynchez pas si c'est déjà expliqué quelque part... parceque j'ai cherché et je n'ai pas trouvé de probleme similaire...

    J'ai un probleme en essayant de récupérer les infos contenues dans un fichier excel via un recordset.
    Le recordset à systematiquement pour 1er enregistrement la deuxieme ligne du fichier excel...

    Je ne comprends pas!

    Peut etre y a t il une option par défaut qui fait sauter la première ligne?

    Merci!!

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    tu ne precises pas le type de connection utilisé

    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "Extended Properties=""Excel 8.0;HDR=Yes"""
    si HDR =No , la premiere ligne est considérée comme un enregistrement
    si HDR=Yes , la premiere ligne est considérée comme un entête


    sinon pour récupérer la 1ere ligne (l'entete) , tu peux aussi utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 To Rs.Fields.Count - 1 'boucle sur les entetes
    Debug.Print Rs.Fields(i).Name
    Next

    bonne soiree
    michel

  3. #3
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 58
    Par défaut
    Merci bcp je pense que ca va fonctionner maintenant!!!

    Je vous tiens au courant et je fais un ptit topo si ca marche!

  4. #4
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 58
    Par défaut
    Bon ca ne fonctionne pas il me dit que la base ou l'objet est en read only

    Voici le code:

    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
    Public Function Read_Excel _
             (ByVal sFile _
              As String, sheet As String) As ADODB.Recordset
     
          On Error GoTo fix_err
          Dim rs As ADODB.Recordset
          Set rs = New ADODB.Recordset
          Dim sconn As String
          Dim strsql As String
          Dim sheetName As String
     
     
     
          sheetName = CStr(sheet) + "$"
          strsql = "SELECT * FROM [" + sheetName + "]"
     
          rs.CursorLocation = adUseClient
          rs.CursorType = adOpenKeyset
          rs.LockType = adLockBatchOptimistic
     
         sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & sFile & " " & _
                "Extended Properties=""Excel 8.0;HDR=No"""
          rs.Open strsql, sconn
          Set Read_Excel = rs
          Set rs = Nothing
          Exit Function
    Il plante à l'ouverture ^^

  5. #5
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    déjà il ne vas pas être KeySet si tu le met coté client

    essayes avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    rs.CursorLocation = adUseClient 
    rs.CursorType = adOpenStatic 
    rs.LockType = adLockBatchOptimistic 
     
    sconn = "Microsoft.Jet.OLEDB.4.0;Data Source= & sFile & ";Extended Properties=Excel 8.0"
    rs.Open strsql, sconn 
    Set Read_Excel = rs 
    Set rs = Nothing

  6. #6
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 58
    Par défaut
    Ca ne fonctionne pas avec ce code...
    J'ai l'impression que c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ;Extended Properties=Excel 8.0"
    qui pose probleme...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & sFile
    Avec ce code ca fonctionne mais je récupère la deuxieme ligne comme premier enregistrement:

  7. #7
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    Quand tu dis "ca ne fonctionne pas" c'est que tu as une erreur ou que tu ne récupères rien ?

  8. #8
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 58
    Par défaut
    ah oui désolé. j'ai pas précisé!

    Donc avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sconn = "Microsoft.Jet.OLEDB.4.0;Data Source= & sFile & ";Extended Properties=Excel 8.0"
    rs.Open strsql, sconn
    Set Read_Excel = rs
    Set rs = Nothing
    Il me renvoie une erreur "Data source name Not Found and no defaut driver specified" a l'ouverture du recordset

    Avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & sFile & " " & _
                "Extended Properties=""Excel 8.0;HDR=No"""
    Il me renvoie l'erreur :" Cannot update, database or object is Read-only" a l'ouverture du recordset

    Avec celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & sFile
    Je n'ai pas d'erreur mais le premier enregistrement est la deuxième ligne de mon fichier Excel!

    Ps: question bête: dans l'extended properties (Extended Properties=""Excel 8.0") à quoi correspond le 8.0, la version d'Excel??

  9. #9
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 58
    Par défaut
    Bon forcément ... je n'avais pas mis de référence OLEDB

    En ce qui concerne ODBC, la première ligne est toujours considérée comme une ligne de titre, non pas comme une ligne de donnée (source IBM)

    J'essaie donc avec OLEDB^^

  10. #10
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 58
    Par défaut
    Bon voila ca fonctionne avec OLEDB!
    SilkyRoad avait raison mais comme je n'ai pas indiqué que j'etais en ODBC...

    Voici le code:



    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 Read_Excel _
             (ByVal sFile _
              As String, sheet As String) As ADOdb.Recordset
     
          On Error GoTo fix_err
          Dim rs As ADOdb.Recordset
          Set rs = New ADOdb.Recordset
          Dim sconn As String
          Dim strsql As String
          Dim sheetName As String
     
     
          sheetName = CStr(sheet) + "$"
          strsql = "SELECT * FROM [" + sheetName + "]"
     
          rs.CursorLocation = adUseClient
          rs.CursorType = adOpenStatic
          rs.LockType = adLockBatchOptimistic
     
          sconn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & sFile & ";" & _
          "Extended Properties=""Excel 8.0;HDR=NO;"";"
     
    'sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & sFile
          rs.Open strsql, sconn
          Set Read_Excel = rs
          Exit Function
    Maintenant le recordset retourne bien la première ligne!

    Merci à tous

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

Discussions similaires

  1. [XL-2010] Probleme recordset entre Excel et Access
    Par creal dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 16/12/2013, 21h15
  2. Probleme pour Export vers Excel "intersect"
    Par kleenex dans le forum Access
    Réponses: 4
    Dernier message: 05/01/2006, 14h54
  3. probleme de fermeture d'excel
    Par passie dans le forum Access
    Réponses: 2
    Dernier message: 08/11/2005, 19h34
  4. Problemes d'importation depuis excel
    Par KANCRENAZ dans le forum Access
    Réponses: 3
    Dernier message: 17/02/2005, 09h57
  5. probleme de recordset dans une boucle do while
    Par Shoryu dans le forum ASP
    Réponses: 18
    Dernier message: 05/07/2004, 15h30

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