Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/12/2010, 08h41   #1
Membre à l'essai
 
Inscription : mai 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 81
Points : 21
Points : 21
Par défaut traque aux doublons

Bonjour,
Dans une table susceptible d'avoir des modifications de classement, j'ai besoin de traquer les doublons et de tout renuméroter si cela advenait
pour ce faire, j'ai imaginé un code qui repère les doublons :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public FunctionDouble()
Dim RsGlobal As New ADODB.Recordset
Dim RsFiltre As New ADODB.Recordset
RsGlobal.Open "table", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do Until RsGlobal.EOF
RsFiltre.Open "table", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
RsFiltre.Filter = "[N°table]=" & RsGlobal("N°table")
If RsFiltre.RecordCount > 1 ThenDouble = RsFiltre("N°table")
Exit Do
End If
RsGlobal.MoveNext
RsFiltre.Close
Set RsFiltre = Nothing
Loop
RsGlobal.Close
Set RsGlobal = Nothing
End Function
puis, si numéro double trouvé, de tout numéroter à partir de ce double :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Function TABLE()
Dim test As Integer
test =Double
Dim i
Dim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "table", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.Sort = "[N°table]ASC"
Do Until rs.EOF
If rs("N°table") > test - 1 Then
i = i + 1
rs("N°table") = test + i
rs.Update
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Function
mais il génère de nouveaux doublons et il me faut plusieurs passages
où est mon erreur ?
merci de vos conseils
Lou
Lou17 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 11h57   #2
Expert Confirmé Sénior
 
Avatar de jacques_jean
 
Homme Jacques THERY
CBPDI(Congés Bien Payés/Durée Indéterminée)
Inscription : janvier 2006
Messages : 3 107
Détails du profil
Informations personnelles :
Nom : Homme Jacques THERY
Âge : 67
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : CBPDI(Congés Bien Payés/Durée Indéterminée)

Informations forums :
Inscription : janvier 2006
Messages : 3 107
Points : 5 386
Points : 5 386
Bonjour,

Peut-être, regarder ici :

http://access.developpez.com/faq/?pa...reerSonNumAuto

http://access.developpez.com/faq/?pa...#ReinitNumAuto

http://sqlpro.developpez.com/cours/doublons/

Cela dit, il y a quelques années que n'ai plus travaillé avec Access, mais dans cette partie du code :

Code :
1
2
3
4
5
If rs("N°table") > test - 1 Then
i = i + 1
rs("N°table") = test + i
rs.Update
End If
on trouve i = i + 1, mais où la variable "i" est-elle initialisée ?
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 17h11   #3
Membre à l'essai
 
Inscription : mai 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 81
Points : 21
Points : 21
voici la solution trouvée et cela fonctionne

Code :
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
Code :
12345678910111213141516171819
Public Function Arrière(CeQuilEst As Integer, CeQuilDevient As Integer)
Dim rs As New ADODB.Recordset
rs.Open "Table", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do Until rs.EOF
    Select Case rs("N°Table")
        Case CeQuilEst To CeQuilDevient
            If rs("N°Table ") = CeQuilEst Then
                rs("N°Table ") = CeQuilDevient
                rs.Update
                Else
                rs("N°Table ") = rs("N°Table ") - 1
                rs.Update
            End If
    End Select
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Function
Code :
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
Code :
1234567891011121314151617181920
Public Function Avant(CeQuilEst As Integer, CeQuilDevient As Integer)
Dim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "Table", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do Until rs.EOF
    Select Case rs(“N°Table ")
        Case CeQuilDevient To CeQuilEst
            If rs("N°Table ") = CeQuilEst Then
                rs("N°Table ") = CeQuilDevient
                rs.Update
                Else
                rs("N°Table ") = rs("N°Table ") + 1
                rs.Update
            End If
    End Select
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Function
Code :
1
2
3
4
5
6
7
8
9
10
11
Public Function ProcédureGénérale(CeQuilEst As Integer, CeQuilDevient As Integer)
'Dim CeQuilEst As Integer
'Dim CeQuilDevient As Integer
'CeQuilEst = 3
'CeQuilDevient = 10
If CeQuilEst > CeQuilDevient Then
ProcédureGénérale = Avant(CeQuilEst, CeQuilDevient)
Else
ProcédureGénérale = Arrière(CeQuilEst, CeQuilDevient)
End If
End Function
Lou17 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h05.


 
 
 
 
Partenaires

Hébergement Web