Bonjour à tous,
Je viens vers vous car je n'arrive pas à comprendre ce qui ne fonctionne pas dans mon code.
J'intègre dans mon code VBA une "requête SQL" pour extraire des données de ma GMAO.
J'utilise habituellement le CopyFromRecordset pour que ces données soient extraites d'un bloc sur une feuille excel, sans que cela ne me pose de problème.
Hors dans ce cas précis, le contenu des champs 5 et 6 de ma requête ne sont pas extraits, les colonnes 5 et 6 sont vides.
Du coup, j'ai essayer une autre méthode d'extraction des données ligne par ligne et pour le coup aucun problème, les champs 5 et 6 sont bien rapatriés.
Le problème c'est que le temps d'exécution est terriblement plus long.
Auriez-vous une idée ?
Merci par avance à vous, bonne journée
Je viens vers vous car je n'arrive pas à comprendre ce qui ne fonctionne pas dans mon code.
J'intègre dans mon code VBA une "requête SQL" pour extraire des données de ma GMAO.
J'utilise habituellement le CopyFromRecordset pour que ces données soient extraites d'un bloc sur une feuille excel, sans que cela ne me pose de problème.
Hors dans ce cas précis, le contenu des champs 5 et 6 de ma requête ne sont pas extraits, les colonnes 5 et 6 sont vides.
Du coup, j'ai essayer une autre méthode d'extraction des données ligne par ligne et pour le coup aucun problème, les champs 5 et 6 sont bien rapatriés.
Le problème c'est que le temps d'exécution est terriblement plus long.
Auriez-vous une idée ?
Merci par avance à vous, bonne journée
VB:
Sub DI_EXTRACT()
Dim cnn As ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As ADODB.Recordset
MethodeExtract = 1 'pour choisir la méthode d'extraction
Sqlstring = "SELECT CSWO_MR.CODE, CSWO_WO.CODE, CSWO_MR.WORKPRIORITY, CSWO_MR.DESCRIPTION, CSSY_DESCRIPTION.RAWDESCRIPTION, CSSY_STEP.DESCRIPTION"
Sqlstring = Sqlstring & " FROM (((CSWO_MR INNER JOIN CSSY_ACTOR ON CSWO_MR.ADDRESSEE_ID = CSSY_ACTOR.ID) LEFT JOIN CSWO_WO ON CSWO_MR.WO_ID = CSWO_WO.ID) LEFT JOIN CSSY_DESCRIPTION ON CSWO_MR.LONGDESC_ID = CSSY_DESCRIPTION.ID) INNER JOIN CSSY_STEP ON CSWO_MR.STATUS_CODE = CSSY_STEP.CODE"
Sqlstring = Sqlstring & " WHERE (((CSSY_ACTOR.CODE) = 'ENGINEERING_BE') And ((CSSY_STEP.STATUSFLOW_ID) = 'MRSTATUS'))"
Sqlstring = Sqlstring & " ORDER BY CSWO_MR.CREATIONDATE;"
Set cnn = New ADODB.Connection
cnn.Open "DSN=****;" & "Uid=****;" & "Pwd=****"
cmd.ActiveConnection = cnn
cmd.CommandType = ADODB.CommandTypeEnum.adCmdText
cmd.CommandText = Sqlstring
Set rs = New ADODB.Recordset
Set rs = cmd.Execute
With Sheets("Feuil1")
Select Case MethodeExtract
Case 1 'Extraction ligne/ligne
DerLigne = 2
Do While Not rs.EOF
.Cells(DerLigne, 2).Value = rs(0)
.Cells(DerLigne, 3).Value = rs(1)
.Cells(DerLigne, 4).Value = rs(2)
.Cells(DerLigne, 5).Value = rs(3)
.Cells(DerLigne, 6).Value = rs(4)
.Cells(DerLigne, 7).Value = rs(5)
DerLigne = DerLigne + 1
rs.MoveNext
Loop
Case 2 'Extraction en bloc
.Cells(2, 2).CopyFromRecordset rs
End Select
End With
rs.Close
cnn.Close
End Sub