bonjour,
voila j'ai un probleme avec ma macro en vba.
en j'arrive a recuperer les données sans problemes.
mon probleme c au niveau des doublons. je m'explique j'aimerais que lors de l'extraction ma macro se connecte a ma base access et verifie si l'enregistrement existe deja, si c le cas alors on le met ajour sinon on l'ajoute comme nouvel enregistrement.
ma base se compose de deux tables, une table banque et une table facture.
vous trouvez ci dessous le code que j'ai ecrit.
voila merci de votre aide.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 Sub extraction() Dim cnt As New ADODB.Connection Dim Rst As New ADODB.Recordset Dim Rst1 As New ADODB.Recordset Dim i cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source= C:\Documents and Settings\Nicolas\Mes documents\bd1.mdb;" & _ "Jet OLEDB:Database" 'Ouverture de la table banque Rst.Open "banque", cnt, adOpenStatic, _ adLockOptimistic, adCmdTable ' on parcour la table jusqu'au dernier enregistrement With Rst Rst.MoveFirst While Rst.EOF = False 's'il existe If Worksheets("30-12").Range("G3") = Rst.Fields("N° banque") Then MsgBox ("mise à jour des données") Else Rst.MoveNext End If Wend Rst.MoveLast .AddNew 'Ajout de tout les champs ![N° banque] = Worksheets("30-12").Range("G3") ![nom banque] = Worksheets("30-12").Range("G4") .Update End With 'ouverture de la table facture Rst1.Open "facture", cnt, adOpenStatic, _ adLockOptimistic, adCmdTable For i = 7 To 65535 If Not IsEmpty(Range("A" & i)) Then 'tant qu'on ne tombe pas sur une ligne vide on extrait With Rst1 .AddNew ![N° facture] = Worksheets("30-12").Range("G2") ![nom fournisseur] = Worksheets("30-12").Range("A" & i) ![montant ttc] = Worksheets("30-12").Range("D" & i) ![Date] = Worksheets("30-12").Range("C" & i) ![decade] = Worksheets("30-12").Range("D2") ![N° banque] = Worksheets("30-12").Range("G3") .Update End With 'sinon on fait ça Else MsgBox ("extraction terminée") Exit For End If Next i Rst1.Close Rst.Close: cnt.Close End Sub
Partager