IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Argument pour la fonction NextID


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut Argument pour la fonction NextID
    Bonjour, j'essaye d'appliquer le code trouvé dans la FAQ "Comment supprimer les trous des champs NuméroAuto ?" sur ma table "MoyensH" et mon champ "N" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function NextID(N As String, MoyensH As String) As Long
     Dim sSQL    As String
        Dim rs      As DAO.Recordset
        Dim NumN       As Long
     
        'Chaîne SQL en fonction de LeChamp et de LaTable, retournant NULL ou le numéro du trou
        sSQL = "Select Min([" & N & "]-1) As NextID From " & MoyensH & " As T1 "
        sSQL = sSQL & "Where ((([" & N & "]-1)>0) And (((Select [" & N & "] "
        sSQL = sSQL & "From " & MoyensH & " T2 "
        sSQL = sSQL & "Where T2.[" & N & "]=T1.[" & N & "]-1)) Is Null));"
        Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)
        'Nbre d'enregistrements dans laTable
        NumN = DCount("[" & N & "]", "[" & MoyensH & "]")
        If NumN = 0 Then               'S'il n'y a pas d'enregistrements, mettre 1
            NextID = 1
        ElseIf IsNull(rs(0)) Then   'Si la requête ne renvoie rien, incrémenter de 1 le maximum
            NextID = DMax("[" & N & "]", "[" & MoyensH & "]") + 1
        Else
            NextID = rs(0)          'Sinon, il y a un trou. Renvoyer la valeur du trou
        End If
    End Function
    Comme certains dont j'ai lu le post, j'ai un problème d'application. J'essaye de lancer la fonction à partir d'un bouton qui me permet d'enregistrer la mise à jour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub bNew_Click()
        DoCmd.GoToRecord , , acNewRec
        NextID
    End Sub
    mais un message m'indique "Argument non facultatif". Je comprends donc qu'il lui faut des arguments, j'ai essayer de mettre NextID(N, MoyensH), etc ... mais ça bloque toujours. De plus il est indiqué qu'il faut activer Microsoft DAO 3.x Object Library, mais quand je vérifie il n'est pas coché, et lorsque je le coche ça m'indique "nom de module déjà utilisé" ... Une ptite piste siouplait ? Merci

  2. #2
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    Juste pour le fun, pourquoi veux-tu supprimer les trous de ta numérotation automatique ? En quoi cela te gène-t-il ?
    Gabout

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    La fonction de la faq
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Function NextID(LeChamp As String, LaTable As String) As Long
    a deux arguments (paramètres) en entrée.
    Le nom de la table et le nom du champ. Il faut donc lui fournir ces arguments.
    Comme c'est une fonction, elle retourne une valeur. Il faut la récupérer.
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub bNew_Click()
        Dim lngID As Long
        DoCmd.GoToRecord , , acNewRec
        ' On appelle NextID et on conserve la valeur retournée dans la variable lngID
        lngID = NextID("N", "MoyensH")
    End Sub
    Il te reste maintenant à mettre cette valeur dans le champ.
    Comme tu as l'air d'être dans un formulaire :
    Pour que ça fonctionne il faut que le champ N soit de type Numérique/Entier Long.
    Si c'est un NuméroAuto, tu ne peux pas écrire dedans puisque Access s'en charge.

    A+

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    ok j'ai saisi ça marche merci bien !

  5. #5
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    le code tel qu'il est écrit n'a pas besoin de la bibliothèque DAO;En effet , currentdb est unn objet database permanent connu du moteur jet. DAO n'expose que des objet, des propriétés, des méthodes du moteur Jet.

    Seul ennui, les contants dbxx==> il faut passer aux paramètres des fonctions les valeurs cachées dans ces constantes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Vecteur en argument pour une fonction à 2 variables
    Par namklaw dans le forum MATLAB
    Réponses: 8
    Dernier message: 24/10/2014, 12h49
  2. Réponses: 2
    Dernier message: 28/02/2011, 17h03
  3. Probléme argument pour une fonction d'un SLOT
    Par guillaume40 dans le forum Qt
    Réponses: 3
    Dernier message: 03/03/2008, 13h55
  4. Arguments pour la fonction .search()
    Par michell001 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/08/2007, 10h52
  5. Type de class et arguments pour fonctions et new
    Par Alfred12 dans le forum C++
    Réponses: 15
    Dernier message: 19/01/2007, 01h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo