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

VBA Access Discussion :

Requête SQL sous VBA


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Par défaut Requête SQL sous VBA
    Bonjour à tous, je suis nouveau sur le site

    Je viens ici exposer mon problème et solliciter vos connaissances expertes ^^

    Mon problème est en fait très basique, je suis sous Access 2007-2010, et développe un petit formulaire doté d'un bouton "Comparer", me servant à comparer 2 Tables. Ces tables créées au préalables contiennent des informations similaires, mais à 2 dates différentes. Donc certains changement sont à repérer.

    La comparaison est possible via une requête directement sous Access, mais mon but ici est de créer un environnement "User Friendly", car les futurs utilisateurs de ce formulaires n'y connaissent rien en Access ou en base de données.

    Ils n'auront qu'à cliquer sur 2 boutons "importer" leur permettant d'importer le contenu de 2 fichiers excel dont ils disposent dans 2 Tables distinctes , et ensuite cliquer sur le bouton "comparer" pour obtenir sur un tableau (ou Table) le résultat de la comparaison, et visualiser ainsi les changements.

    J'en suis à développer le code de comparaison, il s'agit donc d'une requête SQL, que je lance après dans mon module VBA, ( dans l'événement clic de mon bouton "comparer" )

    J'ai codé ma requête, et l'ai donc mise sous format string. J'aimerais maintenant obtenir le résultat, sous forme de Tableau, ou Table, comme on peut l'obtenir lorsque l'on lance une requête directement depuis Access.

    J'ai pu voir sur internet qu'il fallait utiliser un "recordset" , et plus précisément ces bouts de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim RS As DAO.Recordset
     
    Set RS = CurrentDb.OpenRecordset(SQL)
    ( SQL étant ma string contenant la requête SELECT )


    Mais ce n'est pas suffisant, alors voilà il s'agit certainement d'une petite chose à modifier/ rajouter mais il faut connaître

    Merci pour vos solutions / conseils

  2. #2
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Bonsoir,
    Effectivement, ce n'est pas suffisant (sa serait trop simple sinon )
    Pour importer des données d'un classeur Excel dans une base de données Access, il vous faut d'abord OUVRIR ce fameux classeur Excel par le code.
    Une fois ce classeur ouvert, vous pouvez lire les données qu'il y a dedans.
    Pour écrire dans une table via le recordset, personnellement, j'utilise plutôt quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RS.Edit 'Ou RS.AddNew dans le cas d'un ajout
    RS.Fields("NomduChampsdelaTable").Value = Valeur
    RS.Update

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Par défaut
    Bonjour,

    Tout d'abord merci de ta réponse Gado2600

    Alors d'après ce que je comprends de ton code, tu utilises ces lignes pour ajouter à un champ précis d'une Table des valeurs, dont tu disposes sous la forme "Valeur", et je suppose que ce "Valeur" peut être sous n'importe quel format.

    Ce n'est malheureusement pas tout à fait ce dont j'ai besoin. Je m'explique :

    Je ne dispose pas des "valeurs" précises de chaque champs, mais uniquement de la requête SQL. Je ne sais donc pas à l'avance combien de lignes va me sortir cette requête.

    j'aimerais juste que le code me "lance" ma requête SELECT et m'affiche le résultat sous forme de Tableau ou de Table ; quitte par exemple à donner le nom de cette Table (créée par le code) dans le code.

    J'ai pu trouver sur internet un semblant de solution mais malheureusement extrêmement peu pratique :

    Un code permettant d'afficher le résultat de la requête dans une "zone de liste" Access :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    affiche_recherche.Enabled = True
     
      Me.affiche_recherche.RowSource = SQL
     
      Me.affiche_recherche.Requery
    affiche_recherche étant le nom de ma zone de liste, et SQL le nom de ma string contenant la requête SQL.

    Cette solution n'est pratique du tout car les colonnes sont limitées en largeur, l'espace est limité, la sélection du texte est peu pratique, et enfin j'ai des problèmes techniques d'affichage avec Access lui-même.

    Mon but est vraiment de pouvoir obtenir un résultat comme on l'obtient en faisant une requête par Access lui même ( sans code, en reliant les champs des Tables par des traits ...etc ) qui me sort une nouvelle Table avec le résultat.


    PS : je m'attaquerai après à l'importation des fichiers excel dans les Tables Access, merci pour ton indication à ce sujet Pour l'instant j'ai déjà les 2 Tables à comparer, qui me servent pour cette première phase.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Par défaut
    Bonjour à tous,

    Je passe juste dire que le sujet est résolu.


    Pour ceux que ça intéresse, voici le code qui permet de faire apparaître le résultat d'une requête, créée dynamiquement, dans une nouvelle Table créée par le code ( Tout ceci sous VBA dans Access ) :

    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
    Dim dbs As Database
     
    Dim qdf As QueryDef
     
     
    Set dbs = CurrentDb()
     
     
    With dbs
    Set qdf = .CreateQueryDef("Ecarts", SQL2)
    DoCmd.OpenQuery "Ecarts"
    .QueryDefs.Delete "Ecarts"
    End With
    dbs.Close
    qdf.Close
    explications : SQL2 est une string contenant une requête SQL. Ecarts est le nom choisi pour la nouvelle Table créée.

    Voilà

Discussions similaires

  1. Base Oracle et requêtes SQL sous VBA
    Par Filippo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/03/2015, 09h54
  2. [XL-2010] Base Oracle et requêtes SQL sous VBA
    Par Crysta17 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 18/04/2014, 12h25
  3. Requête SQL sous VBA - Between
    Par p'tite Sandrine dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/08/2012, 20h24
  4. Prbl requête SQL sous VBA
    Par OR34a dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/01/2012, 09h38
  5. Requête SQL sous VBA ne marche pas
    Par B-CAB dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/06/2010, 10h40

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