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 :

Affiche des données sur une listebox à partir d'une requete sql [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut Affiche des données sur une listebox à partir d'une requete sql
    Bonjour,

    J'essaie de créer un code vba qui, a partir d'une requete sql, m'afficherait le resultat dans une listebox.

    je m'explique :
    Dans un formulaire, j'ai :
    - un texte_box
    - un bouton de commande "envoyer"
    - une liste_box

    Dans le texte_box, j'insere un numero de colis. J'appuie ensuite sur le bouton "envoyer" et là je devrais voir apparaitre le resulat de ma requete sql dans la liste box.. mais rien ne s'affiche..

    Je précise que je suis novice en language sql. J'ai donc crée ma requete en mode création puis je l'aie affiché en sql.
    Dans cette requete sql , le numero de colis est une variable VNumerocolis ;
    Deplus, je ne sais pas trop faire la difference entre WHERE ET HAVING.

    Merci de votre aide

    Voici le code sql :
    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
    Option Compare Database
    Dim VNumerocolis As Variant
    Dim txt_ChaineSQL As String
    Dim strSQLSELECT As String
    Dim strSQLWHERE As String
    Dim strSQLGROUPBY As String
    Dim strSQLORDERBY As String
    Dim strSQLHAVING As String
     
    Private Sub Cmd_envoyer_Click()
    VNumerocolis = CVar(Texte_Numerocolis.Value)
     
     
    With Me.Listerecirculation
    .RowSourceType = "Table/Requête"
    .ColumnCount = 5 ' nombre de colonne que dois avoir le formulaire intitulé "Listerecirculation"
    .BoundColumn = 1 ' la colonne de reference
     
     
     
    strSQLSELECT = "SELECT T_codecolisQUALITE.numcolis, dbo_vwParts.DisplayName, [table_Affich-general].[Nom Porte principale], [table_Affich-general].DESTINATION, dbo_vwItemData.DischargeEventTime" & _
    " FROM T_codecolisQUALITE INNER JOIN ((dbo_vwItemData INNER JOIN dbo_vwParts ON dbo_vwItemData.DischargePartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]) ON T_codecolisQUALITE.ItemID = dbo_vwItemData.ItemID"
     
     
    strSQLGROUPBY = "GROUP BY T_codecolisQUALITE.numcolis, dbo_vwParts.DisplayName, [table_Affich-general].[Nom Porte principale], [table_Affich-general].DESTINATION"
     
    strSQLHAVING = "HAVING T_codecolisQUALITE.numcolis=" & VNumerocolis & "  AND ((dbo_vwItemData.DischargeEventTime)>=(CVDate(Fix(Now()-(5/24)))+5/24)));"
     
     
     
    'MsgBox VNumerocolis
    'MsgBox strSQLHAVING
     
     
    txt_ChaineSQL = strSQLSELECT & vbCrLf & _
                    strSQLWHERE & vbCrLf & _
                    strSQLGROUPBY & vbCrLf & _
                    strSQLHAVING
     
    'MsgBox txt_ChaineSQL
     
    .RowSource = txt_ChaineSQL
    .Requery
    End With
     
    End Sub

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Il y a une solution bien plus simple et sans presque de code.

    Tu crées ta listbox, puis dans le source de ta listbox tu crée ta requête en mettant comme critere quelque chose qui ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [forms]![NomTonFormulaire]![NomTonChampClef]
    NomTonChampClef est celui qui alimente VNumerocolis.

    Et tu mets sur l'événement Après MAJ (after update) de NomTonChampClef

    Ceci va forcer la mise à jour des données affichées.

    Note qu'utiliser un sous-formulaire lié au lieu d'une liste peut faire en sorte que tes données s'affichent plus rapidement.

    Pour une de mes applications je suis passé de 60s à 3s pour afficher les mêmes informations.

    A+

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    Salut Marot,

    Le souci, c'est que je souhiterais avoir un texte box dans le formul

  4. #4
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    Salut Marot,

    Le souci, c'est que je souhiterais avoir un texte box dans le formulaire où j'inserais le code colis.
    Avec ta soultion si je ne me trompe pas, je n'aie pas la possibilité de rechercher les données à partir d 'un critère mentionné dans le texte box.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    [forms]![NomTonFormulaire]![NomTonChampClef] se réfère jsustement au contenu de ta textBox.

    Tu peux utiliser n'importe quel contrôle d'un formulaire du moment qu'il affiche l'info dont tu as besoin dans ta requête. Un grand classique est d'utiliser une ComboBox (liste déroulante) pour ce genre de chose.

    A+

  6. #6
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    marot,

    je t 'assure que je prefere ce systeme de code vba..
    Auparavemment, je fais des liste box issue de table et jamais d'une requete directement.
    J'aimerais savoir pourquoi ma requete sql ne fonctionne pas

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Ok, la méthode la plus simple est de faire exécuter ton code puis quand ton SQL est final, le faire afficher dans la fenêtre d'éxécution immédiate (pour l'afficher taper [ctrl][g], puis print txt_ChaineSQL.

    Après tu sélectionne le SQL et tu le copie.
    Tu ouvre une nouvelle requête Access, tu passe en mode d'affichage "SQL" et tu colle le SQL.
    Tu demande d'exécuter ta requête.
    Après selon le résultat tu modfie tes critères ou tes jointures.
    Une fois que la requête donne le resultat attendu tu mets le SQL dans le code.

    A+

  8. #8
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonsoir,

    Je fais, depuis des années, exactement comme René l'a précisé et la méthode fonctionne très bien.

    Cordialement

    Christophe

  9. #9
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    Sakut marot,
    Avant tout merci de ta compréhension...
    Je suis un peu perdu au sujet de l'execution du "print".
    Quelle est la finalité de L'expression
    print txt_ChaineSQL
    et ou doit il etre inseré :
    - dans le code vba que j'ai cité ci dessous ou ailleurs ?

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Sert à afficher le contenu de txt_ChaineSQL pour pouvoir le copier dans la nouvelle requête.

    Quand tu es dans du code en mode Débug, tu peux ouvrir la "fenêtre d'éxécution immédiate" en appuyant sur les touches [ctrl][g].
    Dans cette fenêtre tu peux lancer des instructions VBA comme par exemple .

    Note que tu peux utiliser la "fenêtre d'éxécution immédiate" en tout temps mais que tu ne peux afficher le contenu d'une variable que lorsque tu es en mode pas à pas.

    A+

  11. #11
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    Marot,
    ce n 'etait pas plutot
    Debug.Print txt_ChaineSQL

  12. #12
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    J'ai éxécuter la fonction "print".. et j'ai recopier le code sql de la requete.
    j'ai crée une nouvelle requete avec ce code que j'ai ensuite inseré de nouveau dans le code vba.
    Mais toujours rien sur mon formulaire :
    j'explique,
    la requete sql est inseré dans le code vba sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    txt_ChaineSQL = strSQLSELECT & vbCrLf & _
                    strSQLGROUPBY & vbCrLf & _
                    strSQLHAVING
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSQLSELECT = "SELECT T_codecolisQUALITE.numcolis, dbo_vwParts.DisplayName, [table_Affich-general].[Nom Porte principale], [table_Affich-general].DESTINATION, dbo_vwItemData.DischargeEventTime FROM T_codecolisQUALITE INNER JOIN ((dbo_vwItemData INNER JOIN dbo_vwParts ON dbo_vwItemData.DischargePartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]) ON T_codecolisQUALITE.ItemID = dbo_vwItemData.ItemID"
    strSQLGROUPBY = "GROUP BY T_codecolisQUALITE.numcolis, dbo_vwParts.DisplayName, [table_Affich-general].[Nom Porte principale], [table_Affich-general].DESTINATION, dbo_vwItemData.DischargeEventTime"
    strSQLHAVING = "HAVING T_codecolisQUALITE.numcolis=" & VNumerocolis & "  AND (dbo_vwItemData.DischargeEventTime)>=(CVDate(Fix(Now()-(5/24)))+5/24);"
    or lorsque j'inscrire un numero de code colis dans mon texte_box de mon formulaire et que je clique sur le bouton de commande "envoyer", rien ne s'affiche.
    J'ai l'impression que mon code vba ne prend pas en compte la variable que j'ai inséré dans mon text_box. La variable est le numero de colis :
    dans les proprietés de mon texte_box , dans la rubrique nom , j'ai mis
    Texte_Numerocolis
    Et au debut de monde vba , j'ai identifié les variable dont celui du Texte_Numerocolis :

    Option Compare Database
    Dim VNumerocolis As VariantDim txt_ChaineSQL As String
    Dim strSQLSELECT As String
    Dim strSQLWHERE As String
    Dim strSQLGROUPBY As String
    Dim strSQLORDERBY As String
    Dim strSQLHAVING As String

    Private Sub Cmd_envoyer_Click()
    VNumerocolis = CVar(Texte_Numerocolis.Value)

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Premièrement, est-ce que ta requête retourne des infos dans le créateur de requête ?

    A+

  14. #14
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    Marot,
    J'ai trouvé le problème :
    dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQLHAVING = "HAVING T_codecolisQUALITE.numcolis=" & VNumerocolis & ".....
    j'ai oublié de mettre des guimmets (') de part et d'autre de l'expression " & VNumerocolis & "
    J'aurais du écrire :
    strSQLHAVING = "HAVING T_codecolisQUALITE.numcolis='" & VNumerocolis & "' AND (dbo_vwItemData.DischargeEventTime)>=(CVDate(Fix(Now()-(5/24)))+5/24);".

    Un problème résolu.

    mais j'ai d'autre soucis avec ce formulaire...
    Dans mon texte_box , j'aimeré inseré non pas un seul code colis mais plusieurs... est ce possible ?

  15. #15
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Oui mais il faut utiliser une listbox à sélection multiple et gérer cette multiplicité au niveau du code VBA. La plus simple est de remplacer le HAVING T_codecolisQUALITE.numcolis=" & VNumerocolis & "..... par quelque chose qui ressemble à HAVING T_codecolisQUALITE.numcolis in(" & clauseIn & ") .....clauseIn vaut quelque chose comme 'Code1', 'Code2', 'Code3'.

    A+

  16. #16
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    Bonjour marot,
    Woua...me voila donc repartir vers un domaine nouveau qui est l'expression
    clauseIn
    .
    Je m'y met et je reviens vers toi si je coince..

  17. #17
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    la je nage en eau trouble...
    il me faudrait un coup de main...

  18. #18
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    J'ai trouve dans ce forum une discussion de tee_grandbois sur les zone de selection multiples sur access.
    Je me demandais si je pouvais m'en inspirer ??

  19. #19
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    Marot,
    J'ai crée une liste_box dans mon formulaire.
    Mais je m'apercois que je ne peux pas y inscrire les numeros de colis.

  20. #20
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    Bonjour marot,
    Lorsque tu ecris
    il faut utiliser une listbox à sélection multiple
    ,faut il que je puisse ecrire dans cette liste box les codes colis. Et ce n'est pas le cas.
    je suis perdu..

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Afficher des données sur une date à venir
    Par Martial2 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/05/2014, 21h42
  2. Charger des données dans un GridPanel à partir d'une DB
    Par Erwan62 dans le forum Ext JS / Sencha
    Réponses: 4
    Dernier message: 15/05/2009, 16h27
  3. Réponses: 1
    Dernier message: 19/04/2008, 16h26
  4. Réponses: 3
    Dernier message: 28/01/2007, 19h25
  5. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14

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