1 membre
Connectés : ( personne )
- La Charte du Forum - Forum - Problèmes Access des débutants
Sujet n° 457 |
numérotation d'un champ via requête |
le 06/01/2011 : 21:24 par dari67
visiteur |
Bonsoir et meilleurs voeux à toutes et tous !Grâce au "mémos de STONE3 j'ai trouvé la solution au calcul dans un état ayant un s/état vide. Bravo !Je développe une petite base pour la gestion d'une assosciation (adhérents et compta). Les adhérents à jour des cotisations 2010 bénéficient d'une attestation fiscale. Cette dernière doit recevoir une numérotation de 1 à x. pour chaque année fiscale à venir.J'ai une requête qui me filtre à partir de la table des adhérents les enregistrements concernés. J'ai créer une table "tblAttestationfiscale" avec les champs: N° (NumAuto+clé primaire) ID ( reçoit le N° adhérent) DATE_COTISATION (reçoit la date du paiement de la cotisation en 2010) et le champ N°ATTESTATION et c'est à ce dernier que je souhaite affecter un n° démarrant à 1A partir d'une requête ajout basée sur ma première requête j'arrive à affecter tous les champs ci-dessus sauf le [N°ATTESTATION].MERCI d'avance pour votre aide , je suis débutant et ne maîtrise pas le vba, comment résoudre ma problématique via mes requêtes.J'espère vous lire prochainement.TB soirée.Richard |
|
|
Réponse n° 1 -------- le 08/01/2011 : 03:11 par 3Stone
Administrateur
|
Bonjour,
Avec une simple fontion de domaine, cela devrait le faire...
Le principe serait donc de récupérer la plus grande valeur, mais de la cotisation en cours. Si on ne la trouve pas, c'est que c'est la première de l'année.
Pour récupérer le plus grand numéro:
Code :=DMax("NoAttestation";"tblAttestationFiscale";"Year("[Date_Cotisation]=" & Year(Date))
S'il n'y a pas encore de cotisation pour l'année, cette fonction renvoie NULL, ce qu'il faut corriger par la fonction "NullToZero" qui s'écrit Nz()
Code :=Nz(DMax("NoAttestation";"tblAttestationFiscale";"Year("[Date_Cotisation]=" & Year(Date));0)
On récupère donc soit le plus grand numéro ou... zéro (0)
Il reste maintenant à incrimenter cette valeur :
Code :=Nz(DMax("NoAttestation";"tblAttestationFiscale";"Year("[Date_Cotisation]=" & Year(Date));0) + 1
Cordialement, Pierre(3stone) |
|
|
Réponse n° 2 -------- le 10/01/2011 : 14:25 par dari67
visiteur |
Bonjour et merci Pierre pour votre réponse,
J'ai inséré votre fonction dans la ligne mise à jour du champ NoAttestation dans une requête MàJ, mais on me retourne le message suivant:" La synthase de l'expression entrée n'est pas valide" / "Vous avez peut-être entré une opérande sans opérateur"
Désolé de vous casser les pieds ... help me !
Très bonne journée.
Richard |
|
|
Réponse n° 3 -------- le 10/01/2011 : 15:28 par 3Stone
Administrateur
|
Bonjour,
Déjà, je vois un problème de copié/collé... Code :=Nz(DMax("NoAttestation";"tblAttestationFiscale";"Year([Date_Cotisation])=" & Year(Date));0) + 1
Pour le reste, il faut adapter les noms, bien sûr.
Cordialement, Pierre(3stone) |
|
|
Réponse n° 4 -------- le 11/01/2011 : 21:13 par dari67
visiteur |
Bonsoir,
Merci pour votre réactivité, j'ai saisi votre code rectifié, je n'ai plus de message d'erreur, par contre l'exécution de la requête ne donne aucun résultat. J'obtiens "chaîne vide" sur l'ensemble des enregistrements concernés et décomptés.
Dans la requête le début de votre ligne de commande se transforme autom.en
Nz(MaxDom( et la fin se transforme en & Année ("date")
le premier ;"Year ([ reste inchangé.
Bizarre !
Help me ! |
|
|
Réponse n° 5 -------- le 12/01/2011 : 13:55 par 3Stone
Administrateur
|
Bonjour,
Code : xhtmlle début de votre ligne de commande se transforme autom.en
Oui, dans l'interface utilisateur, Access veux faire croire qu'il "parle" français et traduit quelques fonctions dans la langue locale. Mais il est plus simple de les écrire en Anglais, et de laisser à Access de quoi s'amuser.
Il aurait fallu donner l'expression au complet, mais la "fin" n'est pas correcte:
Code :Year( Date() ) => Année( Date() )
Il ne faut pas de guillemets à "Date".
Cordialement, Pierre(3stone) |
|
|
Réponse n° 6 -------- le 12/01/2011 : 22:49 par dari67
visiteur |
Bonsoir,
Merci pour votre patience. J'ai fait cette dernière rectification. J'obtiens 1 dans chaque enregistrement. L'incrémentation +1 n'est pas prise en compte.
l'expression complète est:
Nz(MaxDom("N°attestationFisc";"T_ATTESTATION_FISCALE";Year"([DATE_PAIEMENT])="& Année(Date()));0)+1
Help me !
Cordialement.
Richard |
|
|
Réponse n° 7 -------- le 13/01/2011 : 02:41 par 3Stone
Administrateur
|
Bonjour,
Oui... mais ce n'est pas a "peut près" qu'il faut l'écrire... Code :Nz(MaxDom("N°attestationFisc";"T_ATTESTATION_FISCALE";Year"([DATE_PAIEMENT])="& Année(Date()));0)+1
Code :Nz(MaxDom("[N°attestationFisc]" ; "T_ATTESTATION_FISCALE" ; "Year([DATE_PAIEMENT])=" & Année(Date());0)+1
- Les crochets à cause du caractère barbare "°"
- Les guillemets avant Year
- Les parenthèses à la fin
Cordialement, Pierre(3stone) |
|
|
Réponse n° 8 -------- le 13/01/2011 : 13:43 par dari67
visiteur |
Bonjour et merci,
J'ai suivi vos recommandations mais j'ai du rajouter une parenthèse fermante après Année(Date()) );0)+1.
L'exécution de ma requête avec cette expression me retourne 1 dans chaque champ N°attestationFisc de tous les enregistrements filtrés.
J'ai donc modifié la condition en rajoutant +1 dans Year([DATE_PAIEMENT]+1)= puisque je compare l'égalité de l'année N à N-1
J'obtiens alors un 1 dans le champ concerné dans chaque enregistrement. En ré-exécutant la requête j'obtiens 2 et ainsi de suite.
Ce n'est pas mon résultat escompté, je souhaite lors de l'exécution de ma requête màj, le champ concerné soit incrémenté de +1 dans chaque nouvel enregistrement. soiut 1 2 3 4 5 etc. et pour chaque nouvelle année.
Help me !
Bien cordialement.
Richard |
|
|
sujet actif
sujet clos
Important!
Nouveau message -
Rectifier message
Clôturer sujet
Remonter
|