Bonjour,

je butte sur un souci depuis 2 jours.
Je développe une macro Excel 2010 pour mettre en forme des données access.
Je souhaite faire un intersect sur deux tables différentes.

Dans ma première table, nommée Inscrits, je sélectionne les numéro de numéros de téléphone des inscrits (chaque numéro est unique).
Dans ma deuxième table, nommée TransactionsClient, je sélectionne les numéros de téléphone qui ont été actifs
J'arrive sans souci à charger mes résultats dans des Recordset nommés RS1 et RS2.

Maintenant, je souhaite créer un nouveau recordset RS3 qui contiendra les numéros de téléphones qui sont dans les deux bases.
Le but est de compter les numéros qui ont été actifs (numéros contenus dans les deux reccordset).

Resultat RS1
0202020202
0101010101
0303030303
0404040404
0505050505


Resultat RS2
0202020202
0909090909
0707070707
0505050505

Je souhaite obtenir le nombre de numéro RS1 contenu dans RS2 soit "2" dans mon exemple.

Voici mon code actuel :

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
 
    '''''''''''''''''''''''''''''''''''''''''''''''
    'Je charge un buffer avec les nouveaux inscrits
    'Je configure le type de connexion Access, et le chemin
    Set Cn1 = CreateObject("ADODB.Connection")
    strConnection1 = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "Inscrits.accdb"
    Cn1.Open strConnection1
    'Je détermine les variables
    Dim rs1 As New ADODB.Recordset
    Dim strSql1 As String
    'Je configure la requête SQL
    strSql1 = "SELECT NumeroTel FROM Inscrits WHERE Date >=#" & DateDebut & "# and Date <#" & DateFin & "#;"
    'Je lance la requête
    Set rs1 = Cn1.Execute(strSql1)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Je charge un buffer avec les numéros actifs
    'Je détermine les variables
    'Je configure le type de connexion Access, et le chemin
    Set Cn2 = CreateObject("ADODB.Connection")
    strConnection2 = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "TransactionsClient.accdb"
    Cn2.Open strConnection2
    'Je détermine les variables
    Dim rs2 As New ADODB.Recordset
    Dim strSql2 As String
    'Je configure la requête SQL
    strSql2 = "SELECT DISTINCT NumeroTel FROM TransactionsClient WHERE Type in ('actif') and Date >=#" & DateDebut & "# and Date <#" & DateFin & "# ;"
    'Je lance la requête
    Set rs2 = Cn2.Execute(strSql2)
Auriez-vous une idée sur la manière de procéder pour faire une telle intersection ?
Les RS1 et RS1 sont des recordset temporaires, si vous avez une autre métode pour faire un intersect sur deux tables contenues dans deux bases différentes, je suis preneur.

J'ai tenté de créer une boucle pour tester pour chaque enregistrement de RS1 s'il existe dans RS2 (si c'est le cas j'incrémente un compteur), mais cela ne fonctionne pas du tout

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
 
    Dim mycompteur As Long
    'Je sélectionne l'objet RS1 (qui contient les numéros inscrits)
    rs1.MoveFirst
    'J'effectue une boucle pour tous les enregistrements de RS1
    Do While Not rs1.EOF
        'Pour chaque enregistrement dans RS1 (clients inscrit)
        For fCount = 0 To rs1.Fields.Count - 1
            'Je cherche dans ma requête rs2 (actifs) la présence de chaque enregistrement rs1 (inscrit)
            rs2.Find "[MsisdnBeneficiaire]=" & rs1.Fields(fCount).Value, , adSearchForward, 1
            Do While Not rs2.EOF
                mycompteur = mycompteur + 1
            Loop
        'Je passe à l'enregistrement suivant
        Next fCount
        rs1.MoveNext
    Loop
    MsgBox "Resultat : " & mycompteur
Merci à tous.