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 :

Modification d'une requête en VBA [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut Modification d'une requête en VBA
    Bonjour,
    J’ai un formulaire avec lequel je gère les adhérents de mon association.
    Quand ils se sont inscrits une année je mets « O » dans un champs correspondant à l’année en question (A_2022) pour cette année.
    J’ai créé des champs de 1980 à 2030.
    Quand je désire lister les adhérents d’une année donnée je les défile dans mon formulaire en utilisant comme base de données une requête par année choisie d’où 50 requêtes différentes !!!

    Nom : Capture d’écran 2022-08-27 074748.png
Affichages : 217
Taille : 7,2 Ko

    Serait-il possible d’avoir une requête de base dans laquelle je modifierais à la demande la valeur de « Critères » dans cette requête ?
    Le principe serait en appelant la procédure d’effacer les « O » éventuels des champs A_1980 à A-2030 et de mettre un « O » dans l’année choisie.
    Pour le moment j’utilise la procédure suivante sachant que je n’utilise pas encore le nom du champ strNomChamp

    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
    Private Sub choix_annee_Change()
     On Error GoTo Err
        Dim strNewRecord As String
        Dim strNomChamp As String
        strNewRecord = "R_inscrit" + Str(choix_annee.value)
        strNomChamp = "A_" + Str(choix_annee.value)
     
        If annee_choisie.value < 2023 And annee_choisie.value > 1980 Then
            Me.RecordSource = strNewRecord
            Me.Modifiable838.Visible = False
        End If
     
    Err:
         MsgBox "Erreur survenue"
     
    End Sub
    Merci pour vos lumières
    Cordialement
    Serge VM

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    J’ai créé des champs de 1980 à 2030.
    Quand je désire lister les adhérents d’une année donnée je les défile dans mon formulaire en utilisant comme base de données une requête par année choisie d’où 50 requêtes différentes !!!
    Il aurait fallu créer un seul champ pour enregistrer l'année à la place de ces 50 cases de choix.

    Cdlt
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Bonjour, merci de m'avoir lu.
    Par contre dans un champ ça ne suffisait pas pour des adhérents inscrits plusieurs années.
    Voici l'allure de mon formulaire.
    Nom : Capture d’écran 2022-08-27 183326.png
Affichages : 179
Taille : 51,1 Ko
    Quand on clique sur une année ça met "O" dans le champ de l'année et fait changer le carré de couleur d'où une bonne visibilisation
    du parcours de l'adhérent.
    J'avais trouvé ça joli et ça saute bien aux yeux.
    Merci de prendre cet aspect en considération.
    Cordialement.
    Serge VM

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Pour éviter les 50 requêtes, il faudrait utiliser la fonction premvrai(condition1, si_condition1, condition2, si_condition2, etc..).

    Si votre paramètre année se nomme Param_Annee, vous auriez un champ calculé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filtre_Annee: PremVrai([Param_Annee]=1980;[A_1980];[Param_Annee]=1981;[A_1981];...;[Param_Annee]=2019;[A_2019];[Param_Annee]=2020;[A_2020];[Param_Annee]=2021;[A_2021];[Param_Annee]=2022;[A_2022];...)
    Sous ce champ vous mettez sur la ligne critère :

    "O"
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut User
    D'accord avec toi.Une relation binaire aurait été préférable.
    Un sform puis une qry d'analyse croisée sont bien plus efficace que tout autre argument qui me laisse toujours perplexe.
    Parce que je me pose la question comment va-t-il s'y prendre pour ajouter la période 2031/2040 ?
    Citation Envoyé par User Voir le message
    Bonjour,
    Il aurait fallu créer un seul champ pour enregistrer l'année à la place de ces 50 cases de choix.
    Cdlt
    Images attachées Images attachées   
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Oui, c'est important qu'il ait tous les éléments, après il fait son choix..
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Bonjour à toutes et à tous,
    Vos réflexions m'ont ouvert l'esprit !
    En réalité la solution était vraisemblablement beaucoup plus simple encore faut il savoir comment la programmer.
    Si dans les propriétés de mon formulaire je peux modifier mon filtre ça marche au poil.
    Nom : Capture d’écran 2022-08-28 082104.png
