Microsoft 365 Requête ADODB sur une colonne

  • Initiateur de la discussion Initiateur de la discussion Bill73
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
378
Réponses
0
Affichages
296
Réponses
2
Affichages
247
Retour