Bonjour à tous!
Toutes mes excuses si le cas ait déjà été traité, je vous avoue que google ne m'a pas servi grand-chose sur mon problème.
Je suis nouveau dans le milieu de la programmation et je travaille sur un petit projet. Voilà j'explique mon problème.
J'ai créé un Userform qui contient des TextBox et Une Listview.
Je commence à saisir mes données dans les TextBox, qui sont envoyées dans la Listiview. A l'aide d'un bouton commande le tout est envoyé dans une feuille excel puis transféré dans une base de données access.
Le tout semble fonctionner à mon goût jusqu'après le transfert de données dans access, dont ce dernier à chaque nouvel enregistrement crée des doublons des opérations déjà enregistrées.
Je m'excuse si l'explication n'est pas aussi claire. Je ne pourrai pas poster le fichier car il est très lourd. Voici mon code
Ma question est Y aurait-il une manière d'éviter les doublons?
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 Dim cn As ADODB.Connection, rs As ADODB.Recordset, chemin As Variant, source As Variant chemin = ActiveWorkbook.Path source = "C:\GMAA" & "\JMFJCA1.mdb" Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & source & ";" ' open a recordset Set rs = New ADODB.Recordset rs.Open "[JOURNAL DE CAISSE 1]", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' all records in a table r = 2 ' the start row in the worksheet Do While Len(Range("A" & r).Formula) > 0 ' repeat until first empty cell in column A With rs .AddNew ' create a new record ' add values to each field in the record .Fields("N° ECRITURE") = Sheets(21).Range("A" & r).Value .Fields("N° LOT") = Sheets(21).Range("B" & r).Value .Fields("DATE ENRG") = Sheets(21).Range("C" & r).Value .Fields("DATE OPER") = Sheets(21).Range("D" & r).Value .Fields("DATE VALEUR") = Sheets(21).Range("E" & r).Value .Fields("N° PIECE OPER") = Sheets(21).Range("F" & r).Value .Fields("CPTE DEBIT") = Sheets(21).Range("G" & r).Value .Fields("CPTE CREDIT") = Sheets(21).Range("H" & r).Value .Fields("LIBELLE DE L'ECRITURE") = Sheets(21).Range("I" & r).Value .Fields("MONTANT DEBIT") = Sheets(21).Range("J" & r).Value .Fields("MONTANT CREDIT") = Sheets(21).Range("K" & r).Value .Fields("NOUVEAU SOLDE") = Sheets(21).Range("L" & r).Value .Update ' stores the new record End With r = r + 1 ' next row Loop rs.Close Set rs = Nothing cn.Close Set cn = Nothing
Sinon à force de me creuser les méninges en lisant des fichiers pdf sur ADO j'ai trouvé une première approche du problème mais un peu dangereuse je le pense.
Il s'agit de réinscrire les données à chaque nouvel enregistrement avec ce code:
Mais le problème est en cas de plantage de mon programme lors de la validation de données je risquerai peut être de perde les anciennes données avant envoi dans ma base.
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 Dim cnE As ADODB.Connection, rsE As ADODB.Recordset, chemin2 As Variant, source2 As Variant chemin2 = ActiveWorkbook.Path source2 = "C:\GMAA" & "\JMFJCA1.mdb" Set cnE = New ADODB.Connection cnE.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & source2 & ";" ' open a recordset Set rsE = New ADODB.Recordset rsE.Open "[JOURNAL DE CAISSE 1]", cnE, adOpenKeyset, adLockOptimistic, adCmdTable ' all records in a table While Not rsE.EOF rsE.Delete ' stores the new record rsE.MoveNext Wend rsE.Close Set rsE = Nothing cnE.Close Set cnE = Nothing
Si vous voyez d'autres approches, j'attends patiemment votre aide.
Merci d'avance.
Partager