Access, valeur automatique étiquette

perruche -  
 perruche -
Bonjour,
Je voudrais, à l'ouverture d'un formulaire, remplir une étiquette avec la valeur du dernier enrégistrement d'un champ d'une table +1 (donc une numérotation automatique sans pour autant créer une nouvelle entrée)
Comment faire?

7 réponses

incaout Messages postés 347 Date d'inscription   Statut Membre Dernière intervention   74
 
Salut.

Voici un bout de code à créer en mode VBA dans Access. C du DAO et non ADO. A vérifier ce que ta base utilise.

Function Get_Compteur() As Long

Dim db As Database
Dim enr As Recordset
Dim compteur As Long

Set db = CurrentDb
Set enr = db.OpenRecordset("Societe", dbOpenDynaset)
If enr.RecordCount > 0 Then
enr.MoveLast
compteur = enr.RecordCount + 1
End If
enr.Close
db.Quit

Set enr = Nothing
Set db = Nothing

End Function

end sub

Cette fonction te retoune le nb d'enregistrement dans la table demandée (ici société) incrémenté de 1

Il ne te reste plus qu'à créer un événement sur le chargement de ton formulaire et dans le code de cet événement faire une ligne du genre

NomEtiquette.caption = Get_Compteur

Cdlt

IC
0
perruche
 
Merci pour votre réponse rapide.
J'ai introduit le code (adapté à ma base) comme vous l'avez indiqué:
Function Get_Compteur() As Long
Dim db As Database
Dim enr As Recordset
Dim compteur As Long
Set db = CurrentDb
Set enr = db.OpenRecordset("COUPLE", dbOpenDynaset)
If enr.RecordCount > 0 Then
enr.MoveLast
compteur = enr.RecordCount + 1
End If
enr.Close
db.Close
Set enr = Nothing
Set db = Nothing
End Function

Cependant, quand j'apelle "Get_Compteur", il me retourne systhématiquement "0"; que la table "COUPLE" soit vide ou non.
précision: je travaille avec access 2007

merci d'avance pour votre aide,
0
incaout Messages postés 347 Date d'inscription   Statut Membre Dernière intervention   74
 
Salut.

Ce code fonctionne bien avec Access 2000, mais avec 2007, je ne sais pas du tout.

Par contre, il faut que tu vérifies que tu as bien inclus la référence à DAO dans le menu Outils -->Reférences. Sinon les méthodes permettant d'utiliser les recordset ne marcheront pas. Par défaut ADO est utilisé car jugé plus récent.

Tu peux aussi remplacer les méthodes DAO par leur équivalent ADO. Mais je ne me suis jamais penché sur cette question pour le moment.

Cdlt

IC
0
perruche
 
C'est probablement le problème; seulement, en access 2007 je ne trouve pas comment inclure/changer la référence; et encore moins comment remplacer les méthodes DAO, étant donné que je suis assez novice dans la programmation de bases de données.
Quequ'un aurait une idée comment résoudre le problème?
Merci d'avance,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
perruche
 
J'ai trouvé la solution; une bonne nuit de casse-tête a suffit d'introduire le code directement au chargement du formulaire, sans faire appèl à une fonction; là cela fonctionne à merveille!
je ne sais pas pourquoi le même code ne donnait rien en l'appelant la fonction?
aussi j'ai ajouté "DAO." à "database" et "recordset"
Ma solution est sans doute moins élégante; si jamais qq'un pourrait l'améliorer?
Merci
0
incaout Messages postés 347 Date d'inscription   Statut Membre Dernière intervention   74
 
Salut.

Je pense savoir où est le problème. C spécifique à VBA et je me souviens que j'avais au début pas mal galéré à cause de cela.

En VBA pour qu'une fonction renvoie son résultat, le resultat doit être associé au nom de la fonction. De fait le code que je t'ai donné est faux dans la mesure où au lieu de stocker le résultat dans Compteur, il aurait fallu le stocker dans le nom même de la fonction : Get_Compteur

Voici le code modifié. J'en ai aussi profité pour la rendre utilisable avec n'importe quelle table. Elle prend le nom de la table en paramètre.

Function Get_Compteur(nomTable as string) As Long
Dim db As Database
Dim enr As Recordset
Set db = CurrentDb
Set enr = db.OpenRecordset(nomTable, dbOpenDynaset)
If enr.RecordCount > 0 Then
enr.MoveLast
Get_compteur = enr.RecordCount + 1
End If
enr.Close
db.Close
Set enr = Nothing
Set db = Nothing
End Function

Et normalement, cela devrait marcher. Tu peux donc normalement l'appeler comme une fonction :

monEtiquette.caption = Get_Compteur("Couple");

Désolé pour l'erreur initiale, mais dans tous les autres langages que je connais, le renvoi de résultats est indépendant du nom de la fonction.

Cdlt,

IC
0
perruche
 
Super!

Cela fonctionne comme une fleur maintenant!

Un grand merci!
0