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 14/09/2011, 16h41   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2011
Messages : 53
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 53
Points : 11
Points : 11
Par défaut Numérotation auto personnalisée

Bonjour,

j'ai un petit problème pour enfin terminer ma base de données
le problème dépend des 4 tables suivantes:

--------.................----------................-----------..............------------
Ligne ** 1--n ** Itineraire ** 1--n *** ArretLigne ** n--1 ** PointArret
--------.................---------................------------...............------------
IndiceInterne.......ID_Itineraire..............ID_ArretLigne...........Num_GIPA
............................................................ID_Itineraire
............................................................Num_GIPA
............................................................Num_Arret

IndiceInterne: numérique
ID_Itineraire: texte
ID_Ligne: Numéro Auto
Num_GIPA: Numérique (Identifiant Point d'arrêt)
Num_Arret: Numérique

je souhaite avoir ce type de résultat:


Ligne......Itineraire............ID_ArretLigne.............Num_Arret.......Num_GIPA
1..............1a.......................1............................1...................20
1..............1a.......................2............................2...................18
1..............1a.......................3............................3...................361
1..............1a.......................4............................4...................402
1..............1a.......................5............................5...................403

1..............1r........................6............................1...................221
1..............1r........................7............................2...................21
1..............1r........................8............................3...................36
1..............1r........................9............................4...................49
1..............1r.......................10...........................5...................512

2..............2a.......................11...........................6...................299
2..............2a.......................12...........................1...................921
2..............2a.......................13...........................2...................514
2..............2a.......................14...........................3...................76
2..............2a.......................15...........................4...................645
2..............2a.......................16...........................6...................984
2..............2a.......................17...........................7...................12

2..............2r.......................18............................1...................20
2..............2r.......................19............................2...................27
2..............2r.......................20............................3...................361
2..............2r.......................21............................4...................555
2..............2r.......................22............................5...................425
2..............2r.......................23............................6...................610
2..............2r.......................24............................7...................222

Pour cela j'ai utilisé le code suivant:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Private Sub Form_Current()
End Sub
 
Private Sub Form_Open(Cancel As Integer)
'en ouvrant nous établissons l'ordre pour le formulaire
    Me.OrderBy = "Num_Arret"
    Me.OrderByOn = True
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
    'Nous contrôlons qu'on ne laisse pas un "trou" en introduisant un nouveau nombre
    If Nz(Me.Num_Arret, 1) > Nz(DMax("Num_Arret", "ArretLigne") + 1, 1) Then
        Me.Num_Arret = Nz(DMax("Num_Arret", "ArretLigne") + 1, 1)
    ElseIf IsNull(Me.Num_Arret) Or Me.Num_Arret < 1 Then
        Me.Num_Arret = Nz(DMax("Num_Arret", "ArretLigne") + 1, 1)
    End If
End Sub
 
Private Sub Num_Arret_AfterUpdate()
    Dim strSql As String
 
    'Nous interdisons le 0 le remplaçant par le max + 1 de la table
    If Me.Num_Arret = 0 Then
        Me.Num_Arret = Nz(DMax("Num_Arret", "ArretLigne") + 1, 1)
    End If
 
    'Nous contrôlons qu'on ne laisse pas un "trou" en introduisant un nouveau nombre
    ' En cas de suppression, il faudrait adapter le code de Maxence
    ' Voir => http://access.developpez.com/faq/?page=Champs#DelNumAutoHoles
    If Nz(Me.Num_Arret, 0) > Nz(DMax("Num_Arret", "ArretLigne") + 1, 1) Then
        Me.Num_Arret = Nz(DMax("Num_Arret", "ArretLigne") + 1, 1)
    End If
 
 'En cas d'assignation d'un nombre à une case qui était vide (Nouvel enregistrement)
    If IsNull(Me.Num_Arret.OldValue) And Not IsNull(Me.Num_Arret) Then
        strSql = "UPDATE ArretLigne SET Num_Arret = Num_Arret + 1 WHERE Num_Arret >= " & Me.Num_Arret & _
                 " AND ID_ArretLigne <> " & Me.ID_ArretLigne & ""
 
        'Au cas de nouvelle valeur plus petite que l'ancienne
    ElseIf Me.Num_Arret < Me.Num_Arret.OldValue Then
        strSql = "UPDATE ArretLigne SET Num_Arret = Num_Arret + 1 WHERE Num_Arret Between " & Me.Num_Arret & _
                 " AND " & Me.Num_Arret.OldValue & " AND ID_ArretLigne <> " & Me.ID_ArretLigne & ""
 
        'Au cas de nouvelle valeur plus grande que l'ancienne.
    ElseIf Me.Num_Arret > Nz(Me.Num_Arret.OldValue, 0) Then
        strSql = "UPDATE ArretLigne SET Num_Arret = Num_Arret - 1 WHERE Num_Arret Between " & Me.Num_Arret.OldValue & _
                 " AND " & Me.Num_Arret & " AND ID_ArretLigne <> " & Me.ID_ArretLigne & ""
    Else
        strSql = ""
    End If
 
    If strSql <> "" Then
        CurrentDb.Execute strSql
    End If
    'Nous mettons à jour à nouveau pour refléter les changements
    Me.Requery
 
End Sub
1° problème:
Lorsque j'ajoute un arret entre 2 arrets j'ai bien l'arrêt qui est créé, exemple:
je cré une un arrêt entre les Num_Arret 2 et 3 sur l'itinéraire 1a-->
je lui donne le numéro 3 et il se place comme il faut et les arrêts qui suivent s'incrémentent de +1

Mais quand je fais ceci le Num_Arret 3 disparait pour les itinéraires 1r, 2a et 2r

2° problème:
Lorsque je supprime un arrêt, par exemple le Num_Arret 4 sur l'itinéraire 2a, celui-ci est bien effacé mais les suivants ne se décrémente pas de -1

Comment faut-il modifier le code pour faire disparaitre ces erreurs???

Merci d'avance pour votre aide
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 09h45   #2
Candidat au titre de Membre du Club
 
Inscription : juillet 2011
Messages : 53
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 53
Points : 11
Points : 11
bon, j'ai réussi à me débarrasser du problème n°1 en remplaçant:
Code :
AND ID_ArretLigne <> " & Me.ID_ArretLigne & ""
Code :
AND ID_ArretLigne = " & Me.ID_ArretLigne & ""
Comment maintenant éviter les trous entre deux Num_Arret lorsque je supprime un ArretLigne?
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h53.


 
 
 
 
Partenaires

Hébergement Web