|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Bonjour à tous,
Je souhaiterai qu'une numérotation automatique d'un document en cours de création soit applicable selon le type de document Devis ou Facture. J'ai déjà fait en sorte qu'à chaque nouveau document une chaîne se créée dans le champ [NumDoc] qui reprend : - Préfixe du document : "Dev" pour Devis et "Fac" pour Facture - Année indiquée dans le champ [Date] - Mois indiqué dans le champ [Date] Ce qui donne par ex : FAC201001 ou DEV201002 Il me manque la partie la plus compliquée de la chaîne c.à.d : l'indice à 4 chiffres qui serait calculé sur les indices déjà existants pour chaque type de document , pour arriver à une chaine de type [TypeDoc][Année][Mois][Indice]. Je pense que cet indice résultera d'une requête sachant vérifier et trier quels indices existent déjà et à quel type de Document ils appartiennent et qui rajoutera "n+1" ou "n" au dernier indice connu dans la base . Il faut absolument que l'indice soit calculé en tenant compte du type de document : il peut donc y avoir 2 x l'indice 0001, un pour la première facture et pour le premier devis de l'année et mois en cours.( j'utilise la même table pour les devis et factures) Quel procesus VBA utiliser avec access 2010 pour ce faire ? Merci pour votre aide ! (Je ne maîtrise pas bien l'éxécution de requêtes en vba puis l' écriture du CStr correspondant décrit plus haut, de plus, toutes les astuces trouvées dans les forums ne mentionnent pas comment créer l''indice par rapport au type de document. Il est simple de connaître le denier indice utilisé pour tel type de doc en utilisant une requête filtrée , mais comment automatiser tout cela puis créer la chaîne finale à mettre dans le champ [NumDoc] en VBA sans faire d'erreur ?) |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() |
Bonjour,
Dans cette fonction : -Récupérer, dans la table des documents, les quatres derniers caractères du champ [NumDoc] pour le type de document spécifié, le mois et l'année du jour -Prendre le plus grand nombre de cette liste (ou zéro si aucune valeur de retournée) -Incrémenter de 1 -Compléter avec des zéros si <1000 -Concaténer les 3 premiers caractères du type de document avec l'année du jour, le mois du jour et la valeur calculée précédemment -Retourner cette chaîne de caractère |
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bonsoir,
un peu de lecture pour commencer: Numérotation personnalisée des enregistrements dans Access 2010 la base fonctionne dans un cadre multi-utilisateurs ? |
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Rebonjour Paidge,
Tu viens de faire une liste qui retrace tout ce que je demandais plus haut : Mon champ [NumDoc] est volontairement pas un champ auto mais un champ texte qui est rempli par event sur bouton en VBA en appliquant la chaine que j'ai décrite plus haut ce qui me donne soit [DEV][Année][Mois], soit [FAC][Année][Mois].Un champ [IDDoc] se charge d'être la clé primaire et d' être autonumérique. Les valeurs "Année" et "Mois" étant automatiquement extraits d'un champ [Date] dans mon formulaire, la date n'étant pas forcément celle du jour... Donc tout ceci fonctionne parfaitement, il me reste à implanter le calcul d'indice à concaténer en final de chaîne et ce avec 4 chiffres... J'aurai donc juste besoin d'un module qui exécute les requêtes ou autres Dlast faisant le filtre sur le type de document et l'indice déjà existant ou à créer (n si 0 ou n+1). Merci pour toute réponse |
|
|
00
|
|
|
#5 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Non elle n'est pas multi utilisateurs, d'autre part la méthode décrite ici n'applique pas de filtre par rapport au type de document devis ou facture et de leur indice respectif après requête. J'ai vu sur un autre forum une méthode bcp plus rapide utilisant Dcount et une chaine concaténée, mais je ne sais comment la transformer pour mon cas précis. |
|
|
|
00
|
|
|
#6 | ||||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
le tuto donne des pistes qu'il suffit d'adapter...
Code :
Code :
|
||||
|
00
|
|
|
#7 |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Bonjour,
Merci f-leb pour ta réponse qui se rapproche de ce dont j'ai besoin mais : je ne vois pas à quel moment cela crée la chaine complète avec son indice, là il me semble que l'on crée un nouvel enregistrement, ce que je ne veux pas. Je voudrais que sur appui d'un bouton des requêtes s'exécutent et suggèrent un numéro de document par rapport à ce que je décrivais plus haut, l'injection de ce numéro dans un champ [NumDoc]ne se ferait qu'après confirmation. De plus ces lignes de code font référence à un indice d'un champ table [indice] préalablement créé je suppose, mais est il vraiment nécessaire de créer ce champ ? Je pensais que l'on pouvait passer outre en utilisant des conditions et appliquant un code du genre : Si aucun registre alors appliquer chaine &0000... Si déjà registre alors appliquer chaine & et indice (n+1). Merci de m' éclairer |
|
|
00
|
|
|
#8 | ||
|
Membre éclairé
![]() |
Salut tout le monde !
Je viens de faire cette fonction-là : Code :
Utilisation : TypDoc étant une chaîne de caractère(string) NB : perso, j'utiliserais ce numéro en tant que clé primaire, c'est aussi bien |
||
|
|
00
|
|
|
#9 | ||
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 103 ![]() |
Bonjour
J'ai realise une clé primaire automatique dans une base adhérent en fonction de la saison de l'adhesion en prenant son N° d'adhérent. Lorsque je choisis la saison, la clé primaire s'inscrit automatiquement dans le champ IdAdhIns qui se situe dans le sous formulaire. Si cela peut aider. Code :
|
||
|
|
00
|
|
|
#10 | |||
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Tu chôme pas toi au moins ! Ca doit fonctionner génial mais comment dois je appeler cette fonction pour qu'elle remplisse le champ [NumDoc]sur l'event click d'un bouton ? Merci pour tout |
|||
|
|
00
|
|
|
#11 | ||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bonjour,
pour ma part je préfère une clé primaire NumAuto et stocker l'indice au format numérique Code :
Code :
=[TypeDoc] & Format([DateDoc];"yyyymm") & Format([Indice];"000") |
||
|
00
|
|
|
#12 | |
|
Membre éclairé
![]() |
Citation:
Envoies-moi ton mail par MP |
|
|
|
00
|
|
|
#13 |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Je viens de voir ta base, ça marche génial mais je dois l'adapter à la mienne le formulaire étant plus automatisé...
J'ai changé la référence Date dans le module par [Date] pour permettre de changer la date dans mon formulaire et j'ai changé les noms de champs par les miens mais : Pour tester, j'ai mis un bouton dans mon formulaire à coté du champ dépendant "NumDocument" avec le code Me.NumDocument=NumAuto([NumDocument]) mais il me dit qu'il attend une variable et non un module ... Qu'ai je mal fait ? comment appeler le module appellé NumAuto depuis ce bouton pour remplir le champ NumDocument ??? Merci mille fois |
|
|
00
|
|
|
#14 | |||
|
Membre éclairé
![]() |
Bonjour,
Alors déjà pour le fait que tu aies remplacé la fonction Date() dans la fonction NumAuto(TypDoc) par [Date]....C'est quoi [Date] ? je suppose que c'est un champ texte de ton formulaire qui est lié au champ [Date] de la source de ton formulaire (table ou requête). Dans ce cas, je propose de modifier légèrement la fonction : Code :
Utilisation : TypeDoc est de type string et date de type date. Tu peux par exemple écrire : Code :
NumAuto(Me.monChampTypdoc,Me.monChampDate) Citation:
Pourquoi tu écrit Me.NumDocument=NumAuto([NumDocument] ??? L'argument de la fonction est LE TYPE DE DOCUMENT ("DEVIS" ou "FACTURE"). Donc avec mon exemple d'utilisation, tu devrais comprendre |
|||
|
|
00
|
|
|
#15 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Je vais essayer d'implanter tout çà dans mon formulaire qui contient déjà des procédures. Je te tiens au courant et te remercie sans fin pour l'aide apportée.... |
|
|
|
00
|
|
|
#16 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
Me.NumDocument=NumAuto([TypeDoc]) mais il continue à me dire : Variable ou procédure attendue, et non un Module Hic ? |
|
|
|
00
|
|
|
#17 |
|
Membre éclairé
![]() |
Envoies-moi ta base
|
|
|
00
|
|
|
#18 | |
|
Membre régulier
![]() Inscription : janvier 2011 Messages : 307 ![]() |
Citation:
J'avais mis comme nom de module le même nom que celui de la fonction incluse (NumAuto) ... la fatigue ..., ça risquait pas de marcher ! La seule chose qui manque maintenant serait que les 3 premiéres lettres du TypeDoc ("Fac" ou "Dev") soient en majuscules ... Merci mille fois !!!!! |
|
|
|
00
|
|
|
#19 | |
|
Membre éclairé
![]() |
Citation:
Sinon il existe une fonction sous ACCESS |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com