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.
Partager