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 :

Requête SQL en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut Requête SQL en VBA
    Bonjour,

    Je rencontre des difficultés sur le point suivant :

    Ma requête sql en vba (EXCEL) interroge une table sur ACCESS.

    Je souhaite intégrer dans cette requête une liste de valeurs contenues dans un tableau.


    En fait, l'utilisateur saisie les valeurs du code postal qu'il souhaite via inputbox.

    L'ensemble des données sont stockées dans un tableau.

    Je ne sais pas comment modifier la requête de telle façon à obtenir :

    ... where codepostal = tab(0) OR codepostal = tab(1) ... codepostal = tab(nombre_valeur_saisie-1)

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour,

    une petite boucle

    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
     
    Dim yaRequete As String
    Dim i As Integer
     
    '------------------- Intialisation tableau
    Dim yaTb(2) As String
    yaTb(0) = "76015"
    yaTb(1) = "85012"
    yaTb(2) = "9600"
    '-------------------------------
     
     
    yaRequete = "where codepostal = '" & yaTb(0) & "'"
    For i = 1 To UBound(yaTb)
      yaRequete = yaRequete & " OR codepostal = '" & yaTb(i) & "'"
    Next
    MsgBox yaRequete

  3. #3
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,
    plus simple que les OR enchaînés, utilise plutôt une instruction IN (... , ... , ...)
    un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sIn = "IN ("
    for each c in range("Plage de Codes postaux").Cells
       sIn = sIn & """" & c.value & """, "
    next c
    sIn = Left(sIn, Len(sIn) - 3) & ")"
     
    sSql = sSql & " WHERE CodePostal " & sIn
    La réponse précédente étant valide, je t'ai mis un exemple pour un tableau dans une feuille de calcul.

  4. #4
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    ou même sans boucle, en utilisant la fonction qui va bien : Join, et les bons outils SQL, comme le IN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CeciEstUnTest()
    '-----------------------------    
    'Création de la variable tableau et remplissage
    Dim sTab(5) As String
        sTab(0) = "toto"
        sTab(1) = "titi"
        sTab(2) = "tutu"
        sTab(3) = "tyty"
        sTab(4) = "tete"
        sTab(5) = "tata"
    '-----------------------------        
        Debug.Print "WHERE CodePostal IN('" & Join(sTab, "','") & "')"
    End Sub

    [EDIT]Désolé cafeine ! J'avais pas vu ton intervention sur le IN avant de poster[/EDIT]

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut
    Merci pour les conseils. Je vous tiendrai au courant de l'évolution.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut
    Bonjour,

    Dans le cas d'un département (ex : 78 ou 95) impliquant de rechercher l'ensemble des codes postal commençant par les 2 chiffres du département, comment le programme évolue-t-il ?

    Merci pour votre aide.

  7. #7
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Tu reviens sur ma version avec des OR et tu remplace des OR par des Like.

Discussions similaires

  1. Requête SQL en VBA
    Par taisherg dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/06/2007, 15h36
  2. Requête SQL en VBA
    Par e040098k dans le forum VBA Access
    Réponses: 14
    Dernier message: 27/04/2007, 11h50
  3. Réponses: 6
    Dernier message: 15/02/2007, 13h46
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Conversion d'une requête SQL en VBA
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/10/2004, 17h33

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