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. J'ai rien dit il y avait le débugger en route cela fonctionne je te remercie !

    Cordialement

    Winflow
    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 ) ??
    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
  2. 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. Les données ne sont pas de même type dans ce cas comment faire ? Comment accéder aux données retournées ?
      1. 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
        1. Non sur
          Set request = Source.Execute(xSQL)

          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...
          2. très bien je le fait de suite
        2. Contributeur
          Bonjour,

          Sur quelle ligne se produit la 424 ?

          sur xSQL = "[A2:A7]" ?