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 14/05/2011, 18h44   #1
Invité de passage
 
Homme Benoit Laniez
Consultant informatique
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Benoit Laniez
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Benoit Laniez
Par défaut Comment enregistrer un numéro de facture personnalisé

Bonjour à tous,

Je suis confronté à un problème (et mon esprit n'arrive pas à trouver la solution) : J'ai crée une base de données qui gère des factures.

J'ai une table facture dans laquelle je souhaite intégrer un numéro de facture personnalisé. J'ai suivi les instructions du tutoriel à ce sujet rédigé par Christophe Warin ("numérotation personnalisée des enregistrements dans Access")

Dans un formulaire de création du numéro, issu de la table facture, dans mon champ N°deFacture, j'ai indiqué comme source controle: ="FA" & Format([date_F];"yyyymm") & Format([indice];"000")
--> jusque là tout va bien, mon numéro auto est bien crée avec le bon indice et tout et tout.

Mais mon blocage : Comment faire pour récupérer ce numéro dans la table ?

- J'ai déjà exploré les forums afin de le faire en VBA, sans trouver mon bonheur
- Est ce que mon ="FA" & Format([date_F];"yyyymm") & Format([indice];"000") est au mauvais endroit ?
- Je suis persuadé que la réponse est simple, mais que mon cerveau n'arrive pas à la trouver

D'avance merci pour votre aide,

Cordialement,

Benoit
Benoit Laniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 19h18   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

La source du contrôle N°deFacture doit rester le champ N°deFacture de la table facture.
En mettant une formule dans la source du contrôle, tu déconnectes ce dernier de la table.

Dans la partie du code qui met à jour le champ indice, tu mets à jour le champ N°deFacture.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub TaProcedureEvenementielle()
Dim lgNouvelIndice As Long
 
' ... logique de calcul du nouvel indice
lgNouvelIndice = nouvelle valeur
 
' Affectation nouvel indice
Me.Indice = lgNouvelIndice
 
' Nouveau N° de facture
Me.[N°deFacture] = "FA" & Format(Me.[date_F], "yyyymm") & Format(lgNouvelIndice, "000") 
End Sub
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/05/2011, 20h04   #3
Invité de passage
 
Homme Benoit Laniez
Consultant informatique
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Benoit Laniez
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Benoit Laniez
Merci beaucoup pour cette réponse rapide !

Je dois mal intégrer dans mon code ta réponse car désormais, il me met systématiquement 0 pour l'indice (désolé je suis une quiche en VBA ...)

Ci dessous mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim oRst As DAO.Recordset
 
If Me.NewRecord Then
Set oRst = CurrentDb.OpenRecordset("Select Max(indice) From T_Facture where Format(Date_F,""yyyymm"")=" & Chr(34) & Format(Me.Date_F, "yyyymm") & Chr(34))
 
With oRst
If Not .EOF Then
Me![Indice].Value = Nz(.Fields(0).Value, 0) + 1
Else
Me![Indice].Value = 1
End If
.Close
End With
End If
 
Dim LgNouvelindice As Long
Me.Indice = LgNouvelindice
Me.N°deFacture = "FA" & Format(Me.[Date_F], "yyyymm") & Format(LgNouvelindice, "000")
 
 
End Sub
Benoit Laniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 20h11   #4
Invité de passage
 
Homme Benoit Laniez
Consultant informatique
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Benoit Laniez
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Benoit Laniez
A nouveau encore Merci, j'ai cherché un peu plus loin que le bout de mon nez ... et cela fonctionne : mon nouveau code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim oRst As DAO.Recordset
 
If Me.NewRecord Then
Set oRst = CurrentDb.OpenRecordset("Select Max(indice) From T_Facture where Format(Date_F,""yyyymm"")=" & Chr(34) & Format(Me.Date_F, "yyyymm") & Chr(34))
 
With oRst
If Not .EOF Then
Me![Indice].Value = Nz(.Fields(0).Value, 0) + 1
Else
Me![Indice].Value = 1
End If
.Close
End With
End If
 
 
Me.N°deFacture = "FA" & Format(Me.[Date_F], "yyyymm") & Format(Me.Indice, "000")
 
 
End Sub
Benoit Laniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 21h09   #5
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Oui, c'est ça.

Dans ma proposition, je passais par une variable intermédiaire.
C'est mieux pour le débogage.

Pense à ...
  • utiliser les balises de code (#) pour mettre en forme ton code VBA.
    Voir ici : Aide au nouveaux
     
  • utiliser le bouton
Merci

A+
LedZeppII 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 13h30.


 
 
 
 
Partenaires

Hébergement Web