ACCESS : Retrouver des doublons et modifier leurs enregistrements
cs_el sargento
Messages postés2Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention13 août 2004
-
13 août 2004 à 15:44
cs_el sargento
Messages postés2Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention13 août 2004
-
13 août 2004 à 17:17
Salut à tous,
Merci de prendre quelques instants pour regarder le bout de code VBA ACCESS suivant, et me dire comment l'améliorer.... parce que moi là "je sais plus"
Contexte : je remplis une table à partir d'une requête ajoût, et dans cette table je cherche les doublons du champs "REF" pour modifier les champs "QTE" et "TOTAL_HT" uniquement du ou des doublon(s) - et pas de "l'original".
J'ai écrit un bout de code qui (selon moi):
1. Va chercher les enregistrements des 3 champs concernés et opère un tri sur les REF (références)
2. Se place sur le premier
3. Enregistre la valeur dans la variable A passe à la référence suivante (dans le champs "REF") et enregistre celle-ci dans la variable B
4. Comparaison des deux variables : si elles sont égales (ie doublon) alors changement des champs correspondant à la référence, et passage à la référence suivante.
Si elles sont différentes alors on passe à la réféence suivante.
5. et ainsi de suite jusqu'à la fin de la table.
Le problème :
1. Lorsque je lance la moulinette, j'ai un message "Dépassement" de capacité"
2. Quand je vais voir dans la table : un certain nombre de champs ont bien été modifiés selon les critères voulus mais pour des références avec plusieurs doublons cela n'a pas fonctionné...
Avez-vous une idée pour rendre ce traitement plus efficace et fiable ?
VOici le code :
'Ouverture de la table créée et comparaison des REF'
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim A, B As Integer
Set db = CurrentDb()
Set rst = db.OpenRecordset("Select REF, QTE_VENDUE, TOTAL_HT from ACHATS_AVEC_VENTES order by REF")
rst.MoveFirst
Do Until rst.EOF = True
A = rst![REF]
rst.MoveNext
B = rst![REF]
'Modification des champs QTE_VENDUE et TOTAL_NET_HT'
If A = B Then
rst.Edit
rst![QTE_VENDUE] = "0"
rst![TOTAL_HT] = Null
rst.Update
rst.MoveNext
Else
rst.MoveNext
End If
Loop
rst.Close
Set rst = Nothing
Set db = Nothing
El Sargento
A voir également:
ACCESS : Retrouver des doublons et modifier leurs enregistrements
cs_NAKKAR
Messages postés8Date d'inscriptionvendredi 16 juillet 2004StatutMembreDernière intervention28 octobre 2004 13 août 2004 à 16:31
salut le pro pour je vois les chose d'unre autre manier
1-Une Rs_ListRef
2_Une Rs_List3Champ
3-un Petit code le voila
'--------------------------------------
Dim db As DAO.Database
Dim Rs_ListRef ,Rs_List3Champ As DAO.Recordset
Set db = CurrentDb()
Set Rs_ListRef = db.OpenRecordset("Select REF order by REF")
Rs_ListRef.MoveFirst
Do While Not RS_ListRef.EOF
Set Rs_List3Champ= db.OpenRecordset("Select REF,
QTE_VENDUE, TOTAL_HT FROM ACHATS_AVEC_VENTES order
by REF WHERE REF ="& Rs_ListRef ("Ref") &"")
if Rs_List3Champ.recordcount > 0 then
do While Not Rs_List3Champ.EOF
Rs_List3Champ.Edit
Rs_List3Champ("QTE_VENDUE") = "0"
Rs_List3Champ("TOTAL_HT") = Null
Rs_List3Champ.Update
Rs_List3Champ.MoveNext
loop
End If
Rs_ListRef.Movenext
loop
Rs_List3Champ.Close
Set Rs_ListRef= Nothing
Set db = Nothing
cs_el sargento
Messages postés2Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention13 août 2004 13 août 2004 à 17:17
D'abord un grand merci pour ta réponse....
Sur le papier, c'est effectivement bien vu et puis l'inclusion de variable dans la requête SQL : je cherchais désespérément comment faire.
Seulement dans la pratique quand je la lance l'appli j'ai un message d'erreur : "Trop peu de paramétre. 1 attendu"
Qu'est-ce que j'ai mal fait ?
PS : dans le ("Select REF, QTE_VENDUE, TOTAL_HT FROM ACHATS_AVEC_VENTES order by REF WHERE REF ="& Rs_ListRef ("Ref") &"")
... j'ai dû retirer le "order by REF" qui donnait le message suivant "erreur de syntaxe (opérateur absent) dans l'expression "REF WHERE REF = 10142" "
(10142 étant la première REF de ma table)