Tri manuel dans form

Si l'on souhaite trier les enregistrements d'un formulaire continu de manière manuelle, c. à d. sans que la source ne possède un champ qui se prête au tri désiré, il faut se rabattre sur un champ "numéro de ligne".
- Ce formulaire en continu sera basé sur une requête dans laquelle le tri sera basé sur le champ "NumLigne".
- Ce formulaire, s'il est sous-formulaire, pourra contenir une clé externe le liant au formulaire principal.
- Le champ "NumLigne" peut ne pas être affiché dans le formulaire.
- On placera dans la section détail un petit bouton flêche vers le haut (cmdUp) et un autre bouton flêche vers le bas (cmdDown).
- Ne pas oublier d'activer la référence DAO !
Le code des boutons que l'on placera dans la Sub de l'événement "Sur Click" :
Private Sub cmdUP_Click()
Dim AboveLineNumber As Long
Dim CurrentLineNumber As Long
Dim strField As String
'//Adaptez le nom du champ contenant le numéro de ligne
strField = "NumLigne"
With Me.RecordsetClone
.Bookmark = Me.Bookmark
If CurrentRecord = 1 Then
'on est sur le premier enregistrement
Exit Sub
Else
CurrentLineNumber = .Fields(strField)
.MovePrevious
AboveLineNumber = .Fields(strField)
.Edit
.Fields(strField) = CurrentLineNumber
.Update
.MoveNext
.Edit
.Fields(strField) = AboveLineNumber
.Update
End If
Me.Requery
End With
End Sub
Private Sub cmdDown_Click()
Dim BelowLineNumber As Long
Dim CurrentLineNumber As Long
Dim strField As String
'//Adaptez le nom du champ contenant le numéro de ligne
strField = "NumLigne"
With Me.RecordsetClone
.Bookmark = Me.Bookmark
If CurrentRecord = .RecordCount Then
'on est sur le dernier enregistrement
Exit Sub
Else
CurrentLineNumber = .Fields(strField)
.MoveNext
BelowLineNumber = .Fields(strField)
.Edit
.Fields(strField) = CurrentLineNumber
.Update
.MovePrevious
.Edit
.Fields(strField) = BelowLineNumber
.Update
End If
Me.Requery
End With
End Sub
Dernière modification : 22/04/2007 17:44
Catégorie : - Formulaires
Page lue 8448 fois