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 :

VBA - Reporter une requête dans une Table [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Stagiaire Données
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Stagiaire Données
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Par défaut VBA - Reporter une requête dans une Table
    Bonjour à tous

    Voilà deux jours que je me casse la tête avec un petit problème qui m'avait pourtant assez simple d'apparence :

    Je travaille sur un formulaire de recherche qui me permet de sélectionner les données d'un champ dynamique sur une période mensuelle souhaitée, grâce aux quelques lignes VBA/SQL ci-dessous :

    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
    Option Compare Database
     
    Private Sub cbo_table_AfterUpdate()
    Me.cbo_champ.RowSource = Me.cbo_table.Value
        Me.cbo_champ.Requery
    End Sub
     
    Private Sub cmd_recherche_Click()
     
    Dim strTable As String, strField As String, strSql As String, strResult As String
     
        Dim Criter As Variant
     
        strTable = "[" & Me.cbo_table & "]"         ' recupère le nom de la table
        strField = "[" & Me.cbo_champ & "]"         ' recupère le nom du champ
     
        ' construit la requête sql
        strSql = "SELECT DISTINCTROW " & strField & "," & "T_Chèques.IdDate" & "," & "T_Chèques.Sep_Type"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE " & "((T_Chèques.IdDate) Between [Choisissez le premier mois de l'analyse :] And [Choisissez le dernier mois de l'analyse :])" & "AND" & "((T_Chèques.Sep_Type)=[Voulez-vous les valeur en Nombre(2) ou en Montant(2) ?]);"
     
        Me.Lst_Resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.Lst_Resultat.Requery             ' recalcule la liste
     
     
    End Sub
    Comme vous pouvez le constater, j'exporte le résultat de la requête sur une zone de liste. J'aimerais pouvoir l'exporter dans une nouvelle table (ou une table existante), afin de pouvoir exploiter ces données.

    Soucis n°1 :

    Une requête via le ruban ne me permet pas de choisir le champ dynamiquement, d'où la construction de la requête via des variables sur VBA. La base de donnée allant avoir une centaine d'indicateurs, je me vois mal éditer 100 requêtes ^^
    Impossible cependant de récupérer une feuille de donnée après l'export sur la zone de liste...
    Quel serait le meilleur moyen pour exporter ces données sur un table où sur une feuille de données ?


    Soucis n°2 :

    La zone de liste ne me donne que la sélection de données correspondante, sans la période affichée, alors qu'en lançant une requête de sélection via le ruban, une feuille de donnée s'affiche avec les deux paramètres :

    Nom : qrt_2.PNG
Affichages : 332
Taille : 17,8 KoNom : rqt_1.PNG
Affichages : 315
Taille : 15,0 Ko

    Voyez-vous d'où peut venir le problème ?

    Je vous remercie d'avance pour avoir pris connaissance de mon problème

    Bonne journée à vous !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    soucis 1 : tu ajoutes un INTO TableFinale par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     strSql = "SELECT DISTINCTROW " & strField & "," & "T_Chèques.IdDate" & "," & "T_Chèques.Sep_Type INTO TableFinale"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE " & "((T_Chèques.IdDate) Between [Choisissez le premier mois de l'analyse :] And [Choisissez le dernier mois de l'analyse :])" & "AND" & "((T_Chèques.Sep_Type)=[Voulez-vous les valeur en Nombre(2) ou en Montant(2) ?]);"
     
    CurrentDb.Execute strSQL
     
    Me.Lst_Resultat.RowSource = "SELECT * FROM TableFinale" ' affecte sql a lst_Resultat
        Me.Lst_Resultat.Requery             ' recalcule la liste
    avec un test d'existence de table en amont pour ne pas avoir un message d'erreur =]

    Soucis 2 :

    pense a ajouter le bon nombre de colonnes dans la zone de liste + largeur des colonnes =]
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Homme Profil pro
    Stagiaire Données
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Stagiaire Données
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Par défaut
    Salut !

    Pourquoi n'avais-je pas penser à cette instruction ? Je ne sais pas, d'autant que je suis tombé dessus dans mes recherches....

    J'ai eu un premier code d'erreur 3601 (3 paramètres étaient attendu). J'ai vérifier ma syntaxe, rien ne clochait. J'ai fini par remplacer CurrentDb.Execute par DoCmd.RunSQL !
    La requête m'interroge bien sur les variables à rentrer, mais un deuxième code d'erreur est apparu :/ "Erreur d'exécution '3959': Les données calculées ne sont pas autorisées dans les instructions SELECT INTO.

    En y réfléchissant, mon champ IdDate est un champ calculé pour me permettre d'avoir le dernier jour du mois d'une date rentrée... Aucun moyen pour utiliser un champ calculé dans un SELECT INTO ?

    Merci d'avance !

    [EDIT]

    Sans surprises, en enlevant le champ IdDate qui est calculé, la procédure fonctionne correctement. Le doit néanmoins être compléter, pour ajouter du nettoyage de table etc...
    Pour mon champ calculé je vais essayer de me calculer après l'importation pour contourner le message d'erreur
    Je mets la discussion en Résolue !

    Un grand merci à toi @Jean-Philippe André pour tes réponses

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Idealement, tu nous affiches le contenu SQL de la requete, nous ne pratiquons malheureusement pas, malgre notre omnipotence technique, la cristallomancie (a la limite la cleromancie ou la stichiomancie)...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Homme Profil pro
    Stagiaire Données
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Stagiaire Données
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Par défaut
    Excuse moi, j'étais en train d'éditer mon post précédent !

    Le voici :

    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
    Private Sub cmd_recherche_Click()
     
    Dim strTable As String, strField As String, strSql As String, strResult As String
     
        Dim Criter As Variant
     
        strTable = "[" & Me.cbo_table & "]"         ' recupère le nom de la table
        strField = "[" & Me.cbo_champ & "]"         ' recupère le nom du champ
     
        ' construit la requête sql
        strSql = "SELECT DISTINCTROW " & strField & "," & "T_Chèques.Sep_Type INTO TableFinale"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE " & "((T_Chèques.Sep_Type)=[Voulez-vous les valeur en Nombre(2) ou en Montant(2) ?]);"
            Stop
        DoCmd.RunSQL strSql
     
    Me.Lst_Resultat.RowSource = "SELECT * FROM TableFinale"  ' affecte sql a lst_Resultat
        Me.Lst_Resultat.Requery             ' recalcule la liste
    Comme je l'ai écrit dans l'édit, je vais tenter de manipuler la table créée après l'importation de strSql dans TableFinale (nom provisoire ) !

    Si vous avez des idées, je suis également preneur

    Bonne fin de journée !

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Ok,

    alors tu m'enleves cette demande de ta requete et tu passes par un InputBox ou une zone de texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim SepType As long
    SepType = InputBox("Voulez-vous les valeur en Nombre(1) ou en Montant(2) ?")
    strSql = "SELECT DISTINCTROW " & strField & "," & "T_Chèques.Sep_Type INTO TableFinale"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE " & "T_Chèques.Sep_Type=" & SepType
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. Réponses: 30
    Dernier message: 12/05/2016, 20h57
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. 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
  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