|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juin 2008 Messages : 14 ![]() |
Bonjour !
Je débute un peu sur ACCESS et je créé une BDD où j'enregistre des produits référencés selon leur initiale : A01-A02 ; B01-B02 etc... J'aimerai que l'incrémentation de ces références soit automatique quand on rentre le nom du produit ou la lettre de la référence (ex : je commence à taper "ch..." dans le champs Produit ou "C" dans le champ Réf, et la BDD attribue automatiquement la réf C03 si C02 existe déjà) (Petite précision : cette base va être alimentée par un fichier EXCEL existant, je ne vais donc pas partir de 00 pour mes références...) Je ne pense pas pouvoir utiliser un NumAuto, puisqu'il ne peut pas contenir de lettre, me trompe-je ?? J'espère que quelqu'un pourra m'aider !! Par avance merci de votre aide... |
|
|
00
|
|
|
#2 |
![]() ![]() |
Bonjour et bienvenue sur le forum!
Effectivement, cela n'est pas possible avec un numeroAuto, aussi simplement. Avec un peu de VBA,on peut y arriver. Mais, il me semble que cela a déjà été resolu sur le forum. Cherche un peu. Bonne suite!
__________________
Un gros problème est la somme de plusieurs petits problèmes. Resolvez chacun des petits problèmes: vous aurez resolu le gros problème! ![]() Mes tutos || Mon blog || Développeurs ivoiriens |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juin 2008 Messages : 14 ![]() |
VBA, je maitrise pas vraiment, mais j'ai déjà fait quelques programme alors c'est jouable... (surtout si c'est "un peu" !!)
Par contre, je me doute que la question a déjà été posée, mais j'ai trouvé de réponse (et pourtant, j'ai cherché, ici et ailleurs !!...) Merci pour votre aide en tout cas ! |
|
|
00
|
|
|
#4 |
![]() ![]() |
__________________
Un gros problème est la somme de plusieurs petits problèmes. Resolvez chacun des petits problèmes: vous aurez resolu le gros problème! ![]() Mes tutos || Mon blog || Développeurs ivoiriens |
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
hello
si la partie à incrémenter est numérique alors tu peux faire des calculs et c'est plus simple tu peux aussi diviser ta référence en deux champs C d'un coté et 02 de l'autre pour résoudre le problème d'unicité, il suffit de mettre une clef double et un petit code sur sortie de la zone de la lettre Code :
le if pour ne pas affecter de valeur à chiffre si il y en a déja une (quand on repasse par là en lecture, ça pourrait faire des conneries) dmax, la fonction pour chercher le plus grand ma_table est le nom de la tienne et ensuite un filtre pour ne pas avoir le plus grand de tous les chiffres mais bien le plus grand des chiffres dont la lettre est C (par ex) +1 juste pour incrémenter à l'affichage dans les états ou dans les formulaires, il suffit d'afficher lettre&chiffre dans le même champ (et peut être aussi lettre et chiffre dans deux champs séparés mais invisibles pour pouvoir faire les sélections sans peine) Ps: t'as raison le numauto est une casse..... en effet, l'incrémentation automatique ci-dessus ne t'empèche aucunement de forcer les valeurs pour avoir C04 après C02, ce qui faitt que le suivant sera C05 que tu pourra toujours forcer à C03 si tu le veux vraiment!!
__________________
-------------------Simplifi----------comme si tout était simple-------- |
||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : juin 2008 Messages : 14 ![]() |
Merci beaucoup Simplifi !
Je n'ai pas encore essayé ce code, car ma BDD n'est pas encore créée, mais il m'a déjà dépanné pour une autre ! J'avais envisagé de scinder le code en 2, mais je voyais pas comment éviter les doublons et mettre en place l'incrémentation auto... Je n'ai jamais eu de formation sur VB alors je galère un peu, mais je commence à comprendre quelques trucs, ça fait plaisir ! Encore merci à tous, et à bientôt car vu mon niveau, j'aurai sans doute encore besoin de votre aide... |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
hello
Avec plaisir n'oublie pas le tag résolu
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juin 2008 Messages : 14 ![]() |
Et oui, c'est encore moi !
Je savais bien qu'il ne fallait pas que je cloture la discussion... J'ai essayé d'adapter ton code sur une autre BDD, ou mes réf (champ "Code") sont de type "PL 0000" (toujours les mêmes lettres). Je voudrais qu'à l'ouverture de mon formulaire en mode ajout, le nouveau Code soit automatiquement attribué, par incrémentation du dernier utilisé (PL 1652 si PL 1651 existe déjà). Ca donne un truc comme ça, libre adaptation de ton code : Private Sub Form_Current() Dim NumCode As String NumCode = Val("code") If NumCode > 0 Then Else NumCode = DMax(NumCode, "Plantes") + 1 Code = "PL " & NumCode End Sub Ca marche presque : quand j'ouvre mon formulaire, dans le champs Code il affiche PL 1*** (masque de saisie : PL ****), alors qu'il devrait mettre PL 1613, le dernier enregistrement de ma table "Plantes" portant le Code PL 1612... Mes connaisances de VB étant quasi nulle, je coince... Un (dernier, peut être...) petit coup de main ?... Merci d'avance !! |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
hello
déja , tu devrais utiliser les balises de code le # au dessus de la fenêtre ensuite tu devrais essayer ça Code :
dans dmax, les valeurs entre guillemets sont les noms des champs par contre dans val(), c'est pas un texte que tu transmet mais une variable que la fonction va remplacer par sa valeur si code = "Pl 1651" alors val(code) = val ("PL 1651") = 1651 Je suis pas sûr d'être clair
__________________
-------------------Simplifi----------comme si tout était simple-------- |
||
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : juin 2008 Messages : 14 ![]() |
Désolée du retard de ma réponse, j'étais passée sur autre chose. Je me replonge aujourd'hui dans ma BDD, et je galère toujours...
Ton code marche mais dans ma table, je n'avais pas encore le champ "NumCode". J'ai essayé de le créer et qu'il se remplisse automatiquement à partir du champ "Code", mais je n'y suis pas arrivée...Pourtant définir un champ à partir d'un autre, ça parait simple !!! Je pourrais m'armer de patience et le remplir moi même (j'ai quand même + de 800 enregistrements...), mais il faut qu'il se remplisse automatiquement quand j'enregistre de nouvelles données ! Une solution ?! Merci d'avance... |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
hello
ton nouveau problème s'appelle "mise à jour" si j'ai bien compris, ta table contient 800 enregistrements avec comme référence: blabla-0000, blabla-0001 aisni de suite jusqu'à 800 tu veux donc mettre à coté une colonne avec la partie numérique suivant le format de la référence tu utilisera des fonctions différentes val() fonctionne mais il il a aussi droite() commence par faire une requête sélection (on commence toujours par là) en haut la table en bas le champ référence exécuter -> 800 lignes, super à coté de référence on va mettre val(référence) si tu viens d'obtenir ce que tu voulais tu peux commencer de danser de joie sinon, cherche un peu dans les fonctions du générarteur associé à la création de devis quand tu as exactement le numéro que tu voulais en face de chaque référence, si t'es pas assomée par le plafond, on continue à partir du mode création, clique sur l'icone "Mise à jour" il te reste à supprimer la colonne "référence", à mettre la colonne "numref" et à mettre la formule_magique_qui_donne_ce_que_tu_veux dans la case "mise à jour", ce qui aura comme effet de remplacer "numref" par le résultat de la "formule_......" et ta table sera fin prète pour faire des dmax + 1 tien moi au courant
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : juin 2008 Messages : 14 ![]() |
Bonjour Simplifi !
Encore pas mal de retard pour ma réponse, mais je fais pas mal de choses en même temps... Merci beaucoup encore une fois, grâce à tes (précieux) conseils, ma BDD est fin prête : le code PL xxxx est incrémenté et se met à jour automatiquement quand j'enregistre mes données. ![]() (pour ceux que ça pourrait aider, une fois ma requête Mise a jour créée , j'ai fait une macro qui ouvre cette requête et je lance cette macro "Après MAJ" dans mon formulaire d'enregistrement des données : il y a peut être plus simple, mais comme ça, ça marche, le "NumCode" est mis à jour à chaque nouvel enregistrement, pour que l'incrémentation suivante du "Code PL xxxx" soit correcte) J'ai fait, je crois, un énorme bond en avant dans ma connaissance d'ACCESS avec cette BDD, je remercie donc grandement ceux qui m'ont aidé !! Peut être à bientôt... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com