Requete SQL dans un classeur fermé

Résolu
Bonjour,

Je voudrais récupérer les valeurs contenues dans la plage A2:A7 de mon claxsseur fermé pour cela j'ai utilisé ce bout de code :


Dim cn As ADODB.Connection
Dim cheminFichier As String
Dim nomFeuille As String, texte_SQL As String
Dim request As ADODB.Recordset
Dim xSQL As String

If Application.FileDialog(msoFileDialogFilePicker).Show = True Then
'Définit le classeur fermé servant de base de données
cheminFichier = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
MsgBox (cheminFichier)
Else
MsgBox ("Veuillez cliquer sur ouvrir svp")
Exit Sub
End If

'Nom de la feuille dans le classeur fermé
nomFeuille = "Informations générales"
Set cn = New ADODB.Connection

'--- Connexion ---
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& cheminFichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'-----------------
'
'... la requête ...
'
xSQL = "[A2:A7]"
Set request = New ADODB.Recordset
Set request = Source.Execute(xSQL)

MsgBox (request)

'--- Fermeture connexion ---
request.Close
Set request = Nothing
cn.Close
Set cn = Nothing

Hélas j'ai l'erreur d'exécution 424 ...

Merci d'avance
--
Cordialement

Winflow

6 réponses

  1. Contributeur
    si les données ne sont pas de m^me type on ne peut pas utiliser ADO ou difficilement...

    La solution possible avec des macrosXL4 dites de Walkenbach à adapter à ton contexte et à compléter (cheminfeuille, nomfeuille...)

    https://www.cjoint.com/?3KeocXOwfn4

    1
    1. Contributeur
      Bonjour,

      Sur quelle ligne se produit la 424 ?

      sur xSQL = "[A2:A7]" ?
      0
      1. Non sur
        Set request = Source.Execute(xSQL)

        0
        1. Contributeur
          Ok, c'est bien xSql qui est erroné :o)

          Je te propose une solution en début d'après midi mais pour éviter des complications "usine à gaz" il faudrait que tu rebaptises ta feuille avec un underscore
          "Informations_générales"

          mais comme tu importes peu de données ( 5)il y a peut-^tr + simple sans ouvrir le fichier...
          0
        2. très bien je le fait de suite
          0
      2. Contributeur
        Ci dessous proposition
        (tu n'as plus besoin de cocher les références ni de refermer à la fin)

        Sub ouvrir()
        Dim Source As Object
        Dim CheminFichier As String
        Dim NomFeuille As String, Plage As String, Texte_SQL As String
        Dim Requete As Object

        Set Source = CreateObject("ADODB.Connection")
        Set Requete = CreateObject("ADODB.Recordset")

        If Application.FileDialog(msoFileDialogFilePicker).Show = True Then
        'Définit le classeur fermé servant de base de données
        CheminFichier = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
        MsgBox (CheminFichier)
        Else
        MsgBox ("Veuillez cliquer sur ouvrir svp")
        Exit Sub
        End If

        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Informations_générales"
        ' Plage à importer
        Plage = "A2:A7"

        '--- Connexion ---
        With Source
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
        & CheminFichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        .Open
        End With
        '----- Requete -----
        Texte_SQL = "SELECT * FROM [" & NomFeuille & "$" & Plage & "]"
        Set Requete = Source.Execute(Texte_SQL)

        '--- restitution sur feuille classeur cible
        ActiveSheet.Range("B2").CopyFromRecordset Requete
        End Sub


        attention: les données doivent ^tre de m^me type dans A2:A7 ; nombre, date, texte....

        je t'envoie une autre méthode par macroXL4 un peu plus tard
        0
        1. Les données ne sont pas de même type dans ce cas comment faire ? Comment accéder aux données retournées ?
          0
          1. J'ai rien dit il y avait le débugger en route cela fonctionne je te remercie !

            Cordialement

            Winflow
            0
            1. Contributeur
              il faut dézipper et non ouvrir le zip mais:
              à adapter à ton contexte et à compléter (cheminfeuille, nomfeuille...)

              Tu as fait tout ça en 10 minutes (envoi à 14:05 ta réaction à 14:18 ) ??
              0
            2. Non non du tout je suis encore dessus seulement maintenant que j'ai la bonne fonction qui va bien que j'ai compris comme elle fonctionnait ça va mieux
              0