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?
Configuration: Windows Vista Internet Explorer 7.0

7 réponses

  1. 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
  2. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. 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
  8. perruche
     
    Super!

    Cela fonctionne comme une fleur maintenant!

    Un grand merci!
    0