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 :

lire et manipuler un recordset en vba excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut lire et manipuler un recordset en vba excel
    bonjour tout le monde

    j'ai un objet recordset rsT qui contient les resultat d'une requete, je veux mettre la taille du recordset (càd le nombre de ligne) dans une varible integer, et ensuite mettre juste quelques ligne ds mon fichier excelc'est à dire comment peut on parcourir les lignes du recordset).
    avec cette ligne du code (Range("A2").CopyFromRecordset rsT)
    il copy tout le resultat , mais je veux juste par exemple les 5 premières lignes
    merci bp, mon code est le suivant:
    (j'ai penser d'utiliser la methode getrows mais je pense c pas possible!!!!!!!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL_text= " SELECT  * FROM[" & NomFeuille & "$] '"
    Set rsT = New ADODB.Recordset
    Set rsT = cn.Execute(SQL_tersfaible)
    Range("A2").CopyFromRecordset rsT

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut autrement
    ou bien est ec que je peut utilser le rst recordset comme un tableau, et comment je peux acceder à la valeur d'une cellule donné: rst.fields(i) ça c'est pour la colonne et la ligne comment on fait???? je pense que rst.fields(i,j) n'existe pas!!!!!!!!!!!!!!!alors svp dites moi comment on peut faire?? merci par avance

  3. #3
    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
    bonjour


    Remplace simplement

    par



    bonne journée
    michel

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut merci
    et pour avoir la valeur du nombre de lignes ds le recordset???
    si je met cout(*)
    je sais qu'il me donne la valeur mais qaund j'affecte à une variable et me dit erreure type??? càd
    var = rsT.value
    sachant que j'ai utilisé count ds la requete!
    merci encore , c vrai pour la selection c bon

  5. #5
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour,

    pour obtenir le nombre de ligne, utilise cordialement

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut ça marche pas
    bonjour tout d'abord merci
    au fait je viens de l'essayer mais il me donne un résultat=-1 c bizard or il ya 250 eregistrement
    !!!je comprd pas trop le pbm merci encore

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut probleme de recourdcount
    j'ai essayé d'utiliser l'instruction count

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre = rsT.Fields(0).Value
    mais il m'affiche aussi un message d'erreur
    BOF ou EOF est égale à true!!!!est ce quelqun sait d'ou vient le probleme,,??? merci par avance

  8. #8
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re

    peux tu montrer ton code?

    cordialement

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut le voici
    tu sais mon code est un peu long !! tu trouveras des variable que je n'ai pas encore utilisé....c pour apres. merci pour te reponse
    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
    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
    Private Sub CommandButton4_Click()
    Dim cn As ADODB.Connection
    Dim Fichier As String
    Dim RA As String, RB As String, RC As String, RD As String, RE As String
    Dim RF As String, RG As String, RH As String, RI As String, RJ As String
    Dim RK As String, RL As String, RV As String
    Dim NomFeuille As String, SQL_tersfaible As String, SQL_faible As String
    Dim SQL_moyen As String, SQL_fort As String, SQL_avere As String
    Dim nbconso As Integer, nbconsotresfaible As Integer, nbconsofaible As Integer
    Dim nbconsomoyen As Integer, nbconsofort As Integer, nbconsoavere As Integer
    Dim rsTtresfaible As ADODB.Recordset
    'Initialization des variables
    nbconso = 10
    RA = " " & " " & "A"
    RB = " " & " " & "B"
    RC = " " & " " & "C"
    RD = " " & " " & "D"
    RE = " " & " " & "E"
    RF = " " & " " & "F"
    RG = " " & " " & "G"
    RH = " " & " " & "H"
    RI = " " & " " & "I"
    RJ = " " & " " & "J"
    RK = " " & " " & "K"
    RL = " " & " " & "L"
    RV = " " & " " & "V"
    'Définit le classeur fermé servant de base de données
    Fichier = "s:\LYNDAYAKOUBEN\saintetiennenord.xls"
    'Nom de la feuille dans le classeur fermé
    NomFeuille = "Feuil1"
    Set cn = New ADODB.Connection
    '--- Connection ---
    With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & Fichier & _
     ";Extended Properties=""Excel 8.0;HDR=yes"""
    .Open
    End With
    '-----------------
    'Définit la requête.
    '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
    SQL_tersfaible = " SELECT  TOP 5 *  FROM[" & NomFeuille & "$] WHERE  MARCHE = 'CONSOMMA' and NOTEB2 IN( '" & RA & "', '" & RB & "', '" & RC & "', '" & RD & "')"
    Set rsTtresfaible = New ADODB.Recordset
    Set rsTtresfaible = cn.Execute(SQL_tersfaible)
    '--- Boucle sur les entêtes pour récupérer les noms ---
    For i = 0 To rsTtresfaible.Fields.Count - 1
    Cells(1, i + 1) = rsTtresfaible.Fields(i).Name
    Next i
    '-----------------------------------------------------
    'Ecrit le résultat de la requête dans la cellule A2
    Range("A" & nbconso & "").CopyFromRecordset rsTtresfaible
    '-----------------------------------------------------
    'recupérer le nombre de lignes
    nbconsotresfaible = rsTtresfaible.Fields(0).Value
    MsgBox "le nombre de lignes est:" & nbconsotresfaible
    '-----------------------------------------------------
    '--- Fermeture connexion ---
    cn.Close
    Set cn = Nothing

  10. #10
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re

    si tu veux le nombre d'occurences trouvé, va faire un tour ici

    Je regarderai ton code ce soir, je n'ai plus le temps

    @+

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut DIDIDIDA
    tu sais ne fais pas attention à top 5 ds la requete, parceque ce je cherche le nombre d'enregitrementsquand c'est select *
    merci
    je pense que je ne suis pas la seul à avoir ce prbleme j'essaye de voir plus des las facs précedent mais pour l'instant je trouve pas la solution!!!!! merci

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut merci fred65200
    je cherche encore de ma part merci et bien tot

  13. #13
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re

    Si tu as Acces, consulte l'aide. Elle est beaucoup plus détaillée que celle d'Excel pour les RecordSets.


    cordialement

  14. #14
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut ok merci
    d'acord je le ferai maintenant et je te tiendrai au courant de la suite.
    tu sais j'ai essyé d'utiliser ce que tu m 'as envoyé, et ça renvoie le résultat 0!!! donc c toujours pas gagné merci comme meme
    code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     intcompteur = 0
    Do While Not rsTtresfaible.EOF
    intcompteur = intcompteur + 1
    Loop
    MsgBox "le nombre de lignes est:" & intcompteur

  15. #15
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re



    si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL_tersfaible = " SELECT TOP  * FROM[" & NomFeuille & "$] 
    Set rsTtresfaible = New ADODB.Recordset
    Set rsTtresfaible = cn.Execute(SQL_tersfaible)
     
    msgbox  rsTtresfaible.recordcount
    qu'est ce que ça donne?

    @+
    nb n'oublie pas les balises codes, je te les ai placées.

  16. #16
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut adOpenKeyset
    tu sais je pense qu'il faut que je rajoute : adOpenKeyset pour que record count marche mais qaund j'essaye de l'introduire il m'affiche un message d'erreur§§§!!!!!

  17. #17
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut rien
    tu sais c'est ça que j'ai essayé quand il me donnait -1 alors je comprend pas ce que tu as changé???? comme ça n'a pas marché j'ai essayé count ds select qui marche pas non plus!!! alors j'ai pas trop compris ce que tu veux que je change??

  18. #18
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re

    très bonne piste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           Set rsTtresfaible= New ADODB.Recordset
          rsTtresfaible.Open SQL_tersfaible , , adOpenKeyset, adLockOptimistic
    
          Msgbox rsTtresfaible.RecordCount
    @+

  19. #19
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut justement
    et oui mais ça m'affiche un message d'erreur. au fait est ce que je dois placer cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsTtresfaible.Open SQL_tersfaible, adOpenKeyset, adLockOptimistic
    seulement au depart???

  20. #20
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 171
    Par défaut adOpenKeyset
    moi je l'ai met comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set rsTtresfaible = New ADODB.Recordset
          rsTtresfaible.Open SQL_tersfaible, adOpenKeyset, adLockOptimistic
    Set rsTtresfaible = cn.Execute(SQL_tersfaible)

Discussions similaires

  1. [XL-2003] Manipulation de cellules avec VBA Excel
    Par stentorus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/12/2009, 08h09
  2. Stocker et manipuler le Recordset en VBA
    Par Au2laDeNosReves dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/02/2009, 11h49
  3. Manipuler les Shapes par VBA Excel.
    Par Karimbon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/10/2007, 18h37
  4. [vba - excel] manipuler plusieurs fichers excels à la suite
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2006, 16h11
  5. Manipulation du carnet d'adresse outlook via VBA Excel?
    Par Dragon Tours dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/11/2005, 12h16

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