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
| Private Function NuméroterLignesFormulaire(NomDuFormulaire As String, _
SourceDuContrôle As String, NomDuContrôle)
'NB ceci s'inspire très largement de GetLineNumber
' voir : http://support.microsoft.com/kb/120913/fr
'Exemple pour la source d'un contrôle :
' LeContrôlePourNuméroter =NuméroterLignesFormulaire([Nom];"DateAchat";[ztDateAchat])
' le premier argument est toujours "[Nom]" quel que soit formulaire
Dim sSQL As String, RS As DAO.Recordset, CountLines As Long
'construire un Recordset égal à celui de la source du formulaire
If Left(Me.RecordSource, 6) = "SELECT" Then 'la source est une requête
sSQL = Me.RecordSource
Else 'la source est une table
sSQL = "SELECT * FROM " & Me.RecordSource & ";"
End If
Set RS = CurrentDb.OpenRecordset(sSQL)
'Rechercher le type de donnée pour choisir la bonne syntaxe de comparaison
Select Case RS.Fields(SourceDuContrôle).Type
Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, DB_DOUBLE, DB_BYTE 'c'est donc numérique
RS.FindFirst "[" & SourceDuContrôle & "] = " & NomDuContrôle
Case DB_DATE 'c'est une date
RS.FindFirst "[" & SourceDuContrôle & "] = #" & Format(NomDuContrôle, "mm/dd/yy") & "#"
Case DB_TEXT 'si c'est du texte (le texte ne peut contenir de double quotes (")
'par contre, l'apostrophe (') est permise
RS.FindFirst "[" & SourceDuContrôle & "] = """ & NomDuContrôle & """"
End Select
' remonter jusqu'au début en comptant les lignes.
Do Until RS.BOF
CountLines = CountLines + 1
RS.MovePrevious
Loop
' on restitue le résultat
NuméroterLignesFormulaire = CountLines
' Fermeture du Recordset
RS.Close
End Function |
Partager