Affichages : 182
Taille : 16,6 Ko

    Comment puis-je modifier la valeur de "Filtre" à la demande ???
    Merci pour vos réponses.
    Cordialement.
    Serge VM

    PS Pour les années suivantes j'ai 2 pages d'affichage des années

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Par contre dans un champ ça ne suffisait pas pour des adhérents inscrits plusieurs années.
    PS Pour les années suivantes j'ai 2 pages d'affichage des années
    Un champ suffit (et doit suffire !) pour inscrire plusieurs années !
    en enregistrant les années dans une colonne TEXTE sous la forme "1975 1978 1980 .. 2012 2020".
    Pour les sélectionner, une liste des années dans laquelle tu peux sélectionner plusieurs valeurs (personnellement je ferais cela avec une ListView si OFFICE 32 bits, mais ca demande un peu de code).
    Ensuite exploiter ce champ comportant plusieurs années, avec un peu de code, on peut construire facilement tous les critères souhaités.
    "Always look at the bright side of life." Monty Python.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Merci à tous pour votre aide mais désolé je ne comprends pas comment m'y prendre.
    Le pire est que ce que j'ai fait marche !
    Je ne suis pas du style à demander de l'aide et à ne pas en tenir compte.
    Je suis conscient que ce que j'ai fait est affreux et lourd, de plus j'en suis à plus de 5000 enregistrements et ne voudrais tout fusiller.
    Créer un champ texte avec potentiellement 50 années d'inscription me semble dur à manipuler et ensuite faire défiler mes enregistrements filtrés en fonction d'une recherche sur chaque enregistrement ne va pas être bien rapide.
    Je vais étudier une table liée mais en attendant je serais déjà content si je pouvais filtrer mes enregistrements en fonction de l'année choisie du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Form.Filter = Je_ne_sais_pas_comment_me_référer_au_champ = "O"
    Du coup plus besoin de toutes mes requètes

    Sachant que je dispose d'une variable strNomChamp contenant le nom du champ en question (R_2022 par exemple)
    J'ai essayé avec parenthèses, crochets, apostrophes de toutes sortes en vain

    Merci en tous cas pour votre réactivité.
    Cordialement.
    Serge VM

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Vous créez une table T_Annees_Inscrits(Id, Id_Adherent, Annee).

    Ensuite, cette fonction va vous transférer vos données de la table T_Adherent(Id_Adherent,...) à la nouvelle table T_Annees_Inscrits :

    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
    34
    35
    Public Function genererAnneesInscrits()
        Dim dbs As DAO.Database
        Dim rst1 As DAO.Recordset
        Dim rst2 As DAO.Recordset
        Dim an As Long
     
        Set dbs = CurrentDb
     
        Set rst1 = dbs.OpenRecordset("T_Adherents")
        Set rst2 = dbs.OpenRecordset("T_Annees_Inscrits")
     
        Do Until rst1.EOF
     
            For an = 1980 to 2030 ' parcours des champs "A_...."
                If rst1("A_" & an).Value = "O" Then ' si le champ contient "O"
                    rst2.AddNew ' ajout à la table T_Annees_Inscrits de l'année et de l'id de l'adhérent
                    rst2!Annee = an
                    rst2!Id_Adherent = rst1!Id_Adherent
                    rst2.Update
                End If
            Next an
     
            rst1.MoveNext ' adhérent suivant
        Loop
     
        'libération des variables
        rst1.Close
        rst2.Close
     
        Set rst1 = Nothing
        Set rst2 = Nothing
     
        Set dbs = Nothing
     
    End Function
    Vous pouvez l'exécuter en l'appelant simplement dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call genererAnneesInscrits()
    Ensuite comme indiqué par hyperion, en faisant une requête analyse croisée avec en en-tête de colonne les années vous pourrez mettre à jour vos années sur votre formulaire de la même manière qu'auparavant.

    Cdlt
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    C'est vraiment gentil de prendre la peine de me détailler le cheminement, et c'est lumineux !
    Mais du coup, au lieu de faire appel à une table contenant tous les éléments de l'adhérent je me retrouve avec 2 tables.
    L'utilisation la plus fréquente est de chercher un individu pour voir où il est est, les requêtes par années sont beaucoup moins utilisées.
    Utiliser 2 tables ne va t'il pas ralentir la navigation ?
    De toutes façons je vais suivre votre conseil, après moult sauvegardes, je crains que vous me voyiez réapparaitre quand je vais ramer pour faire ma requête par année !!!!
    Merci encore pour votre expertise.
    Cordialement.
    Serge VM

    PS C'est quand même dommage que je n'arrive pas à écrire ma programmation de filtre, ça m'aurait bien plu !

  12. #12
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Access n'est pas fait pour ça :

    Je me souviens que la 1ère base de données que j'avais faite, j'avais tout rassemblé dans une seule table car je trouvais que ça facilitait la saisie au niveau du formulaire.

    Le but était en fait de collecter des données pour ensuite faire des recherches et des analyses statistiques .

    Au moment des tests, j'ai vite compris mon erreur, les données n'étaient pas exploitables, et j'ai du tout refaire en m'appuyant cette fois sur un bon schéma relationnel.

    Cdlt
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  13. #13
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Bon, bon, je m'y colle, mais à 78ans ça devient dur !!!
    Merci encore.
    Serge VM

  14. #14
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Bonjour,
    En bon élève j'ai créé la fonction genererAnneesInscrits()
    Dans mon formulaire j'ai créé un bouton pour lancer la fonction.
    Sur l'évènement "Sur clic" je rentre:
    =genererAnneesInscrits(
    Access trouve bien votre fonction mais ouvre une parenthèse
    J'ai cherché ce que l'on pouvait bien mettre dedans mais je n'arrête pas de me faire injurier !!!
    Merci pour votre aide.
    Cordialement.
    Serge VM

  15. #15
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Je vous joins une base avec un formulaire de test.

    Vous verrez mieux comment mettre en place tout ça...

    Cdlt
    Fichiers attachés Fichiers attachés
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  16. #16
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Bonsoir,
    Je suis désespéré.
    Après avoir créé ma fonction j'ai régulièrement le message
    Nom : Capture d’écran 2022-08-31 191852.png
Affichages : 132
Taille : 15,6 Ko
    Une fois par hasard à force de bricoler j'ai réussi mais avec un nombre d'années réduit.
    Quand j'ai voulu corriger la fonction plus rien n'a fonctionné.
    Du coup je me dis que je m'y prends mal pour créer cette fameuse fonction.
    Voici ce que j'ai effectué.
    1-Mon formulaire en mode création
    2-Onglet Créer
    3-Module (j'ai essayé aussi avec module de classe)
    4-Copie de votre fonction
    5-Enregistrement sous le nom prévu genererAnneesInscrits
    6-Sur clic du bouton créé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CreerAnneesInscrits_Click()
        Call genererAnneesInscrits
    End Sub
    Et à tous les coups ce message sachant que chaque fois je recharge une version propre de mon application.
    J'ignore où je me plante et ça m'agace d'autant plus qu'une fois ça a marché mais aucune idée de ce que j'avais fait de différent à ce moment là !!!
    Le mieux c'est que je vois cette fonction dans le volet gauche de l'écran dans la rubrique "Objets non associés" et que si je propose sur clic d'opter pour le Générateur d'expression il voit la fonction...
    Si je l'ouvre en mode création elle est bien telle que prévu (avec Option Explicit comme vous).
    Je sèche ne compte plus que sur votre aide si tant est que mes explications vous permette de me l'apporter.
    Cordialement.
    Serge VM

  17. #17
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Apparemment, en :

    5-Enregistrement sous le nom prévu genererAnneesInscrits
    Il faudrait donner au module un nom différent de la fonction, par exemple M_genererAnneesInscrits.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  18. #18
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Bonsoir,
    J'ai essayé exactement ça: M_... ou MC_... avec module de groupe.
    Rien à faire.
    Je vais essayer avec un nom totalement différent.
    Je vous tiens au courant et merci encore.
    Cordialement.
    Serge VM

  19. #19
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut version n°2
    Bonjour,

    La base contient la fonction genererAnneesInscrits pour prendre cette fois en compte les 50 années.
    La fonction vide aussi au début la table T_Annees_Inscrits, avant de la remplir à nouveau.

    Un formulaire F_Adherent avec un tableau de 50 boutons à bascule, correspondant aux 50 années :

    Nom : F_Adherent.png
Affichages : 127
Taille : 16,9 Ko

    Le module M_Generer_Annees, contient aussi une fonction updateAnneeInscrit pour ajouter/supprimer une année dans la table (à mettre sur l'événement click des boutons à bascule) :

    Code VBA : 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
    34
    Public Function updateAnneeInscrit(annee As Long)
        ' fonction placée sur l'événement clic des boutons à bascule
        Dim dbs As DAO.Database
        Dim rst As DAO.Recordset
        Dim idAdherent As Long
     
        Set dbs = CurrentDb ' référence à la base de données
        ' ouverture du recordset basé sur la table T_Annees_Inscrits
        Set rst = dbs.OpenRecordset("T_Annees_Inscrits", dbOpenDynaset)
     
        idAdherent = Screen.ActiveForm!Id_Adherent
        ' recherche de l'année de l'adhérent
        rst.FindFirst "(Id_Adherent=" & idAdherent & ") and (Annee=" & annee & ")"
     
        If rst.NoMatch Then ' si pas trouvée
     
            If Screen.ActiveControl.Value = True Then ' si le bouton à bascule est à True
                rst.AddNew ' ajout de l'année et de l'adhérent dans la table
                rst!Id_Adherent = idAdherent
                rst!annee = annee
                rst.Update
            End If
        Else ' si l'année a été trouvée dans la table T_Annees_Inscrits
            If Screen.ActiveControl.Value = False Then ' si le bouton à bascule est à False
                rst.Delete ' suppression de l'année dans la table
            End If
        End If
        ' libération des variables objet
        rst.Close
        Set rst = Nothing
     
        Set dbs = Nothing
     
    End Function

    Affectation de la fonction sur ouverture du formulaire F_Adherent :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Open(Cancel As Integer)
        Dim an As Long
     
        For an = 1981 To 2030 ' parcours des années
            Me("A_" & an).OnClick = "=updateAnneeInscrit(" & an & ")" ' affectation de la fonction sur l'événement clic du bouton à bascule
        Next an
     
    End Sub

    Enfin, mise à jour du tableau des années sur l'événement activation du formulaire (current en anglais) :

    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
    Private Sub Form_Current()
        Dim an As Long
        Dim dbs As DAO.Database
        Dim rst As DAO.Recordset
     
        For an = 1981 To 2030 ' parcours des années
            Me("A_" & an).Value = False ' on met chaque bouton à false
        Next an
     
        Set dbs = CurrentDb
        ' ouverture du recordset contenant les années de l'adhérent
        Set rst = dbs.OpenRecordset("select * from T_Annees_Inscrits where Id_Adherent=" & Nz(Me.Id_Adherent, 0))
     
        Do Until rst.EOF ' parcours des années de l'adhérent
            Me("A_" & rst!annee).Value = True ' on met le bouton correpondant à l'année enregistrée dans la table à True
            rst.MoveNext ' prochaine année de l'adhérent
        Loop
     
        rst.Close
     
        Set rst = Nothing
        Set dbs = Nothing
     
    End Sub
    Attention aussi aux noms des tables et des champs dans le code :

    table
    "T_Annees_Inscrits"

    Champs
    "id_Adherent"
    "A_1981",..."A_2030"
    ...

    Cdlt
    Fichiers attachés Fichiers attachés
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  20. #20
    Membre à l'essai
    Homme Profil pro
    Vétérinaire retraité
    Inscrit en
    Août 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vétérinaire retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2022
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Ouaouuuuuu !
    Comment trouver les mots pour vous remercier ?????
    Bonne journée.
    Je me mets au travail.
    Bien cordialement
    Serge VM

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. comment exprimer une requête en vba
    Par FRIGAUX dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/03/2007, 18h40
  2. enregistrer des modifications dans une requête
    Par Lenalyon dans le forum WinDev
    Réponses: 1
    Dernier message: 14/02/2007, 10h58
  3. executer une requête en VBA : macro ou pas ?
    Par Cantalou dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 26/01/2007, 14h35
  4. Comment exécuter une requête en VBA ?
    Par rob2-9 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 01/08/2006, 12h00
  5. Modification d'une "requête" inscrite dans la base
    Par Tardiff Jean-François dans le forum Access
    Réponses: 5
    Dernier message: 07/04/2006, 15h51

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