Bonjour à tous,
Je suis dans de l'incompréhension
Je suis modéliste et je construis différents projets comme une locomotive et un avion de la seconde guerre mondiale.
Par curiosité, j'aimerais savoir combien de vis j'ai installé sur ces projets en fonction de leurs type
Vu le nombre de type de vis différentes pour les différents projets, c'est trop compliqué de mettre à jour les données.
Car ces projets, se sont des fascicules que j'achète en magasin. Jusqu'à 140 pour certain d'entre eux.
Alors, j'essaie d'utiliser le SQL. C'est très facile.
(En théorie)
En pratique, il accepte sans rien dire "SELECT * FROM [Vis$]" et cela fonctionne
Par contre, si je lui demande "SELECT * FROM [Vis$] WHERE projet = 'Locomotive' " Il y a une erreur
"No value given for one or more required parameters" ...
Alors ...
Commençons par les explications pour comprendre:
Sur une feuille Excel s'appelant "Vis", il y a un tableau comme celui que je montre ci-dessous
La première ligne de la feuille Excel sont les titres. Dans l'exemple ci-dessous, se sont les mêmes titres que le vrai document.
Projet Fascicule AP BP Locomotive 001 7 4 Locomotive 002 0 2 Locomotive 003 8 6 AM6 Zero 001 4 0 AM6 Zero 002 2 6 AM6 Zero 003 2 2
Le code:
A) La connexion:
J'ai écris une procédure pour ouvrir une connexion
l'appel:
ouvre_connection("modelisme.xlsm")
status:
conn.state = 1 (connexion ouverte)
conn.state = 0 (connexion fermée)
Rien de sorcier. Cela fonctionne très bien
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 ' Variable publique: Public conn As ADODB.Connection Sub ouvre_connection(srcFile As String) ' srcFile : nom du fichier Excel Dim str As String Set conn = New ADODB.Connection If Len(srcFile) > 0 Then srcFile = Replace(srcFile, "http://", "\\") srcFile = Replace(srcFile, "/", "\") str = "Provider=Microsoft.ACE.OLEDB.12.0;" str = str & "Data Source=" & srcFile & ";" str = str & "Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";" conn.ConnectionString = str conn.CursorLocation = adUseClient If conn.State = 0 Then conn.Open End If End If End Sub
B - Accéder à l'information
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub test() Dim IndexArr, compteur Dim nom_fichier As String nom_fichier = "modélisme.xlsm" ouvre_connection (nom_fichier) GetData "Locomotive", "001", "BP", 5, False, outArr, compteur End SubPour information, j'ai déjà regardé sur votre site la formation que vous donnez sur le SQL et je l'ai essayé. Sans succès
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
44
45
46
47
48
49
50
51
52
53
54
55 Function GetData(Project As String, Fascicule As String, Vis_Type As String, QT_reçus As Integer, TTL As Boolean, outArr As Variant, compteur As Variant) ' IN: ' Project: Nom du projet contenant les différentes vis ' Fascicule: N° du fascicule à mettre à jour ' Vis_Type: Type de vis (majuscule) ' QT_reçus: Nombre de vis reçue Dim myRS As ADODB.Recordset Dim RS_n As Integer Dim RS_f As Integer Dim nbLigne As Integer Dim nbColonne As Integer Dim Arr Dim ct(1, 2) As Integer Set myRS = New ADODB.Recordset ' Le problème est ici:' ' Si je retire la clause WHERE, cela fonctionne ' Autrement, le code s'arrête avec l'erreur: "No value given for one or more required parameters" sqlstr = "SELECT * FROM [Vis$] WHERE Projet = " & Chr(34) & Project & Chr(34) myRS.Open sqlstr, conn, adOpenStatic, adLockReadOnly, adCmdText nbLigne = myRS.RecordCount nbColonne = myRS.Fields.Count If Not myRS.EOF Then ReDim Arr(1 To nbLigne, 1 To nbColonne) Do While Not myRS.EOF For RS_n = 1 To myRS.RecordCount 'lignes For RS_f = 0 To myRS.Fields.Count - 1 'colonnes valeur = myRS.Fields(RS_f).Value Arr(RS_n, RS_f + 1) = valeur Next myRS.MoveNext Next Loop End If myRS.Close Set myRS = Nothing ct(1, 1) = nbLigne ct(1, 2) = nbColonne outArr = Arr compteur = ct End Function
J'ai également regardé dans ce forum les différentes discussion qui traite le SQL ... Sans succès.
Je me suis promené sur "stackoverflow" et autre forum Excel. Sans succès.
Où se trouve mon erreur, je ne la voie pas !
Peut être que quelqu'un parmis vous la voyez !
Merci d'avance de votre aide.
André
Partager