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 avec VBA


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut Requête avec VBA
    Bonjour,

    Je suis un novice en VBA. Depuis quelques temps, je cherche un moyen de créer une requête en VBA et y intégrer du code SQL. J'ai créer un requête (Union joint) avec Access qui pige des informations dans deux tables. J'ai ensuite copier ce code dans du VBA. Voila la source de mon problème. La requête en VBA depuis l'intégration de code de la requête.

    Il me donne un message d'erreur de compilation. Je crois que l'erreur est causé pas des " dans mon code. Je me demande s'il a une meilleur facon de l'écrire.

    Voici mon code en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT DISTINCTROW(1 & format(tbl_Niveau1.WO,"00")), tbl_Niveau1.DateCreation, tbl_Niveau1.Client, tbl_Niveau1.Description FROM tbl_Niveau1 UNION SELECT (2 & format(tbl_Niveau2.WO_,"00")), tbl_parent.DateCreation, tbl_parent.Client,tbl_parent.Description FROM tbl_Niveau2"
    Le problème est au niveau des "00" utilisés pour donner un format précis dans les numéros WO (ou ID de l'enregistrement).

    Est-ce qu'il a une facon de modifier ce code tous en gardant un résultat voulu ?

    Merci,

    Egg3774

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Soit tu doubles les guillemets dans la chaine, soit tu mets des ' à la place (personnellement je mets des ').

    Access interpréte mal, car pour lui tu veux mettre des string bout à bout, et elles ne sont pas séparés par des caractères de concaténation (&).

    Starec

  3. #3
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    salut,

    a tu essayé avec des cotes plutot : '00'

    bonne continuation

  4. #4
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Utilise des guillemets simples ' à la place des doubles "

    Philippe

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Modifier mon code en insérant un ' au lieu du " a fait disparaitre l'erreur de compilation. Cependant, je n'obtiens plus rien a l'exécusion du code. Ma liste de rechercher est vide. Je crois que le code utiliser n'est pas bien adapté. Le seul façon pour moi d'avoir des informations dans ma liste de recherche est en modifiant de code de cette façon:

    Avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT DISTINCTROW(1 & format(tbl_Niveau1.WO,'00')), tbl_Niveau1.DateCreation, tbl_Niveau1.Client, tbl_Niveau1.Description FROM tbl_Niveau1 UNION SELECT (2 & format(tbl_Niveau2.WO,'00')), tbl_parent.DateCreation, tbl_parent.Client,tbl_parent.Description FROM tbl_Niveau2"
    Après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT DISTINCTROW tbl_Niveau1.WO, tbl_Niveau1.DateCreation, tbl_Niveau1.Client, tbl_Niveau1.Description FROM tbl_Niveau1 UNION SELECT tbl_Niveau2.WO, tbl_parent.DateCreation, tbl_parent.Client,tbl_parent.Description FROM tbl_Niveau2
    Je crois qu'il a quelques chose qui cloche avec cette parti de code
    (2 & format(tbl_Niveau2.WO,'00'))
    sauf bien sur les '00', mais je ne peux pas trouver de solution.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Oui je n'ai pas tout vu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCTROW(1 "& format(tbl_Niveau1.WO,'00'))" & ,
    Cela vient du fait du concaténage des chaines, car dans une string tu rajoutes des variables, il faut que tu les sortes.

    A faire pour tout l'ensemble.

    Starec

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Starec Voir le message
    Re

    Oui je n'ai pas tout vu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCTROW(1 "& format(tbl_Niveau1.WO,'00'))" & ,
    Cela vient du fait du concaténage des chaines, car dans une string tu rajoutes des variables, il faut que tu les sortes.

    A faire pour tout l'ensemble.

    Starec
    Merci pour ton aide.

    Mais ca ne fonctionne pas. j'ai plein d'erreur de compilation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT DISTINCTROW (1 "& format(tbl_Niveau1.WO,'00'))" & , tbl_Niveau1.DateCreation, tbl_Niveau1.Client, tbl_Niveau1.Description_1 UNION SELECT (2 "& format(tbl_Niveau2.WO,'00'))"& , tbl_Niveau2.DateCreation, tbl_Niveau2.Client,tbl_Niveau2.Description_1 FROM tbl_Niveau2"
    j'obtiens un erreur de compilation "end of statment". la première ' simple semble est la cause de l'erreur. Désolé je suis null en VBA ! Quelqu'un peu m'aider ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Voici le code que j'utilise dans ma requête en VBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT DISTINCTROW (1 & Format(WO_Niveau1,'00')), DateCreation, Client, Description FROM tbl_grand UNION SELECT (2 & Format(WO_Niveau2,'00')), DateCreation, Client, Description FROM tbl_Niveau2"
    Tous fonctionne bien jusqu'au moment que j'insère la partie de code UNION SELECT (2 & Format ( Wo....

    Qu'elle la syntaxe pour inclure le code ' UNION SELECT...' dans du VBA ?

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    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 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    J'ai créé des tables avec ta structure, j'y ai mis quelques données et j'ai utilisé ta syntaxe de requête.

    Le recordset renvoyé est correct et contient tous les enregistrements des deux tables.

    Quel est le problème que tu rencontres?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Bonsoir

    J'ai créé des tables avec ta structure, j'y ai mis quelques données et j'ai utilisé ta syntaxe de requête.

    Le recordset renvoyé est correct et contient tous les enregistrements des deux tables.

    Quel est le problème que tu rencontres?
    Je rencontre un problème dans liste de recherche. Dans une requête normal en access tous fonctionne bien. Sauf que lorsque j'utilise le même code dans du VBA. La syntaxe semble être correct en partie. C'est au niveau du UNION SELECT que ca ne semble pas fonctionner. Lorsque j'ouvre le formualire qui comprend une zone de texte indépendante utiliser pour afficher un recordset, tous les informations y sont. Ce même code fonctionne bien dans "Row source" sous longlet "DATA" . Sauf qu'une fois insérer dans du VBA rien de fonctionne. Le code VBA est utiliser pour trier le contenu l'aide de boutons.

    Voici mon fonction au complet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function basOrderby(col As String, xorder As String) As Integer
    Dim strSQL As String
     
    ClearCaptions
     
        strSQL = "SELECT DISTINCTROW (1 & Format(WO_Niveau1,'00')), DateCreation, Client, Description_1 FROM tbl_Niveau1 UNION SELECT (2 & Format(WO_Niveau2,'00')), DateCreation, Client, Description_1 FROM tbl_Niveau2"
        strSQL = strSQL & " ORDER BY  " & col & " " & xorder
        Me!lstSearch.RowSource = strSQL
        Me!lstSearch.Requery
    End Function

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    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 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    As-tu vérifié la chaine strsql en mettant un point d'arrêt sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me!lstSearch.RowSource = strSQL
    Peux-tu donner la valeur de cette chaine?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    As-tu vérifié la chaine strsql en mettant un point d'arrêt sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me!lstSearch.RowSource = strSQL
    Peux-tu donner la valeur de cette chaine?
    Je crois que ca donne ceci

    Expression: strSQL
    Valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :"SELECT DISTINCTROW (1 & Format(WO_grand,'00')), DateCreation, Client, Description_1, Description_2 FROM tbl_grand ORDER BY WO_grand DESC"
    Type: string

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je t'ai dit d'écrire par concaténation, la fonction format ne doit pas apparaitre.

    Et puis c'est quoi ce "1", un nom de champ ne doit jamais commencer par une lettre.

    Starec

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Starec Voir le message
    Bonjour

    Je t'ai dit d'écrire par concaténation, la fonction format ne doit pas apparaitre.

    Et puis c'est quoi ce "1", un nom de champ ne doit jamais commencer par une lettre.

    Starec
    Le "1" sert identifier un niveau. 1 pour la table_A et 2 pour la table_B. Ensuite les numéros doivent envoir un minimum de trois chiffres. Exemple: les enregistrements auront cette suit-e: 100, 101... 199, 1100,1101...etc. Ca sera la même chose pour la Table_B: 200, 201... 299, 2100, ...
    La fonction format est utile dans ce cas.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Excuse-moi, mais ce n'est pas clair du tout, tu dis que là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 & Format(WO_grand,'00'
    c'est pour le calcul d'une table, hors cela doit être le nom d'un champ de la table tbl_Grand qui doit apparaitre.

    Pas clair ton truc

    Starec

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Starec Voir le message
    Bonjour

    Excuse-moi, mais ce n'est pas clair du tout, tu dis que là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 & Format(WO_grand,'00'
    c'est pour le calcul d'une table, hors cela doit être le nom d'un champ de la table tbl_Grand qui doit apparaitre.

    Pas clair ton truc

    Starec
    c'est plutôt un champ "WO_grand" (autonumber) dont je veux donner un format particulier. Je ne fait aucun calcul avec de champ, il est utilisé uniquement pour idenfier un enregistrement.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Peu important, je vais écrire comme tu me l'as dit. merci Starec

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 79
    Points
    79
    Par défaut
    Comme je suis null en VBA, je n'ai pas été capable d'écrire correctement ce code comme tu me l'as dit. Quelqu'un peu me donner des idées ou suggestions ?

    Je ce code qui fonctionne bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     strSQL = "SELECT DISTINCTROW (1 & Format(WO_niveau1,'00')), DateCreation, Client, Description_1, Description_2 FROM tbl_niveau1"
    Mais comment faire pour écrire une union entre la table_niveau2 et table_niveau2 ? Les structures sont identiques entre les deux tables.

Discussions similaires

  1. nommer une requête avec VBA
    Par ivoratparis dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/06/2013, 10h37
  2. Souci Requête avec Vba.
    Par jeanmichel0404 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/06/2013, 10h06
  3. [AC-2003] Modifier critére de requête avec VBA
    Par Max02 dans le forum IHM
    Réponses: 6
    Dernier message: 14/02/2013, 09h24
  4. [AC-2003] Problème création de requête avec VBA
    Par Sylas dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/11/2012, 14h35
  5. Réponses: 2
    Dernier message: 17/10/2005, 14h58

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