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 :
Voici mon code :
Et un visuel de mon UF :
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
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![]()
Partager