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 13/09/2011, 17h00   #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 le problème suivant:

J'ai créé ma base de données avec des lignes de bus. Chaque ligne possède un sens allé et un sens retour. et pour chaque sens de ligne j'ai numéroté manuellement les arrêts.

Problème:
Je me rends compte que si je souhaite insérer un nouvel arrêt entre 2 arrêts existants je sui obligé de renuméroter tous les arrêts du trajet.

voici mes tables pour être plus clair:

liens:


tables:



J'ai cherché dans les FAQs et tuoriaux mais la seul chose qui se rapproche de se que je souhaite faire et la nuérotation personnalisée avec les dates mais cela ne m'aide pas dans l'insert entre deux arrêts:

imaginons ma ligne
Ligne1:.
..................................Num_Arret
......................................1
......................................2
......................................3
......................................4
......................................5

je souhaite maintenant ajouter un arret entre 2 et 3, ce point arret devra donc être en position 3 puis 3=4 et 4=5 et 5=6

Si vous avez des idées ou solutions n'hésité pas.

merci d'avance pour votre aide
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 17h46   #2
Membre confirmé
 
Avatar de lelensois16
 
Homme Romain M.
Étudiant
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Romain M.
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 204
Points : 204
Bonjour,

Pourquoi ne pas faire appel à une requête de type UPDATE et ensuite un insert into ( ca reste de la théorie , je ne sais pas si ca va marcher ) :

Code sql :
 UPDATE ArretLigne SET IDLIGNE = IDLIGNE + 1 WHERE IDLIGNE > [Numéro de l'arret qu'ON veut rajouter]

ensuite
réalises un INSERT INTO

Cdt
lelensois16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 00h13   #3
Membre Expert
 
Inscription : mars 2006
Messages : 1 331
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 1 331
Points : 1 460
Points : 1 460
Bonsoir,

Amusant de reprendre une étude 4 ans après ...

La table exemple => tbl_ArretLigne :
Le form en création :
Avec 4 données rentrées :
On rentre => Nouve 3 :
Trois lignes de code :
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
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", "tbl_ArretLigne") + 1, 1) Then
        Me.Num_Arret = Nz(DMax("Num_Arret", "tbl_ArretLigne") + 1, 1)
    ElseIf IsNull(Me.Num_Arret) Or Me.Num_Arret < 1 Then
        Me.Num_Arret = Nz(DMax("Num_Arret", "tbl_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", "tbl_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", "tbl_ArretLigne") + 1, 1) Then
        Me.Num_Arret = Nz(DMax("Num_Arret", "tbl_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 tbl_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 tbl_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 tbl_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
Cordialement.
__________________
Questions techniques par MP
Le peu que je sais, c'est à mon ignorance que je le dois.
...............................................................................Sacha Guitry
francishop est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/09/2011, 11h47   #4
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
Merci à toi francishop pour la réponse

ça fonctionne correctement mais pour la partie suppression la numérotation ne se fait pas automatiquement. j'ai donc suivi le lien que tu m'a laissé mais je ne comprends pas comment l'utiliser, si je dois l'insérer dans le code que tu m'as fournit et à quel niveau? ou bien dans un nouveau module?

Merci d'avance
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 15h30   #5
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
Citation:
Envoyé par josi1986 Voir le message
Merci à toi francishop pour la réponse

ça fonctionne correctement mais pour la partie suppression la numérotation ne se fait pas automatiquement. j'ai donc suivi le lien que tu m'a laissé mais je ne comprends pas comment l'utiliser, si je dois l'insérer dans le code que tu m'as fournit et à quel niveau? ou bien dans un nouveau module?

Merci d'avance
Et je viens de remarquer que les trajets des lignes que je n'ai pas touché on été modifiés.
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 00h24.


 
 
 
 
Partenaires

Hébergement Web