Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2008, 10h38   #1
Invité de passage
 
Inscription : juin 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2008
Messages : 14
Points : 2
Points : 2
Par défaut Incrémentation auto : code lettre+chiffres

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...
Mafalda123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 16h37   #2
Rédacteur/Modérateur
 
Avatar de Siguillaume
 
Homme Guillaume SIGUI
Chef de projet en SSII
Inscription : août 2007
Messages : 2 388
Détails du profil
Informations personnelles :
Nom : Homme Guillaume SIGUI
Localisation : Côte d'Ivoire

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : août 2007
Messages : 2 388
Points : 3 177
Points : 3 177
Envoyer un message via Yahoo à Siguillaume Envoyer un message via Skype™ à Siguillaume
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
Siguillaume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 16h44   #3
Invité de passage
 
Inscription : juin 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2008
Messages : 14
Points : 2
Points : 2
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 !
Mafalda123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 19h46   #4
Rédacteur/Modérateur
 
Avatar de Siguillaume
 
Homme Guillaume SIGUI
Chef de projet en SSII
Inscription : août 2007
Messages : 2 388
Détails du profil
Informations personnelles :
Nom : Homme Guillaume SIGUI
Localisation : Côte d'Ivoire

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : août 2007
Messages : 2 388
Points : 3 177
Points : 3 177
Envoyer un message via Yahoo à Siguillaume Envoyer un message via Skype™ à Siguillaume
Regarde

Si ça ne te convient pas, suit cette recherche
__________________
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
Siguillaume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2008, 15h04   #5
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
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 :
1
2
3
Private Sub Lettre_Exit(Cancel As Integer)
if chiffre > 0 then else chiffre = dmax("chiffre","ma_table","lettre like '" & lettre &"'") +1
End Sub
j'explique:
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--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2008, 14h54   #6
Invité de passage
 
Inscription : juin 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2008
Messages : 14
Points : 2
Points : 2
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...
Mafalda123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2008, 16h27   #7
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
hello
Avec plaisir
n'oublie pas le tag résolu
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 15h45   #8
Invité de passage
 
Inscription : juin 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2008
Messages : 14
Points : 2
Points : 2
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 !!
Mafalda123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 23h32   #9
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
hello
déja , tu devrais utiliser les balises de code le # au dessus de la fenêtre
ensuite tu devrais essayer ça
Code :
1
2
3
4
5
6
7
8
9
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
plus sérieusement, il faur savoir qu'est ce que tu as stocké dans la colonne numcode, si c'est dans cette colonne que tu trouves 1651 ça va marcher

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--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2008, 15h23   #10
Invité de passage
 
Inscription : juin 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2008
Messages : 14
Points : 2
Points : 2
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...
Mafalda123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2008, 21h29   #11
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
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--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2008, 16h33   #12
Invité de passage
 
Inscription : juin 2008
Messages : 14
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juin 2008
Messages : 14
Points : 2
Points : 2
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...
Mafalda123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h50.


 
 
 
 
Partenaires

Hébergement Web