Bonjour,
Je suis actuellement en train de développer une application VBA et je rencontre un problème au niveau des recordset je pense.
Le contexte de mon problème est le suivant: Je fais une requête SQL sur un fichier Excel fermé grâce à l'objet ADO et je stock le résultat dans un recordset. Mon recordset est dès lors interprété comme une table de base de donnée avec pour noms de champs la première ligne du tableau dans le fichier Excel.
Mon problème: Je veux faire afficher le contenu de certains enregistrements de mon recordset qui contiennent du texte. Le problème est que s'il y a trop de texte dans une cellule de mon tableau Excel, j'ai l'impression que le recordset ne prend qu'un certain nombre de caractères. Car je me retrouve avec une chaine de caractères coupée à un certain endroit et ne l'ai pas dans sa totalité ce qui m'embête fortement.
Je voulais donc savoir si c'est dû à la capacité d'un enregistrement de recordset qui serait très faible ou à autre chose. Je récupère le texte de l'enregistrement de mon recordset dans une variable string qui a une capacité de 63 Ko (par définition) donc qui ne devrait pas me poser problème.
Je vous donne mon code si jamais cela peut aider:
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| Sub RequeteClasseurFerme_Excel()
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset
Dim Rst1 As ADODB.Recordset
Set Rst1 = New ADODB.Recordset
Dim tableauLTR() As ltrObjectif
Dim titre3 As String, titre2 As String, titre1 As String, objdesc As String, nomacceptance As String
Dim itemPointe As String, ovvName As String
'Définit le classeur fermé servant de base de données
Fichier = "P:\LG_PF_OVV_L46D05023192_v8.xlsm"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Test Obj."
Set Cn = New ADODB.Connection
'--- Connexion ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'-----------------
'On définit la requête ...
'
Rst.CursorType = adOpenKeyset
Rst.CursorLocation = adUseClient
'On récupère dans le recordset le tableau Excel
Rst.Open "SELECT * FROM [" & NomFeuille & "$]", Cn, adOpenDynamic, adLockOptimistic
Rst.MoveFirst
While Not Rst.EOF
'On lit l'item selectionné dans le recordset
itemPointe = Nz(Rst![Objective Id])
If (itemPointe <> "NSS-FOD-PF-OVV-PI-680" Or itemPointe = Null) Then
Rst.MoveNext
ovvName = Nz(Rst![Objective Id])
Else
'on cherche la description correspondant à l'Ovv
objdesc = Nz(Rst![Objective Description])
While (objdesc = "" Or objdesc = " ")
Rst.MovePrevious
objdesc = Nz(Rst![Objective Description])
Wend
'on cherche l'acceptance criteria correspondant à l'Ovv
nomacceptance = Nz(Rst![acceptance criteria])
'on cherche le titre 1 correspondant à l'Ovv
titre1 = Nz(Rst![Platform Function])
While (titre1 = "" Or titre1 = " ")
Rst.MovePrevious
titre1 = Nz(Rst![Platform Function])
Wend
'On place le curseur à la fin du recordset car on a déjà trouvé l'OVV
Rst.MoveLast
Rst.MoveNext
End If
Wend
Rst.Close
Set Rst = Nothing
'On affiche toute les information liéees à l'OVV
MsgBox "Id objectif: " & ovvName & Chr(13) & _
"Description Objectif: " & objdesc & Chr(13) & _
"Acceptance criteria: " & nomacceptance & Chr(13) & _
"titre 3: " & titre3 & Chr(13) & _
"titre 2: " & titre2 & Chr(13) & _
"titre 1: " & titre1 & Chr(13)
'Je crée un fichier texte et écris les variables pour voir le contenu exact
Set FSys = CreateObject("Scripting.FileSystemObject")
Set MonFic = FSys.CreateTextFile("P:\fichier.txt")
With MonFic 'Pour écrire dans le fichier texte
.WriteLine "Id objectif: " & ovvName 'Mettre write pour ne pas sauter à la ligne
.WriteLine "Description Objectif: " & objdesc
.WriteLine "titre 3: " & titre3
.WriteLine "titre 2: " & titre2
.WriteLine "titre 1: " & titre1
.WriteLine "Acceptance criteria: " & nomacceptance
End With
Msg = "Écriture réussie dans fichier.txt"
MsgBox (Msg)
End Sub |
Je ne peux vous montrer le texte car développant une application dans le cadre professionnel, il m'est impossible de le copier coller (du moins je préfère éviter).
Toutefois, mon texte fait environ 360 caractères et mon recordset n'en prend que 250 ce qui est un peu plus de la moitié. "L'erreur" (entre guillemets car cela n'est pas bloquant en terme d'exécution) se produit sur l'instruction surlignée en rouge qui ne prend donc que la moitié du texte contenu dans l'enregistrement pointé par l'instruction "Rst![acceptance criteria]".
De plus, lors de l'exécution de l'instruction:
.WriteLine "Acceptance criteria: " & nomacceptance
une erreur se produit. Cette erreur est la suivante:
Erreur d'exécution '5':
Arguments ou appel de procédure incorrect
Si quelqu'un à une idée ??
Je vous remercie d'avance,
Thomas
Partager