Déclaration d'une variable "dynamique" dans une boucle
Bonjour à tous
L'idée est de faire "monter" ou "descendre" une ligne d'un enregistrement dans un formulaire continu sur le click d'un bouton.
Voici ce à quoi j'avais pensé:
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
|
Private Sub btn_LineUp_Click()
On Error GoTo Err_Btn_LineUp
Dim i As Integer
Dim IdEnCours As Long
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("SELECT * FROM T_ProtocoleVVC WHERE ID_Protocole =" & Me.ID_Protocole, dbOpenDynaset)
Rs.FindFirst "ID_ProtocoleVVC =" & Me.ID_ProtocoleVVC
'Si c'est le premier enregistrement on ne peut pas faire monter toute la ligne
If Rs.AbsolutePosition = 1 Then
MsgBox "Vous ne pouvez pas déplacer cette ligne vers le haut"
Exit Sub
Else
For i = 2 To Rs.Fields.Count
Dim Temp(i), ActStr(i) As String
'Mémorise la valeur du champ correspondant de l'enregistrement en cours
ActStr(i) = Nz(DLookup(Rs.Fields(i).Name, "T_ProtocoleVVC", Rs("ID_ProtocoleVVC") = Me.ID_ProtocoleVVC), "")
Rs.MovePrevious
'Mémorise la valeur de l'enregistrement précédent
Temp(i) = Nz(DLookup(Rs.Fields(i).Name, "T_ProtocoleVVC", Rs("ID_ProtocoleVVC") = Me.ID_ProtocoleVVC), "")
'Mise à jour de l'enregistrement précédent avec la valeur correspondante en cours
.Update Rs.Fields(i), ActStr(i)
'Mise à jour de l'enregistrement en cours avec la valeur précédente mémorisée
Rs.MoveNext
.Update Rs.Fields(i), Temp(i)
Next i
DoCmd.RunCommand acCmdSaveRecord
Me.Form.Requery
End If
Rs.Close
Set Rs = Nothing
End Sub |
Je mémorise la valeur d'un champ de l'enregistrement en cours puis du précédent et je colle la valeur du champ en cours en lieu et place du précédent et vice versa. Puis la boucle passe au champ suivant et ainsi de suite.
La syntaxe Temp(i) ne fonctionne pas. Comment faire varier cette déclaration de variable qui m'éviter de passer en revue les champs de la table.
Merci d'avance pour votre aide qui me fera gagner un temps précieux, ma recherche du jour sur le sujet ne m'ayant pas permis de trouver de réponse.
Je suis aussi preneur d'une autre stratégie.