[Déplacé VB6 --> VBA] Requête SQL avec clause IN [Résolu]

Signaler
Messages postés
9
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
18 décembre 2009
-
cpari09
Messages postés
9
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
18 décembre 2009
-
Bonjour à tous,

J'ai une macro dans laquelle je code une requête SQL de la forme :

select ma_donnee2 from ma_table where ma_donnee1 IN ('" & Range("A2").Value & "','" & Range("A3").Value & "','" & Range("A3").Value & "')

Cette requête fonctionne.

Mon pb est que ma liste de critères dans la clause IN est potentiellement trés longue.

J'ai affecté un nom (nom_liste) à ma liste de critères dans ma feuille de calcul.

Est-ce que je peux utiliser nom_liste dans mes critères de requête SQL en substitution de ma longue liste ? J'ai essayé plusieurs syntaxes mais sans succès...

Merci de votre aide...

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
64
Salut
Normalement, si MS respectait les constructions de syntaxe d'origine de SQL, on pourrait faire
Select * From maTable Where monChamp In (Select AutreChamp From AutreTable)

mais ce n'est pas possible.
As-tu essayé de nommer la plage de cellule A2 à A4012 en "maZone", par exemple, et de l'utiliser directement, genre "... In (maZone)"

Ce que tu peux faire, c'est préparer dans une chaine le contenu de ce qui se trouve dans ta parenthèse, exemple :
Dim maChaine As String
Dim r As Long
For r = 2 To 4012
  maChaine = maChaine & "'" & Cells(1, r).Value & "',"
Next r
' Supprime dernière virgule
maChaine = Left$(maChaine, Len(maChaine) - 1)
' Requète
maRequete = "Select ma_donnee2 " & _
            "  From ma_table " & _
            " Where ma_donnee1 IN (" & maChaine & ")"


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
9
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
18 décembre 2009

Bonjour Jack,

Un grand merci pour ton conseil : ca fonctionne !