Bonjour à tous,

C'est sûrement ma première publication sur developpez.net, mais j'ai pu me renseigner sur nombre de forums existants, et je n'ai pas encore trouvé de solution à mon problème.. Je vous remercie d'avance de l'attention que vous y porterez

Je suis actuellement en stage en entreprise, et un de mes travaux m'a mené à explorer l'utilisation du langage SQL sur des fichiers Excel lourds, intégré au code VBA (celui-ci étant trop lent pour faire ce que je souhaite). L'entreprise dans laquelle je suis fonctionne avec des fichiers Excel depuis un moment, il n'y a donc pas de possibilité de convertir ces fichiers en BD Access, ils sont d'ailleurs trop nombreux pour que je les transforme un par un, et mon but est de développer un outil qui leur sera utile après mon départ, donc à leur portée (sous Excel).

Voici mon problème :

Un fichier .xls contient un tableau (ne commençant pas à la ligne 1 malheureusement, mais à la ligne 3). Dans ce tableau, une colonne (la 7ème, donc G) peut contenir deux valeurs (vide ou "X"), et la première colonne indique une région. J'aimerai reporter dans une TextBox d'un UserForm les valeurs des colonnes 2, 3, 4, 5 et 6 de ce tableau si la 7ème colonne contient "X", ou est vide (choix fait par l'utilisateur par des boutons d'option), et si la colonne 1 correspond au choix fait par l'utilisateur dans une ComboBox. Je connais relativement bien les langages SQL et VBA pour Excel, mais je n'ai jamais travaillé auparavant en mélangeant les deux, et le fait que le fichier soit un .xls semble compliquer la tâche..
Quand j'exécute mon code, j'ai l'erreur : Nom : Erreur.PNG
Affichages : 224
Taille : 4,7 Ko

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Sub CommandButton1_Click()
    Dim Cn As ADODB.Connection
    Dim Fichier As String
    Dim NomFeuille As String, texte_SQL As String
    Dim Rst As ADODB.Recordset
 
    'Je travaille sur un réseau de fichier commun, tout le monde ne l'a pas installé sur le même disque, d'où la navigation par ChDir
    ChDir (ThisWorkbook.Path)
    ChDir ".."
    ChDir ".."
 
    'Les ComboBox permettent de déterminer le fichier que l'utilisateur veut consulter
    'ComboBox1 : initiales de la région ; 2 : Département ; 4 : numéro de mois ; 5 : type de contrôle
    Fichier = CurDir() & "\Source\VIGILANCE\Contrôles réalisés\" & ComboBox1.Value & "\" & ComboBox5.Value & "\Ctrl_réalisés_" & Left(ComboBox5.Value, 1) & "_" & ComboBox4.Value & "_2019.xls"
    NomFeuille = "Ctrl_réalisés_" & Left(ComboBox5.Value, 1) & "_" & ComboBox4.Value & "_2019"
 
    Set Cn = New ADODB.Connection
 
    With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & Fichier & _
            ";Extended Properties=Excel 8.0;"
        .Open 'L'erreur surligne cette ligne, mais débutant dans ce domaine, je ne vois pas comment résoudre le problème, sachant que l'extension du fichier doit rester .xls
    End With
 
    For Each bouton_conformite In Frame1.Controls
        If bouton_conformite.Value Then
            If bouton_conformite.Caption = "Conformes" Then
                texte_SQL = "SELECT * FROM [" & NomFeuille & "$] WHERE Conformes = 'X'"
            Else
                texte_SQL = "SELECT * FROM [" & NomFeuille & "$] WHERE Conformes = ''"
            End If
        End If
    Next
 
    Set Rst = New ADODB.Recordset
    Set Rst = Cn.Execute(texte_SQL)
 
    TextBox1.Value.CopyFromRecordset Rst
 
    Cn.Close
    Set Cn = Nothing
End Sub
Et un visuel de mon UF :

Nom : Capture.PNG
Affichages : 237
Taille : 11,9 Ko

Si quelqu'un aurait un indice à me donner (ou une solution) ça m'aiderait vachement !
Je sais qu'il existe d'autres solutions plus simples, mais elles nécessiteraient un temps conséquent, et le but de mon stage reste d'apprendre de nouvelles façons de faire et de me confronter à de nouveaux problèmes.
Je sais aussi qu'il y aura un problème venant du "WHERE" de ma requête, sachant que les entêtes ne se situent pas sur la première ligne du fichier, mais ce n'est pour le moment pas le problème..
J'ai copié les chemins directement depuis l'explorateur de fichier, de même pour le nom des feuilles, en remplaçant seulement les informations changeant d'un fichier à l'autre.

Merci à ceux qui auront essayé ou eu le courage de tout lire !

Et bonne journée à tous