Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
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 11/08/2011, 10h31   #1
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
Par défaut Incrémentation d'un numéro à partir d'une date

Mesdames, Messieurs

Je suis entrain de créer une base de données sous access 2007.
Elle me permet d'enregister des échantillons de médicaments qui arrivent dans mon laboratoire.

Pour chaque echantillon receptionné je fait un enregistrement.
J'aimerais que dans mon formulaire, il me suffise de cliquer sur un bouton pour donner à mon echantillon un numéro de la forme AA_MM_XX (AA = année au jour de la saisie, MM = mois au jour de la saisie, XX= 01 si c'est le premier enregistrement de la journée, 02 si c'est le deuxiême enregistrement de la journée... etc.....)

J'ai une base de données qui me sert d'exemple que je ne peux malheureusement pas ouvrir en mode création pour un défaut d'autorisation.
Cependant j'observe que le numéro d'échantillons y est créé à partir d'une table ("Sequence") qui contient un champ ("PREFIX") qui contient les données AA_MM et un champ ("NEXTID") qui contient les données XX

Merci de bien vouloir m'aider à developper cette fonctionnalité.

PS : je suis un béotien de la programmation VBA, je n'utilise que la boite à outils. Si il est possible de ne pas rendre la réponse trop compliqué ce serait au top.

Merci à vous.
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 14h21   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Bonjour,

Citation:
J'aimerais que dans mon formulaire, il me suffise de cliquer sur un bouton pour donner à mon echantillon un numéro de la forme AA_MM_XX (AA = année au jour de la saisie, MM = mois au jour de la saisie, XX= 01 si c'est le premier enregistrement de la journée, 02 si c'est le deuxiême enregistrement de la journée... etc.....)
Par exemple avec ce système, le 1er échantillon de la journée d’aujourd’hui et le 1er échantillon de la journée de demain auront tous les deux le même numéro : 11_08_01, ainsi que tous les 1ers échantillons du mois d’Aout.
C’est voulu comme système ?

Citation:
Cependant j'observe que le numéro d'échantillons y est créé à partir d'une table ("Sequence") qui contient un champ ("PREFIX") qui contient les données AA_MM et un champ ("NEXTID") qui contient les données XX
C’est efficace comme système, surtout en fonctionnement multi-utilisateurs simultanés. Est-ce que c’est le cas ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 14h26   #3
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
Je me suis trompé.
01 si c'est le premier enregistrement du mois
02 si c'est le deuxieme enregistrement du mois
etc....
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 14h29   #4
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
C’est efficace comme système, surtout en fonctionnement multi-utilisateurs simultanés. Est-ce que c’est le cas ?

Oui c'est le cas. Mais par contre je sais pas du tout comment m'y prendre.
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 14h57   #5
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
Visiblement pas mal de gens lisent ma question. Peut être n'y répondez vous pas car ma question est trop vague et necessite une reponse trop longue.

Est il possible de nommé ce que je cherche à faire afin que je puisse mieux effectuer mes recherches.
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 20h56   #6
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 258
Points : 5 258
Oui,

Il te faut créer ton propre numéro, comme on définirait ses propres numéros de factures mensuelles :

Fait une recherche dans le forum sur "numéro de facture" par exemple...

Pour le préfixe il faut utiliser la formule:

Code :
Me.PREFIX = Format(Date, "YY-MM")
et pour l'ID:

Code :
Me.NEXTID = Format(Nz(DMax("NEXTID", "Sequence", "PREFIX='" & Format(Date, "YY-MM") & "'") + 1, 1), "00")
Sans aucune garantie niveau fonctionnement multi-utilisateurs simultanés

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/08/2011, 22h20   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Hé hé, pendant que User répondait, je concoctais une petite fonction permettant de récupérer le prochain indice.

Je la mets quand même hein !

Il faut d’abord créer la table Sequence(PREFIX(texte), NEXTID(entier long)) avec éventuellement une ligne déjà remplie, par exemple :
PREFIX="11-08" et NEXTID=1

Puis copier/coller le code ci-dessous dans un module VBA (ALT F11 puis Insertion>Module)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Public Function GetIndice() As Long
'
   On Error GoTo ErrorHandler
'
Dim LeNouvelIndice As Long
Dim rs As DAO.Recordset
Dim db As DAO.Database: Set db = CurrentDb()
'
  Set rs = db.OpenRecordset("Sequence", dbOpenDynaset) ' on ouvre le jeu d'enregistrements de la table Sequence
 
  rs.FindFirst "[PREFIX]='" & Format(Date, "yy-mm") & "'" ' on cherche dans Sequence le préfixe du jour
 
    If rs.NoMatch Then ' un nouveau mois a commencé
        With rs
          .AddNew
          .Fields("[PREFIX]") = Format(Date, "yy-mm")
          .Fields("[NEXTID]") = 2 'puisqu'on récupère le 1
          .Update
        End With
 
    LeNouvelIndice = 1
 
  Else ' il y a déjà des échantillons ce mois-ci
    With rs
        .Edit
        LeNouvelIndice = .Fields("[NEXTID]")
        .Fields("[NEXTID]") = LeNouvelIndice + 1
        .Update
    End With
  End If
