Double boucle sur objet recordset
Bonsoir tout le monde,
Je viens vous demander de l'aide car je bloque totalement sur un petit projet pour lequel j'ai été mandaté.
Dans mon projet, j'ai une base de donnée contenant une liste de serveur ainsi que des dates de production de ces serveurs par journée (01.01.2014 - 02.01.2014 - 03.01.2014 - etc.). Tous les serveurs ne fonctionnent pas forcément tous les jours.
Avec une macro excel je dois effectuer des requêtes SQL sur ma base de donnée. Pour celà c'est bon j'arrive à me connecter à ma base de donné et à faire des requêtes sur celle-ci comme par exemple récupérer ma liste de serveur suivant des dates ou encore récupérer ma liste de serveur tout simplement.
J'utilise l'objet recordset.
Maintenant le problème c'est que je dois pouvoir récupérer une liste de serveurs qui ont fonctionné en production entre deux dates (ex : 01.01.2014 et 31.01.2014) et sur cette liste de serveurs je devrai mettre en couleur les serveurs qui n'ont pas fonctionné pendant ou moins 1 jour etc.. Je me dis qu'il faut que je vérifie une date après l'autre pour chacun de ces serveurs donc effectuer une double boucle (une boucle sur les serveurs et une boucle sur les dates). Toutefois je ne vois pas du tout comment faire avec un objet comme recordset. J'ai cherché sur google mon ami si je pouvais trouver un début de solution à mon problème mais sans succès.
Est-ce que l'un d'entre vous à t-il déjà effectuer une double boucle de la sorte avec un object recordset ?
Voici mon code pour plus de précision :
Code:
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
| Option Explicit
Sub DataExtract()
' 1) et 2) Create a connection object.
' 3) Provide the connection string.
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
Dim strConn As String
' Create a recordset object.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim Rowcnt, Fieldcnt As Integer
Rowcnt = 2
'Connect to the Pubs database on the local server. A METTRE EN VARIABLE PUBLIC
strConn = "PROVIDER=SQLOLEDB;" & _
"Server=SQLEXPRESS;" & _
"Database=Server;" & _
"UserID=id; Password=*****; Trusted_Connection=yes"
'Now open the connection.
cn.Open strConn
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
With rs
.ActiveConnection = cn
.Open "SELECT DISTINCT Serveur FROM test WHERE date BETWEEN '01/01/2014' AND '31/01/2014'"
End With
While Not rs.EOF
For Fieldcnt = 0 To rs.Fields.Count - 1
Cells(Rowcnt, Fieldcnt + 1).Value = _
rs.Fields(Fieldcnt).Value
Next Fieldcnt
rs.MoveNext
Rowcnt = Rowcnt + 1
Wend
' Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub |