JB_ExcelAccess Requête Access via le contenu de plusieurs cellules Excel via ADO

zephoenix

XLDnaute Nouveau
Bonsoir à tous,

Je viens vous demander un coup de main pour parvenir à me sortir de cette impasse.
J'ai besoin d'automatiser une requête dans un BDD Access via le contenu des cellules d'une colonne d'un fichier Excel.

Après quelques recherches sur ce forum, j'ai téléchargé le super fichier de JB_Excel Access.
Il est presque parfait par rapport à ce que je recherche !!

Mais il y a une limite que je ne parviens pas à contourner : comment faire pour que la recherche qui est faite via la connexion ADO se réalise non plus dans le code mais plutôt s'automatise via le contenu des cellules.

Le code est le suivant :

Sub LectureAccess3()
ChDir ActiveWorkbook.Path
Dim rs As New ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Access2000.mdb"
rs.Open "SELECT count(*) AS Nb FROM client where ville='paris' ", cnn
Cells(1, 5) = rs("Nb")
rs.Close
cnn.Close
End Sub


A la place de la commande : ville='paris' je souhaiterai quelque chose comme ville='le contenu des cellules de la colonne B jusqu'à la 1ere cellule vide'

En pièce jointe l'exemple (fichier excel + BDD)

Merci d'avance pour votre aide précieuse et systématiquement efficace.

Bonne nuit

Zephoenix
 

Pièces jointes

  • jb-excelaccess.zip
    55.1 KB · Affichages: 25
  • jb-excelaccess.zip
    55.1 KB · Affichages: 23

chris

XLDnaute Barbatruc
Re : JB_ExcelAccess Requête Access via le contenu de plusieurs cellules Excel via ADO

Bonjour

Il faut construire
soit un IN : ville in ("Paris", "Lyon",...)
soit avec OR ville="Paris" OR ville="Lyon"....

et donc construire via une boucle une chaîne à inclure dans la requête.
Code:
Sub LectureAccess3()
ChDir ActiveWorkbook.Path
Dim rs As New ADODB.Recordset
Dim MaReq As String
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Access2000.mdb"
MaReq = "SELECT count(*) AS Nb FROM client where ville " & listVilles("LectureADO2", "B")
rs.Open MaReq, cnn
Cells(1, 1) = rs("Nb")
rs.Close
cnn.Close
End Sub

Function listVilles(Feuille As String, Colonne As String)
Dim i As Long, listV As String
listV = "in("
With Worksheets(Feuille)
    For i = 1 To Application.WorksheetFunction.CountA(.Range(Colonne & ":" & Colonne))
        listV = listV & "'" & .Cells(i, 2).Value & "',"
    Next i
    listVilles = Left(listV, Len(listV) - 1) & ")"
End With
End Function

Cependant si la liste est très longue, cela risque de coincer et dans ce cas il faut partir sur d'autre solutions
 

Discussions similaires

C
Réponses
15
Affichages
3 K
Compte Supprimé 979
C

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet