J'ai un tableau excel de Clients avec leur date d'inscription et le montant de transactions le jour de l'inscription.

Client Inscription_Date TransactionAmount
6580194354 01/09/2016
6591569785 01/09/2016
6580522050 01/09/2016
6580672633 01/09/2016
6590493203 01/09/2016
6590316048 01/09/2016
6580107441 02/09/2016
6580671133 02/09/2016
6580642995 02/09/2016
6592965155 03/09/2016
6590818648 03/09/2016

Je dois remplir la colonne 3 avec le montant de la première transaction effectuée par chaque client le jour de l'inscription (si une transaction n'est pas faite le jour de la transaction, je ne la considère pas).
Pour cela, j'ai une base de données Access avec toutes les transactions client, sur laquelle je fais mes requêtes.

Etape 1 - J'établis la liste de mes clients
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
                                'Je récupère la plage qui contient les clients
                                Set myRange_client = ActiveSheet.Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
                                'Pour chaque client
                                For Each cell_client In myRange_client
                                    'Je concatène l'ensemble des MSISDN dans une chaine (attention, la liste commence par une virgule qu'il faut retirer
                                    Listeclient = Listeclient & ",'" & cell_client.Value & "'"
                                 'Je passe à l'inscription suivante pour évluer le montant du cash-in
                                Next cell_client
                                'Je supprime la virgule en début de liste de Pdv
                                Listeclient = Mid$(Listeclient, 2)

Etape 2 : Je fais une requête pour charger un recordset qui contient les transactions des clients
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 'Je configure la requête SQL
strSql = "SELECT DISTINCT Client, Date, TransactionAmount FROM TransactionsClient WHERE Status Like 'Transaction Success' AND Payee IN (" & Listeclient & ") Order by Date;"
 
'Je lance la requête
Set rs = cn.Execute(strSql)
ETape 3 : Je parcours ma liste de client pour affecter le montant de la transaction qui a été effectuée le jour de l'inscription grâce à une recherche sur mon recordset
Le code m'a été souflé par dysorthographie hier, il marche bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
                                For Each cell In myRange_client
                                    rs.MoveFirst
                                    rs.Filter = "[" & rs(0).Name & "] ='" & .Cells(cell.Row, "A").Value & "' AND [" & rs(1).Name & "] ='"&.Cells(cell.Row, "B").Value&&'"
                                    If rs.EOF = False Then
                                        'S'il y a une transaction le jour de l'inscription pour le client en cours, j'inscris le montant dans la ligne
                                        .Cells(cell.Row, "D").Value = rs(2)
                                    Else
                                        'S'il n'y a pas de transaction le jour de l'inscription pour le client en cours, j'inscris 0
                                        .Cells(cell.Row, "D").Value = 0
                                    End If
                                Next cell
L'ensemble du code fonctionne mais il prend plus de 8H.
Est-ce qu'il y a une méthode qui pourrait me permettre d'obtenir un traitement bien plus rapide ?