Bonjour à tous,

Vous l'aurez deviné, je suis bloqué et j'ai besoin de vous pour me dépatouiller...

Alors voilà, je voudrais exporter des données qui sont dans une base de données Oracle pour les importer dans ma feuille Excel en fonction des informations qui se trouvent dans les cellules de ma feuille. Au stade actuel, les 3 premières colonnes sont remplies de ces infos, et grâce au données venant de la base de données je voudrais remplir la 4ème colonne.

Voilà ce que j'ai fait pour le moment sous VBA :

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
56
57
58
59
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=xxxxx;User ID=xxxxx;Password=xxxxx"

objCon.Open strCon

Set rnArea = Worksheets(1).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
    strTestID = Cells(rnCell.Row, 4).Value
If intRow <> rnCell.Row Then
     intRow = rnCell.Row

sSQL = "SELECT aliquot.name ALIQUOT, test.name TEST, result.formatted_result RESULT, test.test_id ID"
sSQL = sSQL + "  FROM AA,"
sSQL = sSQL + "       BB,"
sSQL = sSQL + "       aliquot,"
sSQL = sSQL + "       test,"
sSQL = sSQL + "       result"
sSQL = sSQL + " WHERE AA.AA_id = BB.AA_id"
sSQL = sSQL + "   AND BB.BB_id = aliquot.BB_id"
sSQL = sSQL + "   AND aliquot.aliquot_id = test.aliquot_id"
sSQL = sSQL + "   AND test.test_id = result.test_id"
sSQL = sSQL + ""
sSQL = sSQL + "   AND aliquot.name = '" & strAliq & "' "
sSQL = sSQL + "   AND test.name = '" & strTest & "' "
sSQL = sSQL + "   AND formatted_result = '" & strResult & "' "

            Set rsResult = objCon.Execute(sSQL)
            
            
            rsResult.Close
            rsResult.CursorType = adOpenStatic
            rsResult.Open
            rsResult.MoveFirst
      Else: rsResult.MoveFirst
End If

Next

objCon.Close

End Sub

La query SQL est ok parce si je l'a fait tournée en entrant une vraie valeur (plutôt que " & strAliq & " etc.) et il n'y a aucun souci, je trouve ce que je cherche à mettre dans la 4ème colonne.
Mais comme il y a pour le moment 4392 lignes, j'attends un soutien d'Excel pour le faire pour moi.
Si je poste ici c'est parce que la macro échoue et me renvoie : "Run-time error '3021': Either BOF or EOF is true, or the current record has been deleted. Requested operation requires a current record."

En débug la flèche jaune m'inque la ligne 51 que j'ai mise en gras ici.

Quelqu'un peut m'aider à décortiquer ce qui se passe mal svp ?

Ce que je souhaite, c'est que la macro lise les données reprises dans les 3 colonnes, remplacent ces données dans la query pour finalement mettre dans la 4ème colonne l'ID qui leur correspond et ainsi de suite pour chaque ligne.

Je vous remercie, j'espère que ce n'est trop obscur comme explication.