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 22/03/2007, 12h05   #1
Membre à l'essai
 
Inscription : mai 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 123
Points : 20
Points : 20
Par défaut [Conception]Créer un numéro avec des caractere et des chiffres

Bonjour a tous,

Je voudrais créer un numéro de ce type : "PR-07-" & numéro_automatique avec une taille quelconque.

PR-07- est biensur fixe. Pour faire un numéro automatique j'ai ajouté un champ qui me créée automatiquement et m'incrémente ce champs. le pb c'est que je voudrais, lors de la sasie d'un nouvel enregistrement avoir la valeur de ce champ. Pour le moment il ne donne pas de numéro mais seulement la valeur "(numéro auto)".
N' y a t'il pas moyen de récupérer ce numéro avant d'enregistrer?
__________________
Hittenmitsulugi ryu!!
batosai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 12h54   #2
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
le (numéro auto) se crée dès que tu saisies des données dans la ligne.
Pas à l'enregistrement de la ligne.

je en comprends pas bien ton problème là
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 13h04   #3
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 924
Points : 30 924
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Je procéderais différement, sans numéro automatique :

1 - Dans ta table un champ numérique qui commence à 1 (pas un num auto)
2 - Dans un deuxième champ ton numéro complet : "PR-07 + ton numéro"

Je procéderais de la maniéré suivante :

1 - Lorsque je veux crée un enregistrement je récupére le dernier numéro (le plus grand) du champ donnant les numéros, grâce à l'instruction DMax
2 - Dans le champ où il y'a le numéro "PR ...", je ferais une concaténation de : PR-07 et la valeur trouvé grâce à DMax +1, et ensuite je mettrais à jour le premier champ par DMax +1.

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 13h22   #4
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
euh ... starec, si jamais ca commence toujours par TR-07-, il n'a pas besoin de 2 colonnes, et ton idée du DMAX est une bonne idée.

en fait, suivant ton idée, avec une 'tiote amélioration, ca donnerait une fonction du genre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
Function ProchainID() as string
    Dim vTemp as variant
    Const conNbZero as string="00000000000"
    Const conEnTete as string="TR-07-"
    vTemp=DMax("LeChampID","LaTable")
    if nz(vTemp,"")="" then
        ProchainID= conEnTete & format(1,conNbZero)
    else
        ProchainID= conEnTete & format(Val(mid(vTemp,len(conEnTete)+1)),conNbZero)
    end if
End Function
et il n'a plus qu'à utiliser la fonction...
ce qui évite l'usage de 2 champs...
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 13h35   #5
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 924
Points : 30 924
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour Maxence

Oui, j'avais pas penser au Mid pour récupérer le numéro et l'affecter au prochain +1

Code :
1
2
 
ProchainID= conEnTete & format(Val(mid(vTemp,len(conEnTete)+1)),conNbZero
le +1 ne serait-il pas mieux là ?
Code :
1
2
 
ProchainID= conEnTete & format(Val(mid(vTemp,len(conEnTete))+1),conNbZero)
Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 13h46   #6
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
erf !

en fait, il en faut 2 des "+1"

Code :
1
2
3
4
5
6
7
8
9
10
11
Function ProchainID() as string
    Dim vTemp as variant
    Const conNbZero as string="00000000000"
    Const conEnTete as string="TR-07-"
    vTemp=DMax("LeChampID","LaTable")
    if nz(vTemp,"")="" then
        ProchainID= conEnTete & format(1,conNbZero)
    else
        ProchainID= conEnTete & format(Val(mid(vTemp,len(conEnTete)+1))+1,conNbZero)
    end if
End Function
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 14h04   #7
Membre à l'essai
 
Inscription : mai 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 123
Points : 20
Points : 20
voila ce que j'ai fait ca fonction correctement...
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Function ProchainID() As String
    Dim maxnum As Variant
    maxnum = DMax("non_champ", "nom_table") //champs généré automatiquement
    If Nz(maxnum, "") Then
        maxnum = 1
    Else
        maxnum = maxnum + 1
    End If
    ProchainID = "PR-07-" & maxnum
End Function
j'espere que je n'oubli rien ^^...
__________________
Hittenmitsulugi ryu!!
batosai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 12h29   #8
Membre à l'essai
 
Inscription : mai 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 123
Points : 20
Points : 20
En fait ma fonction marque qu s'il existe deja un enregistrement dans ma table.
Quand la table est vide ca ne marche pas...
Comment expliquer ca?
__________________
Hittenmitsulugi ryu!!
batosai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 12h34   #9
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 924
Points : 30 924
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Re

Avant de lancer ton contrôle il faut tester ton DMax de la maniére suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Function ProchainID() As String
    Dim maxnum As Variant
    If IsNull(DMax("non_champ", "nom_table")) then
          exit Function
    End If
maxnum = DMax("non_champ", "nom_table") //champs généré automatiquement
    If Nz(maxnum, "") Then
        maxnum = 1
    Else
        maxnum = maxnum + 1
    End If
    ProchainID = "PR-07-" & maxnum
End Function
Les fonctions de domaine renvoient NULL si elles ne trouvent rien.

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 15h19   #10
Membre à l'essai
 
Inscription : mai 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 123
Points : 20
Points : 20
Dans le cas ou DMax est null, je voudrais créer le premier numéro. Ce qui ne se fait pas dans ton code. Ton code crée un numéro que si la base contient un élément...
__________________
Hittenmitsulugi ryu!!
batosai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2007, 15h28   #11
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 924
Points : 30 924
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Re

Petite adaptation
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Function ProchainID() As String
    Dim maxnum As Variant
    If IsNull(DMax("non_champ", "nom_table")) then
         ProchainID = "PR-07-1" 
         exit Function
    End If
maxnum = DMax("non_champ", "nom_table") //champs généré automatiquement
    If Nz(maxnum, "") Then
        maxnum = 1
    Else
        maxnum = maxnum + 1
    End If
    ProchainID = "PR-07-" & maxnum
End Function
A tester

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h11.


 
 
 
 
Partenaires

Hébergement Web