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 :
Auriez-vous une idée sur la manière de procéder pour faire une telle intersection ?
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)
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
Merci à tous.
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
Partager