Bonjour à tous,

Bon...comme bon nombre de personnes (je pense) je suis novice en la matière et vais tenter d'être le plus clair possible dans l'explication de mon problème.
Pardon d'avance pour la terminologie qui risque de ne pas être la bonne.

Alors voilà :

- D'un coté, je travaille avec une base SQL Server sur laquelle sont enregistrées toutes les transactions d'encaissements par personne et par machine.

- De l'autre côté, je réalise un fichier Excel (avec Macro VBA) dans lequel je récupère dynamiquement les données pour les formater dans un tableau sous la forme suivante :

Machine 1 (ligne 1, Colonne 2)      Machine 2 (ligne 1, Colonne 3)
Personne 1 (ligne 2, Colonne 2)      Personne 2 (ligne 2, Colonne 3)

Espèces (ligne 1, Colonne 1)       xxxx,xx € (ligne 1, Colonne 2)        xxxx,xx € (ligne 1, Colonne 3)
Chèques  (ligne 1, Colonne 1)      xxxx,xx € (ligne 1, Colonne 2)        xxxx,xx € (ligne 1, Colonne 3)
Carte Bleue  (ligne 1, Colonne 1)  xxxx,xx €  (ligne 1, Colonne 2)       xxxx,xx € (ligne 1, Colonne 3)
.....

Pour ce qui est de la réupération des Personnes, Machines et descriptions des encaissements...Pas de souci.
Mon problème se situe sur la récupération des valeurs des encaissements.
Pour cela, j'ai réaliser une boucle en SQL :

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
 
'-------------------------------------------------------------
'Sélection des valeurs de règlement par caisse et opérateur
'-------------------------------------------------------------
 
strSQL = "declare OPTI CURSOR READ_ONLY FAST_FORWARD FOR " & vbCrLf & _
            "select distinct operator_id, till_id " & vbCrLf & _
            "FROM transactions " & vbCrLf & _
            "where bookkeeping_date >='" & StartingDate & "' and bookkeeping_date <='" & EndingDate & "' " & vbCrLf & _
            "declare @op Int " & vbCrLf & _
            "declare @ti Int " & vbCrLf & _
            "Open OPTI " & vbCrLf & _
            "FETCH NEXT FROM OPTI INTO @op, @ti " & vbCrLf & _
            "WHILE (@@FETCH_STATUS = 0) " & vbCrLf & _
            "BEGIN " & vbCrLf & _
            "select coalesce(SUM(TPA.amount),0) TTL from trans_payments TPA " & vbCrLf & _
            "left outer join payments PA on PA.ID = TPA.payment_id " & vbCrLf & _
            "left outer join transactions TR on TR.ID = TPA.transaction_id " & vbCrLf & _
            "left outer join operators OP on OP.ID = TR.operator_id " & vbCrLf & _
            "left outer join tills TI on TI.ID = TR.till_id " & vbCrLf & _
            "where tr.bookkeeping_date >='" & StartingDate & "' and tr.bookkeeping_date <='" & EndingDate & "' " & vbCrLf & _
            "and TR.till_id = @ti " & vbCrLf & _
            "and TR.operator_id = @op " & vbCrLf & _
            "group by PA.description, TPA.payment_id, TR.operator_id, TR.till_id " & vbCrLf & _
            "order by PA.description " & vbCrLf & _
            "FETCH NEXT FROM OPTI INTO @op, @ti " & vbCrLf & _
            "End " & vbCrLf & _
            "Close OPTI " & vbCrLf & _
            "DEALLOCATE OPTI "
 
SqlDump (strSQL)
 
Set Table = Session.SelectTable(strSQL)
I = 7
Cells(7, 4).Select
 
For record = 0 To Table.RecordCount - 1
    Table.RecordIndex = record
    I = I + 1
    Cells(I, 5) = CStr(Table.fieldvaluebyName("TTL"))
 
   Table.gonext
Next
Cette boucle fonctionne bien sous sql server management en me renvoyant les différentes valeurs, mais dans mon tableau Excel je ne récupère que les 1ères valeurs de la 1er machine lié au la 1ere personne.

Pourriez vous, SVP, me dire comment faire pour que Excel puisse intégrer les différentes valeurs renvoyées par ma boucle SQL ?