|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Marcel Directeur technique Inscription : avril 2011 Messages : 100 ![]() |
Bonjour à tous,
Pourriez-vous me décrire la procédure VBA à utiliser dans un formulaire sur un événement du champ DateDoc pour: -Récupérer la valeur d'un champ du dernier enregistrement, N°Simple -Attribuer cette valeur + 1 au champ N°simple de l'enregistrement en création. Merci à tous. Marcel |
|
|
00
|
|
|
#2 | ||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonsoir,
Tu peux essayer comme ça avec l'événement "sur entrée" du contrôle DateDoc : Code :
|
||
|
|
10
|
|
|
#3 |
|
Membre régulier
![]() Marcel Directeur technique Inscription : avril 2011 Messages : 100 ![]() |
Bonsoir LedZeppII,
J'ai décortiqué et testé en très peu de temps. Cela à l'air de fonctionner du tonnerre. Je ne connaissais pas cette fonction Dmax, et n'aurais pas pensé à évaluer si je suis positionné sur un nouvel enregistrement. Vu que N°Simple, ne peut jamais être null, je pense que je n'aurais pas besoin de Nz pour attribuer la valeur à lgNumMax. Je l'ai laissé, ça ne gêne quand même pas. Dès lundi je commencerai mes enregistrements suivants, et après certitude du bon fonctionnement, je n'oublierai pas le tag "Résolu". Un grand merci. A+ |
|
|
00
|
|
|
#4 | ||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonjour Marcello5255,
Tu peux aussi essayer de mettre le code dans l'événement formulaire "Si modification", au lieu de l'événement "sur entrée" du contrôle DateDoc. Ainsi, dès que tu commence à écrire dans un contrôle ça déclenche l'exécution du code. C'est ce qui doit se rapprocher le plus du comportement d'un champ NuméroAuto. Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Marcel Directeur technique Inscription : avril 2011 Messages : 100 ![]() |
Bonjour LedZeppII
Je te confirme le bon fonctionnement de ton code. Je m'accommoderais aussi bien de l'évènement ' Sur modification du formulaire' Cependant, au lieu de -la valeur maximale de tous les enregistrements de ma table, j’aurais préféré récupérer -la valeur du champ N°Simple du dernier enregistrement. Je t’explique pourquoi : Je constitue l’ID de mes factures de vente avec la concaténation FV/Année/N°simple + 1000. J’inscrivais manuellement le N°simple Pour la première facture de chaque année, j’attribue au N°simple + 1000, la valeur 1000 La facture FV/2010/1689 est ainsi classée avant la facture FV/2011/1100, et je garde au fil des années la même structure pour les ID, considérant que je ne ferai jamais plus de 9999 factures dans la même année. Merci beaucoup pour ton aide. Marcel. |
|
|
00
|
|
|
#6 | ||||||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonsoir,
Voici une possibilité en ajoutant une restriction dans la fonction DMax, sur le champ [N°Facture], limitant à l'année en cours. Code :
Code :
Avec la ligne Code :
Sinon, s'il y a des enregistrements pour l'année en cours, N°Simple prendra la valeur du plus grand N°Simple de l'année en cours + 1. Il me paraît préférable de procéder ainsi, car si on se contentait de prendre la valeur de N°Simple de l'enregistrement précédant, au moment du changement d'année ça ne fonctionnerait pas. Ou bien il faudrait ajouter un test supplémentaire, pour vérifier que l'année de l'enregistrement précédant est la même que l'année en cours. A+ |
||||||
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Marcel Directeur technique Inscription : avril 2011 Messages : 100 ![]() |
Tout bon LedZepp,
J'ai mis un peu de temps pour répondre parce que je devais tester le code et aussi essayer de le comprendre. Au niveau des tests, j'ai même eu l'occasion de trouver et corriger une erreur. Je t'avais renseigné la concaténation FV/Année/N° au lieu de FV Année/N° Le N°simple renvoyé était donc 1001 au lieu de 258 à cause de FV/ au lieu de FV dans le code. J'ai essayé sur DateDoc_Enter, et sur Form_Dirty. Les deux donnent le même et correct résultat. Dans le critère, je saisis bien le renvoie de 1000 si champ Null Par contre au niveau du masque, je crois comprendre que tu le places entre ' et ' mais je vois moins le sens des " "[N°Facture] Like 'FV/" & Year(Date) & "/*'"), J'ai consulté un tutoriel de Fabrice Constans, et le ferai encore si nécessaire. Merci beaucoup pour ton aide. A+ Marcel |
|
|
00
|
|
|
#8 | |
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonsoir,
Citation:
Les trois arguments de la fonction DMax sont de type chaîne de caractères. Au niveau Visual Basic, le troisième argument doit être une expression chaîne de caractères. Ça peut être une seule chaîne de caractères ou la concaténation de plusieurs chaînes de caractères. Si mon critère SQL est «[N°Facture] commence par FV 2011/*», je peux l'écrire de deux façons en SQL Access : ou C'est strictement équivalent. Maintenant, je dois mettre ce critère SQL dans une expression chaîne de caractères Visual Basic. Possibilité 1 (avec ") Possibilité 2 (avec " et Chr(code Acsii de ")) Code :
"[N°Facture] Like " & Chr(34) & "FV 2011/*" & Chr(34) J'utilise la plupart du temps la troisième forme (avec ') que je trouve plus lisible. Avec cette troisième forme, si je veux que 2011 (l'année) soit dynamique, je coupe la chaîne de caractères en deux chaînes, à gauche et à droite de 2011. J'enlève 2011 et entre les deux chaînes de caractères j'insère (en concaténant avec l'opérateur &) l'année en cours : Code :
"[N°Facture] Like 'FV " & Year(Date) & "/*'" (10 & 10 donne "1010" et non 20) A+ |
|
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Marcel Directeur technique Inscription : avril 2011 Messages : 100 ![]() |
Merci pour toutes ces précisions.
Bonne journée A+ Marcel |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com