Numérotation personnalisée : variante
Par Hervé Inisan le mercredi 26 août 2009, 12:34 - Tables et relations - Lien permanent
Suite à cet article sur la numérotation personnalisée, la question suivante a été posée sur le forum self-access.com : "Comment créer une numérotation de la forme YYMM001, YYMM002, sachant que le mois MM est variable, mais que la numérotation est constante sur l'année AA ?".
Plus de détails
On souhaite ici une numérotation de la forme0908001,
0908002 en Août ; puis en Septembre : 0909003, 0909004,
etc. En Janvier 2010, on souhaite par contre repartir à 1 : 1001001, 1001002,
etc. En d'autres termes, l'année sert bien de base de numérotation,
mais pas le mois.
... mais le mois doit quand même être intégré au numéro, et sa valeur est dynamique. Et c'est là le problème !
- Si vous avez lu l'article précédent, vous pourriez être tenté d'utiliser un format de numérotation du type
"[YY][MM]". Le problème est que dans ce cas, la numérotation va être du style0908001,0908002, etc. (en Août 2009), puis0909001,0909002, etc. (en Septembre 2009). Et ainsi de suite. C'est dans cet objectif qu'a été écrite la fonctionAutoNumber()à l'origine. - C'est uniquement l'année qui sert de déclencheur pour le changement de numérotation. Mais le format
"[YY]"ne convient pas non plus, parce que le mois ne sera pas présent dans le code final !
Solution
On devrait pouvoir s'en sortir sans modifier la fonction AutoNumber(). L'idée repose sur le fait que :
- la base de calcul se fait sur une partie fixe (l'année). Donc on peut garder le préfixe
[YY]. - la comparaison des préfixes (dans le code VBA) se fait par un
LIKESQL, lequel peut contenir des caractères génériques (jokers).AutoNumber()utilise déjà le caractère*, mais on peut aussi faire appel au caractère?.
Dim strCode As String
If IsNull(Me.Code_Produit) Then
strCode = AutoNumber("tblProduits", "Code Produit", "[YY]??", 3)
strCode = Replace(strCode, "??", Format(Date, "MM"))
Me.Code_Produit = strCode
End If
End Sub
- En pratique, on récupère le numéro de produit avec un préfixe basé sur l'année et sur 2 caractères quelconques (les 2 points d'interrogation). 2 caractères, parce que le mois va être injecté sous la forme 01, 02... 11, 12. Du coup, la fonction
AutoNumber()renvoie un numéro de la forme09??001,09??002... sans le mois. - C'est ensuite qu'on injecte le mois (sur 2 positions précisément) dans le code produit, à l'aide de la fonction
Replace().




Nouveau !
Commentaires
Est-il possible de remettre un numeroAuto a zero?
je vous remercie
wagolo > Pour réinitialiser le NuméroAuto, il faut d'abord vider la table, puis compacter la base de données.
Bonjour,
J'ai mis en application votre méthode de numérotation auto et je l'ai trouvé géniale !
Il me reste toutefois un petit problème à résoudre...
Comment faire pour afficher ce numéro personnalisé dans mon formulaire avant de passer à l'enregistrement suivant ?
Merci d'avance
milo1820 > Normalement, le paragraphe "Le formulaire de saisie", sur l'article Numérotation personnalisée devrait répondre à la question.