Bonjour à tous,
J'ai l'impression de ne pas être très loin de la réussite et j'ai besoin d'un coup de pouce de l'un de vous svp.
J'ai un tableau Excel composé de 4 colonnes, les 3 premières sont remplies et la dernière est vide. En fait, cette dernière colonne peut être remplie grâce à une connexion aux tables de ma base de données.
J'ai trouvé le moyen de dire à Excel "lis ce qu'il y a dans la colonne A, la colonne B et la colonne C pour l'insérer dans la query". Je pense qu'il ne me reste plus que l'étape "compare ces 3 informations avec la base de données et copie le résultat de la query dans la colonne D" ... c'est là que j'ai besoin de vous.
Mon tableau ressemble à ça :
A --------B ----- C ------- D
Aliquot1 Test1 Resultat1
Aliquot2 Test2 Resultat2
Aliquot3 Test3 Resultat3
Et voici le code que j'ai déjà écrit :
Si je remplace dans la query la valeur de la première ligne, j'obtiens ça:
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 Sub Find_testID() Dim rnCell As Range Dim rnArea As Range Dim rsResult As Recordset Dim strCon As String Dim objCon As New Connection Dim sSQL As String Dim strAliq As String Dim strTest As String Dim strResult As String Dim strTestID As String Dim intRow As Integer strCon = "Provider=MSDAORA;Data Source=xxxx;User ID=xxxx;Password=xxxx" objCon.Open strCon Set rnArea = Worksheets(3).Range("info") For Each rnCell In rnArea strAliq = Cells(rnCell.Row, 1).Value strTest = Cells(rnCell.Row, 2).Value strResult = Cells(rnCell.Row, 3).Value If intRow <> rnCell.Row Then intRow = rnCell.Row sSQL = "SELECT aliquot.name," sSQL = sSQL + " test.name," sSQL = sSQL + " result.result," sSQL = sSQL + " test.test_id" sSQL = sSQL + " FROM aliquot," sSQL = sSQL + " test," sSQL = sSQL + " result" sSQL = sSQL + " WHERE aliquot.aliquot_id = test.aliquot_id" sSQL = sSQL + " AND test.test_id = result.test_id" sSQL = sSQL + " AND aliquot.name = '" & strAliq & "'" sSQL = sSQL + " AND test.name = '" & strTest & "'" sSQL = sSQL + " AND result.result = '" & strResult & "'" Set rsResult = objCon.Execute(sSQL) rsResult.Close rsResult.CursorType = adOpenStatic rsResult.Open rsResult.MoveFirst Else: rsResult.MoveFirst End If strTestID = Cells(rnCell.Row, 4).Value Next objCon.Close End Sub
Aliquot - Test -- Resultat --- TestID
Aliquot1 Test1 Resultat1 123547
Je serai donc ravi de voir apparaître dans la colonne D le 123547
Vu qu'il y a plus de 4000 lignes, j'aimerai faire tourner une macro qui se connecte directement à la base de données pour copier le TestID dans la colonne D. Mais quand je fais ça, il ne se passe rien.
Comment puis-je dire dans la macro "mets-moi le TestID dans la colonne D puis passe à la ligne suivante".
Je vous remercie pour vos conseils.
- Henri
Partager