Microsoft 365 Requête ADODB sur une colonne

Bill73

XLDnaute Junior
Bonjour,
je bute depuis un moment sur un problème de requête ADODB
Je voudrais extraire une colonne précise depuis une feuille excel fermée contenant une bdd, et récupérer cette colonne directement dans une variable tableau.

ex :
tab.jpg


il faut récupérer la colonne Nom (l'ensemble des noms) et les transférer dans un tableau
 

fanch55

XLDnaute Barbatruc
Salut, le code ci-dessous devrait répondre à votre demande.
Attention, code créé sur le pouce , il ne gère pas les erreurs
VB:
Sub test()
Dim Base        As Object, Requete     As Object
Dim Classeur    As String, Feuille     As String, Sql_Driver     As String

    Classeur = "D:\Users\xxxxxx\Downloads\Bill73Base.xlsx"
    Feuille = "Feuil1"
    Sql_Driver = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
                 "DBQ=" & Classeur & ";READONLY=True"
    Set Base = CreateObject("ADODB.Connection")
        Base.Open Sql_Driver
        Set Requete = CreateObject("ADODB.Recordset")
             Requete.ActiveConnection = Base
                Requete.Open _
                   "Select Nom From [" & Feuille & "$] Order By Nom;"
                [A1].CopyFromRecordset Requete
             Requete.Close
        Set Requete = Nothing
        Base.Close
    Set Base = Nothing
                    
End Sub
 

fanch55

XLDnaute Barbatruc
les transférer dans un tableau
En ce cas :
Attention, la variable Tablo sera en base 1, c'est à dire commencera par l'index 1 et non 0 .
VB:
Function test()
Dim Base        As Object, Requete     As Object, Tablo
Dim Classeur    As String, Feuille     As String, Sql_Driver     As String

    Classeur = "D:\Users\xxxx\Downloads\Bill73Base.xlsx"
    Feuille = "Feuil1"
    Sql_Driver = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
                 "DBQ=" & Classeur & ";READONLY=True"
    Set Base = CreateObject("ADODB.Connection")
        Base.Open Sql_Driver
        Set Requete = CreateObject("ADODB.Recordset")
             Requete.ActiveConnection = Base
                Requete.Open _
                   "Select Nom From [" & Feuille & "$] Order By Nom;"
                Tablo = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Requete.GetRows))
             Requete.Close
        Set Requete = Nothing
        Base.Close
    Set Base = Nothing
End Function
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Tablo =split(Base.Execute("Select Nom From [" & Feuille & "$] Order By Nom;").GetString(,,";",vbcrlf),vbcrlf)
Bien vu, je l'avais oublié le Getstring qui permet de conserver des tableaux en base 0 .
Il faut donc remplacer la ligne du Transpose par :
VB:
                Tabst = Requete.getstring
                Tablo = Split(Left(Tabst, Len(Tabst) - 1), vbCr)  ' vbcr étant le séparateur de lignes par défaut
1706785634012.png
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 247
Membres
103 163
dernier inscrit
Pelaez