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 lecture recordset [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut Problème lecture recordset
    Bonjour,

    Je cherche à récupérer des enregistrements d'une bd Oracle et les recopier dans une feuille Excel.

    Ma boucle ne fonctionne pas si je ne ramène pas d'enregistrement.

    Je ne saisi pas pourquoi.

    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
    connString = "DSN=TOP;Uid=TOPMAN01;Pwd=TOPMAN01"
       conn.Open connString
     
       rsRecords.CursorLocation = adUseServer
     
       rsRecords.Open "select a.num_achat,al.id_achat_ligne,art.id_article,al.num_ligne,art.reference,art.designation,nvl(sf.libelle, ' ') as sous_famille,nvl(f.libelle, ' ') as famille,al.tot_cmde,u.libelle,u2.libelle as unite_achat,nvl(cv.ratio_u1_u2,1), " _
       & " Case u.libelle when u2.libelle then al.tot_cmde when 'Millimètre' then (al.tot_cmde/1000) * nvl(cv.ratio_u1_u2,1) else al.tot_cmde * nvl(cv.ratio_u1_u2,1) end as qte_achat, nvl(rs.reference, ' ') as ref_externe from t_achat a inner join t_fst f " _
       & " on a.id_fst = f.id_fst inner join t_achat_ligne al on a.id_achat = al.id_achat inner join t_article art on art.id_article = al.id_article inner join topsys.unit u on al.id_unite_tot_cmde = u.id_unit inner join topsys.unit u2 on art.id_unite_achat = u2.id_unit " _
       & " left outer join topsys.unit_abaque ab on art.id_unite_abaque = ab.id_unit_abaque left outer join topsys.unit_conv cv on ab.id_unit_abaque = cv.id_unit_abaque left outer join toperp.t_sousfamille sf on art.id_sousfamille = sf.id_sousfamille left outer join toperp.t_famille f " _
       & " on art.id_famille = f.id_famille left outer join toppdm.reference_supply rs on (art.id_article = nvl(rs.id_erp_item,0) and nvl(rs.id_from,0) = f.id_fst) where  nvl(art.id_groupe_article, 0) = 3 and al.id_article <> 43057 and f.raison_sociale = '" & Cfour.Value & "' and a.date_creation between TO_DATE('" & ddeb.Value & "','DD/MM/YYYY') and  TO_DATE('" & dfin.Value & "','DD/MM/YYYY') order by a.id_achat, al.id_achat_ligne", conn, adOpenForwardOnly, adLockReadOnly
     
     
       If conn.State = adStateOpen Then
     
         lig = num_lig_dep
     
         ' Lecture du premier enregistrement
         rsRecords.MoveFirst
         While Not rsRecords.EOF
     
                  With Worksheets("CDE")
                     .Range("A" & lig).Value = rsRecords.Fields("num_achat").Value
                     .Range("B" & lig).Value = rsRecords.Fields("num_ligne").Value
                     .Range("C" & lig).Value = rsRecords.Fields("reference").Value
                     .Range("D" & lig).Value = rsRecords.Fields("designation").Value
                     .Range("E" & lig).Value = rsRecords.Fields("famille").Value
                     .Range("F" & lig).Value = rsRecords.Fields("sous_famille").Value
                     .Range("G" & lig).Value = rsRecords.Fields("tot_cmde").Value
                     .Range("H" & lig).Value = rsRecords.Fields("libelle").Value
                     .Range("I" & lig).Value = rsRecords.Fields("unite_achat").Value
                     .Range("J" & lig).Value = rsRecords.Fields("qte_achat").Value
                  End With
     
                  lig = lig + 1
     
                  ' Lecture de l'enregistrement suivant
                  rsRecords.MoveNext
         Wend    
         Else
         MsgBox "Problème de connexion à la base de données."
       End If
     
       rsRecords.Close
       Set rsRecords = Nothing
       conn.Close
       Set conn = Nothing
    Julien.

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par juju05 Voir le message
    Ma boucle ne fonctionne pas si je ne ramène pas d'enregistrement.
    C'est-à-dire?
    Message d'erreur?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut
    Sur le movefirst, si le recordset ne ramène pas d'enregistrement, j'ai un message d'erreur.
    Je ne l'ai pas sous les yeux. Je pourrai le dire Lundi.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Dans ce cas, c'est simple...
    Ne fais pas de MoveFirst.

    Le premier record renvoyé dans un RecordSet est... le premier.

    Si, suite à un mauvais choix de connexion le MoveFirst est indispensable, il reste une solution.
    Encadrer tout ce qui a trait au traitement du RecordSet d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not rsRecords.EOF Then
     
    End If
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut
    J'ai mis un test sur la fin de recordset avant le movefirst. Cela fonctionne très bien !

    Merci bien.

    Bonne journée.
    Julien.

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

Discussions similaires

  1. Problème lecture recordset
    Par clickandgo dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/02/2015, 20h17
  2. problème lecture d'un recordset
    Par jujunio dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 17/09/2010, 16h43
  3. [communication série] problème lecture/écriture
    Par davinout dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 01/06/2005, 13h14
  4. Problème lecture fichier en C++
    Par cali1983 dans le forum C++
    Réponses: 17
    Dernier message: 20/05/2005, 09h36
  5. Problème lecture de nombre dans un fichier en c++
    Par knecmotet dans le forum C++
    Réponses: 1
    Dernier message: 28/10/2004, 15h48

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