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 :

Emplacement du code VBA


Sujet :

VBA Access

  1. #1
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut Emplacement du code VBA
    J'ai un code sert à effacer les trous dans les numéros auto c à dire il crée un numéro juste après le dernier, mais je cherche l'emplacement exacte du code j'ai essayé de plusieurs façons.

    code:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Function NextID(LeChamp As String, LaTable As String) As Long 
     '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
     'Fonction renvoyant le prochain Identifiant, en fonction des valeurs existantes dans une table. 
     'Arguments : 
     '    LeChamp => Nom du champ Identifiant numérique Long concerné 
     '    LaTable => Nom de la table contenant cet identifiant 
     'Retour    : 
     '    1 s'il n'y a rien dans la table 
     '    Le Nombre maximum +1 s'il y a une suite ininterrompue de nombres 
     '    La valeur du nombre manquant en cas de trou. 
     '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
        Dim sSQL    As String 
        Dim rs      As DAO.Recordset 
        Dim n       As Long 
     
        'Chaîne SQL en fonction de LeChamp et de LaTable, retournant NULL ou le numéro du trou 
        sSQL = "Select Min([" & LECHAMP & "]-1) As NextID From " & LATABLE & " As T1 "
        sSQL = sSQL & "Where ((([" & LECHAMP & "]-1)>0) And (((Select [" & LECHAMP & "] "
        sSQL = sSQL & "From " & LATABLE & " T2 "
        sSQL = sSQL & "Where T2.[" & LECHAMP & "]=T1.[" & LECHAMP & "]-1)) Is Null));" 
        Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot) 
        'Nbre d'enregistrements dans laTable 
        n = DCount("[" & LeChamp & "]", "[" & LaTable & "]") 
        If n = 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("[" & LeChamp & "]", "[" & LaTable & "]") + 1 
        Else 
            NextID = rs(0)          'Sinon, il y a un trou. Renvoyer la valeur du trou 
        End If

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,
    et tu attends quel genre de réponse ?
    - dans un module ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut re
    ça n'a pas marché dans un bouton de commande ou autre !!

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    tu le mets où bon te semble, du moment qu'il est déclaré en tant que
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Par défaut
    une function se met effectivement "en général" dans un module mais pour qu'elle functionne il faut l'appeler - là toujours en général cela peut effectivement se faire avec un bouton et un code "sub" attaché à un de ses évènements "souvent clic" et ne pas oublier d'y passer les arguments dont la function a besoin dans ton cas (LeChamp As String, LaTable As String) et normalement ça functionne...

  6. #6
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut ça n'a pas marché
    Veux tu m'indiquer comment fait-on appel à ce code "sur click" j'ai essayé mais je me suis trompé

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Par défaut
    Tu va dans les propriété du controle qui t'interesse, dans l'onglet evenement et puis au niveau de la ligne "sur clic" tu cliques sur les petits pointillés à droite et ensuite génération de code.

  8. #8
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut RE
    Salut
    effectivement mais ça n'a pas marché

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Private Sub Commande29_Click()
    Function NextID(n°_facture As String, tble_facture As String) As Long
     '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
     'Fonction renvoyant le prochain Identifiant, en fonction des valeurs existantes dans une table.
     'Arguments :
     '    LeChamp => Nom du champ Identifiant numérique Long concerné
     '    LaTable => Nom de la table contenant cet identifiant
     'Retour    :
     '    1 s'il n'y a rien dans la table
     '    Le Nombre maximum +1 s'il y a une suite ininterrompue de nombres
     '    La valeur du nombre manquant en cas de trou.
     '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Dim sSQL    As String
        Dim rs      As DAO.Recordset
        Dim n       As Long
     
        'Chaîne SQL en fonction de n°_facture et de tble_facture, retournant NULL ou le numéro du trou
        sSQL = "Select Min([" & n°_facture & "]-1) As NextID From " & tble_facture & " As T1 "
        sSQL = sSQL & "Where ((([" & n°_facture & "]-1)>0) And (((Select [" & n°_facture & "] "
        sSQL = sSQL & "From " & tble_facture & " T2 "
        sSQL = sSQL & "Where T2.[" & n°_facture & "]=T1.[" & n°_facture & "]-1)) Is Null));"
        Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)
        'Nbre d'enregistrements dans tble_facture
        n = DCount("[" & n°_facture & "]", "[" & tble_facture & "]")
        If n = 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°_facture & "]", "[" & tble_facture & "]") + 1
        Else
            NextID = rs(0)          'Sinon, il y a un trou. Renvoyer la valeur du trou
        End If
     
    End Function

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Par défaut
    C'est normal ce code il faut que tu le copie dans un module, peu importe son nom, tu peux en créer un qui serviera juste à receuillir la fonction.
    Donc tu créé un module et tu y ajoutes ceci :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Public Function NextID(n°_facture As String, tble_facture As String) As Long
     '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
     'Fonction renvoyant le prochain Identifiant, en fonction des valeurs existantes dans une table.
     'Arguments :
     '    LeChamp => Nom du champ Identifiant numérique Long concerné
     '    LaTable => Nom de la table contenant cet identifiant
     'Retour    :
     '    1 s'il n'y a rien dans la table
     '    Le Nombre maximum +1 s'il y a une suite ininterrompue de nombres
     '    La valeur du nombre manquant en cas de trou.
     '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Dim sSQL    As String
        Dim rs      As DAO.Recordset
        Dim n       As Long
     
        'Chaîne SQL en fonction de n°_facture et de tble_facture, retournant NULL ou le numéro du trou
        sSQL = "Select Min([" & n°_facture & "]-1) As NextID From " & tble_facture & " As T1 "
        sSQL = sSQL & "Where ((([" & n°_facture & "]-1)>0) And (((Select [" & n°_facture & "] "
        sSQL = sSQL & "From " & tble_facture & " T2 "
        sSQL = sSQL & "Where T2.[" & n°_facture & "]=T1.[" & n°_facture & "]-1)) Is Null));"
        Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)
        'Nbre d'enregistrements dans tble_facture
        n = DCount("[" & n°_facture & "]", "[" & tble_facture & "]")
        If n = 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°_facture & "]", "[" & tble_facture & "]") + 1
        Else
            NextID = rs(0)          'Sinon, il y a un trou. Renvoyer la valeur du trou
        End If
     
    End Function
    Et après tu créé ta procédure "sur clic", à l'intérieure de laquelle tu places ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Commande29_Click()
    Dim Nom_champ As String
    Dim Nom_table As String
    Dim resultat as Long
    'bien entendu il faut que tu renseigne le nom du champ et le nom de la table
     
    Resultat = NextID(Nom_champ, Nom_table)
    if Resultat = 1 then
    msgbox "aucun enregistrement dans la table"
    else
    'traitement
    end if
     
    End sub
    Tu peux ensuite traiter le résultat mais il faut que tu saches à l'avance combien tu as d'enregistrement dans ta table (de ce que j'ai compris de la fonction)

  10. #10
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut Suite
    Slt
    merci de ton aide mais j'ai rencontré ce pb (voit photo)

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Par défaut
    Quel est le message d'erreur d'access ?!
    Mais bon après il s'agit d'une fonction que je ne connais pas (même si elle est relativement simple) donc ce n'est pas facile de la retoucher.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour

    As-tu coché la référence Microsoft DAO 3.6 Object Library dans Outils/Références.

    Starec

  13. #13
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut RE
    Voir photo
    merci de ton interet

  14. #14
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut RE
    Slt
    l'option n'a pas pu être cochée et un message "le nom de module, de projet est dèjà utilisé"

  15. #15
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut RE
    le msg d'erreur:
    erreur d'exécution '3131':
    Erreur de syntaxe dans la clause FROM.

  16. #16
    Invité
    Invité(e)
    Par défaut
    rE

    Citation Envoyé par anouar_chaieb Voir le message
    l'option n'a pas pu être cochée
    Il faut donc la cocher et décocher (si elle est là : Microsfoft Actixe X Data Object ....)

    et un message "le nom de module, de projet est dèjà utilisé"
    Je n'ai jamais vu celle-là, as-tu des modules avec le même nom ? Où deux éléments Module ou Projet qui ont le même nom.

    Starec

  17. #17
    Invité
    Invité(e)
    Par défaut
    Re

    En regardant ta copie d'écran :

    Dans la deuxième partie tu déclares des variables que tu passes en paramètre à la fonction sans leur donner des valeurs, donc tu as une chaine vide dans pour ton From.

    Starec

  18. #18
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Par défaut
    1) le référencement de DAO en 2007 est inutile déjà inclu explication du mess
    seul ADO 2.8 doit si necessaire être éventuellement référencé "pour info seulement" car pas le problème du jour.

    2) d'accord...bien sur avec starec - les valeurs passées à la fonction ne sont pas bonnes et seront vides si elles font appel à par exemple des zones de texte du formulaire et faut faire appel à leur propriété .value je pense dans ce cas.

    3) n'étant pas expert en SQL, je préfère travailler tout en VBA, je suis interpellé par le nom de la fonction au milieu du code SQL enfin parole aux experts je n'ai pas essayé.

  19. #19
    Membre éclairé Avatar de anouar_chaieb
    Inscrit en
    Mai 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 282
    Par défaut re
    salut, j'ai activé ADO 2.8 mais le pb perciste

    Starec a dit:
    Dans la deuxième partie tu déclares des variables que tu passes en paramètre à la fonction sans leur donner des valeurs, donc tu as une chaine vide dans pour ton From.
    peut être c'est le pb mais expliquer un peu

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Par défaut
    bonjour

    je te conseille de faire un
    juste avant ta ligne en erreur de la mettre dans une requete pour regarder ce qui ne vas pas

Discussions similaires

  1. afficher un graphique dans word à partir de mon code vba
    Par guysocode dans le forum VBA Word
    Réponses: 2
    Dernier message: 07/11/2005, 14h15
  2. Réponses: 2
    Dernier message: 27/10/2005, 15h51
  3. Réponses: 4
    Dernier message: 13/10/2005, 14h44
  4. Réponses: 3
    Dernier message: 06/09/2005, 10h27
  5. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55

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