Numérotation personnalisée : variante 2
Suite aux articles Numérotation personnalisée et Numérotation personnalisée : variante, j’ai eu plusieurs questions concernant la possibilité d’inverser la numérotation (placer le numéro en début de séquence, plutôt qu’à la fin). Voici une synthèse de mes réponses.
Si vous avez manqué le début…
La fonction AutoNumber()
, dont il est question dans les articles cités, génère des numéros, par exemple sous la forme 2012-01
, 2012-02
, etc. Le format peut être personnalisé pour obtenir d’autres formes : 2012001
, 2012002
, ou encore 2012-07/ABC-001
, 2012-07/ABC-002
, etc.
La partie calculée du numéro est toujours placée à droite, mais on m’a souvent demandé s’il était possible de le placer à gauche, pour obtenir par exemple : 01-2012
, 02-2012
, etc.
Une fausse bonne idée
L’aménagement de AutoNumber
() est possible pour obtenir ce résultat (je posterai sans doute une version aménagée du code, dès que j’ai un peu de temps). Mais je ne sais pas si c’est une bonne idée : si les 01-
, 02-
, etc. de la numérotation sont des mois, et qu’on trie sur ce champ, on va obtenir :
- 01-2011
- 01-2012
- 01-2013
- 02-2011
- 02-2012
alors qu’avec AutoNumber()
, par défaut, on aura :
- 2011-01
- 2011-02
- 2012-01
- 2012-02
- 2013-03
… ce qui me semble plus facile à consulter (on a un ordre chronologique).
Un compromis ?
En résumé, je garderais le principe de numérotation proposé par AutoNumber()
. Les recherches sur des données triées seront plus faciles dans la table.
Mais on peut garder l’existant, et afficher autre chose à l’écran ! Pourquoi ne pas écrire une fonction VBA qui retravaillera le numéro pour l’afficher dans des formulaires ou l’imprimer dans des états ?
Dans ce qui suit, je suppose que la numérotation est de la forme 2012-01
, et qu’on veut afficher 01-2012
. En VBA, ça donnerait :
1 2 3 |
Function InverserNumero(ByVal strNumero As String) As String InverserNumero = Right(strNumero, 2) & "-" & Left(strNumero, 4) End Function |
Pour tester la fonction dans la fenêtre Exécution :
- Faites apparaître la fenêtre Exécution (
Ctrl
+G
). - Tapez quelque chose comme :
? InverserNumero("2012-01")
- Validez par la touche
Entrée
.
Ensuite, dans une requête par exemple, vous pouvez créer un champ calculé qui reprend le numéro (numéro de facture, ici), et qui le reformate :
1 |
Numéro à afficher: InverserNumero([Numéro Facture]) |
Ce champ calculé sera disponible dans tout formulaire ou état construit à partir de la requête.
Merci beaucoup je vais étudier tout cela !
Merci encore pour votre site qui est juste génial 🙂
Merci également ! 🙂
Bons tests.
Bon, j’ai un peu avancé mais je n’arrive pas à obtenir ce que je veux :-/ Je me suis inscrit sur le forum pour pouvoir en discuter avec vous ! Si cela est possible bien évidemment 🙂
A bientôt !
Pas de souci, c’est fait pour (les forums sont plus pratiques pour échanger).
Bonjour et tout d’abord merci énormément pour votre site web qui est une vraie mine d’or pour l’autodidacte que je suis !!
J’ai appliqué avec succès la numérotation automatique « personnalisée » dans mon projet et j’aurais une petite demande si cela vous est possible.
Je vous explique: J’ai crée une base de donnée pour gérer le stock de tranches de marbre et de granit pour mon entreprise avec la numérotation auto je crée une référence qui prends les deux première lettre de la matière ( par exemple MA01 pour le marbre et GR03 pour le granit) en revanche je ne sais pas comment faire car je souhaiterais, lorsque je reçois un lot de dix tranches identiques, ne pas avoir à les saisir une par une car elles ont toute les même dimensions (on appelle cela un bloc). Pour être plus clair comment faire en sorte que lorsque je tape une quantité de dix tranches ma base se remplisse toute seule avec ma numérotation automatique incrémentée par rapport au nombre de tranches? ( par exemple je saisie type matière: marbre, et quantité:10 avoir comme résultat MA01, MA02, MA03, etc … )
Merci encore pour tout !
Bien cordialement
Le principe consiste à générer des enregistrements dans une table, automatiquement. L’article Alimenter une table automatiquement devrait donner des pistes pratiques.
Ouala !