'
rs.Close: Set rs = Nothing
'
GetIndice = LeNouvelIndice
'
Exit Function
'
ErrorHandler:
MsgBox ("erreur n°" & err.Number & " :" & err.Description)
'
End Function
Dans la fenêtre d’exécution (CTRL+G), faire des essais en tapant :
Regarder l’indice retourné et voir si le compteur est mis à jour dans la table Sequence.
Faire d’autres essais en bidouillant PREFIX et NEXTID.

A tester puis on verra après comment utiliser la fonction dans le formulaire.

Avec l’aide de User en plus, ça devrait le faire…
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 15/08/2011, 09h21   #8
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
Voilà F leb, ça à l'air de marcher pas mal là, merci beaucoup.
Pouvez vous m'aider à integrer cela dans un formulaire?

J'ai un peu de mal à obtenir un Textbox avec UN numero sous la forme MM_AA_XX en partant de deux champs différents : MM_AA et XX. Ainsi qu'un bouton next.

Je continue à bricoler un peu...
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 10h38   #9
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour,

essaye sur l'évènement "Avant insertion" de ton formulaire de saisie des échantillons:
Code :
1
2
3
Private Sub Form_BeforeInsert(Cancel As Integer)
Me.CodeEchantillon = Format(Date, "yy-mm") & "-" & Format(GetIndice(), "00")
End Sub
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/08/2011, 11h01   #10
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
Voilà ce que j'ai fait :

Je suis retouner dans mon formulaire.
J'ai ajouter le champ "Sample NR" (numero déchantillons)

J'ai creer un bouton, je suis aller dans la feuille de prorietés du bouton dans l'évenement On click j'ai copier :

Code :
1
2
3
Private Sub Command124_Click(Cancel As Integer)
Me.SampleNR = Format(Date, "yy_mm") & "-" & Format(GetIndice(), "00")
End Sub
Mais apparement c'est pas comme ca que ca marche
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 21h44   #11
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
je ne vois pas d'erreur, sinon qu'entre les deux:

Citation:
Envoyé par puledad1 Voir le message
... le champ "Sample NR"
Citation:
Envoyé par puledad1 Voir le message
je vois un <espace> qui pourrait bien fiche la pagaille...
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/08/2011, 08h16   #12
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
Mais ¨je ne comprend pas alors pourquoi on a creer la table "Sequence" du coup, ne pourrait on pas faire un code qui ressemble à ca (j'invente totalement mais je pemse que vous saisirez l'idée)

Code :
1
2
3
Private Sub Command124_Click(Cancel As Integer)
Me.SampleNR = Format(Fields("[PREFIX]") & "-" & Format(Fields("[NEXTID]")
End Sub
Puis pour afficher l'info dans le formulaire faut il creer un text box ou un combo box?
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 10h44   #13
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Citation:
Envoyé par puledad1
…mais je pense que vous saisirez l'idée
Non, pas bien

La table Sequence permet de stocker le prochain indice à utiliser. La table est bien sûr disponible pour tous les utilisateurs sur la dorsale.

Pour récupérer le prochain indice, on passe par la fonction GetIndice() car il faut aussi mettre à jour l’indice en l’incrémentant à chaque nouvel appel.
Code :
1
2
LeNouvelIndice = .Fields("[NEXTID]")
        .Fields("[NEXTID]") = LeNouvelIndice + 1
Puis lorsqu’on change de mois par rapport au dernier enregistrement créé, la fonction remet le compteur à 1 comme tu l’as demandé.
Code :
1
2
3
4
5
6
7
8
9
    If rs.NoMatch Then ' un nouveau mois a commencé
        With rs
          .AddNew
          .Fields("[PREFIX]") = Format(Date, "yy-mm")
          .Fields("[NEXTID]") = 2 'puisqu'on récupère le 1
          .Update
        End With
 
    LeNouvelIndice = 1
Le plus simple, dans ta table échantillon, tu créés un champ texte SampleNR.

Dans ton formulaire en mode création, dans le ruban en haut tu as un bouton "Ajouter des champs existant", tu fais glisser SampleNR dans le formulaire. Une textbox portant le même nom SampleNR lié au champ de la table est automatiquement ajouté.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/08/2011, 13h08   #14
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
Bon,
Malgré toute votre aide, je n'y arrive pas
J'abandonne.

Merci en tout cas, du temps que vous m'avez accordé.

Bonne continuation.
puledad1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 14h06   #15
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Citation:
Envoyé par puledad1 Voir le message
J'abandonne.
Pas maintenant, tu y es presque

Pourrais-tu mettre un extrait de ton fichier en pièce-jointe (compacté puis zippé) ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/08/2011, 14h39   #16
Invité régulier
 
Homme Adrien
Inscription : août 2011
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 48
Points : 7
Points : 7
YUHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

En voulant faire du rangement dans les lignes de codes pour ne pas avoir honte devant vous, j'ai réussi.

Je ne comprend vraiment rien, j'ai fait tout comme d'hab.

Merci, Merci, Merci
puledad1 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 10h52.


 
 
 
 
Partenaires

Hébergement Web