Compléments pour Microsoft Access

http://access.fr.free.fr/

NumAuto Perso (Table)

Description 
Cette fonction permet de retourner une chaîne correspondant à un numéro automatique personnalisé constitué d'une chaîne de texte et d'une valeur numérique qui s'incrémente.
 
Synthaxe 

Expression = fNumAutoTxt(strTbl, strFldAuto, strTxtStart, intLenId)

Cette synthaxe doit être utilisé dans un formulaire de saisie sur le ou les événements "Après mise à jour" des contrôles qui constituent l'argument "strTxtStart".

La synthaxe de la fonction fNumAutoTxt comprend les éléments suivants :

ElémentsDescription
strTblExpression de chaîne correspondant au nom de la table qui doit contenir le numéro automatique.
strFldAutoExpression de chaîne correspondant au nom du champ du numéro automatique
strTxtStartExpression de chaîne correspondant à la valeur du texte qui doit constitué le numéro automatique
intLenIdExpression numérique correspondant au nombre de chiffres qui doivent constitués la valeur numérique du numéro automatique.

Exemple 

Une table "MaTable" avec les champs fldAuto1, fldAuto2, fldAuto3,  fldNom et fldPrenom.

Imaginons, 3 façons d'utiliser la fonction fNumAutoTxt() :

  • fldAuto1 : Sur les événements "après mise à jour" des contrôles "fldNom" et "fldPrenom", on mets :
    Me.fldAuto1 = fNumAutoTxt("MaTable", "fldAuto1", Me.fldNom & Me.fldPrenom, 5)

  • fldAuto2 : Sur l'événement "après mise à jour" du contrôle "fldNom", on mets :
    Me.fldAuto2 = fNumAutoTxt("MaTable", "fldAuto2", Me.fldNom, 5)

  • fldAuto3 : Sur l'événement "après mise à jour" du contrôle "fldPrenom", on mets :
    Me.fldAuto3 = fNumAutoTxt("MaTable", "fldAuto3", Me.fldPrenom, 5)


Voici le résultat qui aurait été alors obtenu avec ces 3 méthodes :

fldAutoNomPrenom

fldAutoNomfldAutoPrenom

fldNom

fldPrenom

DupondGerard00001Dupond00001Gerard00001DupondGerard
DurandJean00001Durand00001Jean00001DurandJean
DupondGerard00002Dupond00002Gerard00002DupondGerard
MartinMichel00001Martin00001Michel00001MartinMichel
DupondMichel00001Dupond00003Michel00002DupondMichel
DupontArthur00001Dupont00001Arthur00001DupontArthur


Code de la fonction 


Function fNumAutoTxt(strTbl$­­­­­­­­­­­­­­­, strFldAuto$­­­­­­­­­­­­­­­, strTxtStart$­­­­­­­­­­­­­­­, intLenId%) As String
'** La référence "Microsoft DAO x.x Object Library est nécessaire
'** sur l'événement "Après mise à jour" qui consitue "strTxtStart"

    Dim rst             As DAO.Recordset
    Dim strRst          As String
    Dim lngId           As Long

    strRst = "Select [" & strFldAuto & "] From [" & strTbl & "] ORDER BY [" & strFldAuto & "];"
    Set rst = CurrentDb.OpenRecordset(strRst, dbOpenDynaset)

    With rst
        If Not .BOF Then
            .FindLast "[" & strFldAuto & "] like """ & strTxtStart & "*"" " _
                & " AND Len([" & strFldAuto & "]) = " & Len(strTxtStart) + intLenId
            If .NoMatch = True Then
                lngId = 1
            Else
                lngId = CLng(Mid(.Fields(strFldAuto), Len(strTxtStart) + 1)) + 1
            End If
        Else
            lngId = 1
        End If
    End With

    rst.Close: Set rst = Nothing

    fNumAutoTxt = strTxtStart & Format(lngId, String(intLenId, "0"))

End Function