Récuperer dans une table des lignes qui ont été supprimées en comparant 2 autres

spap Messages postés 13 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 18 janvier 2006 - 17 janv. 2006 à 12:18
spap Messages postés 13 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 18 janvier 2006 - 18 janv. 2006 à 09:40
Bonjour,

n'étant pas une star du développement mais ayant quelques notions j'ai développé pour mon boulot un petit programme qui me permet de comparer 2 fichiers excel qui va supprimer dans la table2 les lignes identiques à la table1 selon certains champs que je définie au préalable. J'importe bien entendu ces 2 fichiers dans Access pour lancer mon programme.

Voilà à quoi il ressemble :


Option Compare Database


Dim DBNico As Database


Dim Tbl1 As Recordset


Dim Tbl2 As Recordset




Private Sub Cmdlancer_Click()






Set DBNico = DBEngine.Workspaces(0).Databases(0)


Set Tbl1 = DBNico.OpenRecordset("Table1", DB_OPEN_TABLE)


Set Tbl2 = DBNico.OpenRecordset("Table2", DB_OPEN_TABLE)


Dim I As Integer




Tbl1.MoveFirst


Tbl2.MoveFirst


I = 0


While Not Tbl1.EOF


While Not Tbl2.EOF


If Tbl1!CP Tbl2!CP And Tbl1!NOM Tbl2!NOM And Tbl1!ADR = Tbl2!ADR Then


Tbl2.Delete


I = I + 1


End If


Tbl2.MoveNext


Wend


Tbl2.MoveFirst


Tbl1.MoveNext


Wend


Tbl1.Close


Tbl2.Close


txtval.Visible = True


txtval = I


End Sub




Private Sub Form_Load()


txtval.Visible = False


End Sub

Le problème c'est que maintenant j'aimerai bien mettre dans une 3ème table les lignes qui ont été supprimées, j'ai pensé qu'en créant et important un 3ème fichier Excel ayant des champs identiques je pourrai y arriver mais je ne sais pas si cette 3ème table se déclare comme les 2 autres (apparemment pas), ni comment faire pour lui donner l'instruction de type Tbl3(J) = Tbl1(I) qui va lui permettre de recevoir la ligne souhaitée. J'ai pensé aussi créer une variable du même type que mes tables pour agrémenter ma 3ème table mais je ne connais pas la syntaxe adéquate. En bref je suis dans le flou et j'aurai besoin d'aide.

J'espère avoir été claire et recevoir quelques conseils.

Merci

3 réponses

spap Messages postés 13 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 18 janvier 2006
17 janv. 2006 à 12:37
Je remets le code car ce n'est pas bien lisible dans le message précédent.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 janv. 2006 à 19:07
Salut
Ta recherche peut se limiter à une requète SQL :
strSQL = "Delete From Table1 " & _
" where (champ1 + champ2 + ... + champX) " & _
" in (Select champ1 + champ2 + ... + champX" & _
" from Table2)"
J'ai bien mis + entre les champs pour qu'il fabrique une chaine de recherche comportant tous les champs
et ainsi être sûr que cette même fiche complète existe dans l'autre table.
tonRecordSet.Execute strSQL, taConnexion, r ' = syntaxe ADODB, je ne connais pas celle que tu utilises
'r' te fournira le nombre de fiches concernées par la méthode Delete.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
spap Messages postés 13 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 18 janvier 2006
18 janv. 2006 à 09:40
Merci, la requête marche du feu de dieu et est plus efficace que le code que j'avais créé cependant je ne comprends pas bien la suite de ton message : tonRecordSet.Execute strSQL, taConnexion, r ' = syntaxe ADODB
En effet je n'ai pas l'instruction "Execute" dans le code VBA.

Si tu pouvais m'éclairer à nouveau ça serait sympa.
0
Rejoignez-nous