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 :

Récupérer résultat d'une requête dans une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 816
    Points : 49
    Points
    49
    Par défaut Récupérer résultat d'une requête dans une macro
    Bonjour à tous,

    A travers une macro excel, j'interroge une base SQL (ms sqlserver), cela fonctionne mais j'aurais besoin d'aide.

    Je voudrait réaliser une boucle du résultat de la requete1.

    Mon but, je dispose d'une première requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete1 "select id_societe, id_atelier FROM toto"
    Et je voudrais boucler le résultat pour exécuter une nouvelle requête en récupérant les id_societe et id_atelier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete2 "select or, sommeT, somme poids FROM tata WHERE id="id_societe" AND atelier="id_atelier"

    Je ne sais pas comment réaliser la boucle du résultat (comme en php while etc...).

    Merci d'avance pour votre aide

    guigui69

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pourrais-tu préciser si tu travailles avec ADO ou avec DAO?

    Quoi qu'il en soit, tu dois avoir un objet de type ado.recordset ou dao.recordset.

    Tu peux boucler ainsi, avec un objet nommé rs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do while not rs.eof
        ...
        ...
        rs.movenext
    loop
    [EDIT]
    Pourrais-tu préciser également pourquoi tu dois boucler sur le recordset et ce que tu cherches à réaliser?

    Si c'est pour copier le recordset dans une feuille Excel, tu as également ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("a2").CopyFromRecordset rs
    avec rs comme un dao.recordset ou un ado.recordset
    [/EDIT]
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 816
    Points : 49
    Points
    49
    Par défaut
    Bonsoir,

    En fait j'aurai une première requête pour récupérer id_societe et id_pvt puis après je ré-exécute une seconde requête.

    Schéma:

    En VBA

    - J’exécute une requête pour récupérer id_societe et id_pvt

    - Je voudrait faire une boucle du résultat de la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do while not rs.eof
        ...
        ...
        rs.movenext
    loop
    - Dans cette boucle je voudrait Ré-exécuter une nouvelle requête à l’intérieur. (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select voiture, couleur, interieur 
    FROM vt 
    WHERE id_societe='id_societe' AND  id_pointdevente='id_pvt'
    )

    - Puis le résultat de la requête sera afficher dans un tableau Excel

    Merci

    guigui69

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 816
    Points : 49
    Points
    49
    Par défaut
    Voici le code VBA:

    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
     
    Dim valcel As String
    valcel = Excel.Range("Informations!B3").Value
    valcel2 = Excel.Range("Informations!B4").Value
    Dim cnBat As ADODB.Connection
    Set cnBat = New ADODB.Connection
    Dim strConn As String
    strConn = "PROVIDER=SQLOLEDB;"
    strConn = strConn & "DATA SOURCE=xx.xx.xx.xx;UID=xxxxxx;PWD=xxxxxxxx;DATABASE=xxxx"
    cnBat.Open strConn
    
    
         Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile("C:\Program Files\UwAmp\www\requete-sql\lesrequetes\requete OR EN COUR-pour-excel.sql", ForReading)
    une_variable = "select id_societe, id_atelier FROM toto"
    f.Close
    
    
    '------------------
    Dim rsBat As ADODB.Recordset
    Set rsBat = New ADODB.Recordset
     
    With rsBat
         .ActiveConnection = cnBat
         .Open une_variable
    ==> ICI que je voudrait boucler cette première requête  pour qu'a l intérieur je réexecute une seconde requête. <===
         .Close
     
    
        
    End With
    
    
     
    cnBat.Close
    Set rsBat = Nothing
    Set cnBat = Nothing
    End Sub
    Merci

    guigui69

Discussions similaires

  1. Réutiliser des données d'une requête dans une requête
    Par mims1664 dans le forum Requêtes
    Réponses: 12
    Dernier message: 06/02/2009, 14h12
  2. Résultat d'un champ d'une requête dans une variable
    Par PsychedeChed dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/01/2009, 12h50
  3. Réponses: 4
    Dernier message: 02/07/2008, 11h32
  4. Réponses: 2
    Dernier message: 02/06/2006, 11h26
  5. Réponses: 4
    Dernier message: 01/12/2005, 14h36

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