Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 :

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:

dysorthographie

XLDnaute Accro
Bonsoir,
VB:
Tablo =split(Base.Execute("Select Nom From [" & Feuille & "$] Order By Nom;").GetString(,,";",vbcrlf),vbcrlf)

Edite:
Notes que tu peux faire un Select Distinct si tu ne veux pas de doublons.
 
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
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…