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 :

Formulaire et VBA


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut Formulaire et VBA
    Bonjour à tous,
    Je viens poster chez vous car je rencontre un souci qui me désespère un peu... Je suis nouvel utilisateur de Access (2016).
    J'ai créé une base de données et jusque là tout va bien. Ensuite, j'ai créé des formulaires permettant d'afficher des données de ma tables en fonctions des critères choisis. Tout va bien là aussi.

    Maintenant je bloque au stade le plus important de ma base de données: créer un formulaire me permettant de saisir des données et de les insérer dans mes tables. En fait en 1 seul enregistrement ça ne marche pas car il y a des codes d&épendant entre table. En claire lorsque je veux insérer dans ma table "info_perso" le "code_emploi" avec un numéro il se met en erreur puisque je n'ai pas encore écrit dans la table "emploi". le champ code_emploi et relié à l'ID auto dans la table "emploi".

    Ma question est la suivante:
    Il faut donc que je fasse un formulaire de saisie avec toutes les données à insérer et à répartir dans un ordre bien précis dans mes tables. Je veux donc créé un code VBA (pour un bouton), pour dire:

    insère tel champs du formulaire dans telle table, tel champ de la table.
    Et ce champ par champ.

    comment faire en VBA ?


    Je vous remercie par avance et j'espère que vous saurez me débloquer ! Car prochaine étape, c'est la corde ...

    Merci à vous !

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    Bonsoir,

    Il faut effectivement créer un formulaire pour pouvoir saisir les informations des tables primaires (ex. ta table "code_emploi")

    Ensuite, il faut utiliser une zone de liste déroulante dans le formulaire pour la saisie de ce "code_emploi" dans le formulaire "info_perso". L'utilisation de l'évènement NotInList permet d'ouvrir le formulaire de la table primaire "code_emploi" pour rajouter de nouvelles valeurs. Une recherche avec l'aide sur cet évènement est très explicite.

    Une base pour la résolution de ton problème.

    Cordialement,

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Effectivement, ça semble une bonne piste ! Merci pour ta réponse !

    Une autre question, je souhaite maintenant faire un formulaire avec un graphe de type "Camembert". En fait ça serait des statistiques: la répartition des domaines d'activités: BTP, environnement, volcanologie, géotechnique, hydrogéologie, ...

    Donc chaque personne enregistrée dans la base à forcément un de ces domaines, associé. Ce domaine est stocké dans la table emploi et champ domaine .

    Je voudrais donc obtenir un graphe statistique et dynamique, qui m'afficherait donc par exemple:

    part BTP 38%
    part volcanologie: 3%
    part planétologie: 1%
    part Réservoirs pétroliers 20%
    part géotechnique: 10%
    ....

    Donc il faudrait trouver le moyen de dire à access:
    1- tu me comptes le nombre de champ avec "BTP"
    2- tu le divises par le nombre total d'enregistrements
    3- tu multiplies le tout par 100 (pour avoir un %).

    4- répéter l'opération pour tout les domaines
    5- tu m'inscris chaque résultats dans un tableau (requête ?)

    En théorie c'est pas compliqué, mais en pratique je suis perdu ...

    Aurais-tu une idée ? Car le malgré mes recherches sur le net, je patauge un peu, car je veux des stats sur une chaine de caractères (texte) et non avec des chiffres.

    Merci à toi

  4. #4
    Membre émérite
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Par défaut
    Bonjour,

    une technique possible pour saisir des donnees qui appartiennent a plusieurs tables est de creer une table dediee uniquement a la saisie
    sur un evenement "Apres Insertion" on declenche des requetes ou des macro de donnees qui creent les enregistrements dans chacune des tables cibles en garantissant l'integrite referentielle

    pas vraiment besoin de VBA a ce stade.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Merci pour tes infos. Mais je suis débutant et je ne comprends rien à ce que tu me dis.
    Tant pis j'abandonne.

    De toute façon Access est une sacrée merde. C'est bourré de bugs ce logiciel. Y'a de quoi s'énerver. Microsoft, encore et toujours, n'est pas à la hauteur. Si ça ne tenait qu'à moins je dirai au chef de projet Acces de passer à la compta chercher son chèque.

  6. #6
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    Benji_flav bonsoir,



    De toute façon Access est une sacrée merde. C'est bourré de bugs ce logiciel. Y'a de quoi s'énerver. Microsoft, encore et toujours, n'est pas à la hauteur. Si ça ne tenait qu'à moins je dirai au chef de projet Acces de passer à la compta chercher son chèque.


    Merci pour tes infos. Mais je suis débutant et je ne comprends rien à ce que tu me dis.
    Tant pis j'abandonne.
    qui bug le plus, celui qui ne se donne pas la peine de comprendre ou ms


    cldt

    jimbolion

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Il s'agit bien de bug Beaucoup d'autres collègues chercheurs préfères écrire en PHP et SQL plutot que d'utiliser access.
    Sinon beaucoup utilisent MS Excel pour leur DB.

    Encore un exemple: j'ai une requête qui était bugée. Je l'ai refaite à l'identique et magie: ça marche. Pour une raison inexpliquée.

  8. #8
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    Benji_flav

    l s'agit bien de bug Beaucoup d'autres collègues chercheurs préfères écrire en PHP et SQL plutot que d'utiliser access.
    Sinon beaucoup utilisent MS Excel pour leur DB.

    Encore un exemple: j'ai une requête qui était bugée. Je l'ai refaite à l'identique et magie: ça marche. Pour une raison inexpliquée.
    ben écoute pas de chance je fais aussi du php et sql !

    mais ce sont deux choses complètement différentes, php est un langage orienté web et sql est une norme pas un langage (access utilise aussi du sql) !

    maintenant tu peux réaliser d'excellents projets clients lourds sous access, compte tenu de tes exigences en performances et volumétries...

    et si en refaisant ta requête elle fonctionne, je suis sûr qu'entre original et reprise il existe des différences entre tes deux versions mais de manière écrite on peut exprimer ce qu'on veut... d'un point de vue développeur j'aurai voulu voir

    En attendant excellente soirée

    cldt

    jimbolion

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Ecoute, je te suggère de jeter un oeil sur ma base Access et si tu arrives à comprendre le soucis, tu marques un point

  10. #10
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    Benji_flav,

    je parle pas de challenge, j'en ai relevé plusieurs je pense !

    je donnerai les bases de la réflexion à ta demande mais tu feras le reste mais attention je ne fais pas de cadeaux

    cldt

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Bien.
    Bon je te fais une liste de bugs non résolus:

    - j'ai un formulaire de recherche multicritères où une requête se cache derrière. Pas de soucis jusque là. Le seul champ qui me pose soucis est le champ "annee_these". Il me plante toute la requete et la requête s'affiche vide. Lorsque je le supprime tout refonctionne. Le champ de la table d'origine est bien en "texte court" comme pour les autres critères, l'appel du nom de mon champ du forumlaire vers la requête est correct. Mais ça ne fonctionne pas. J'ai donc décidé d'abandonner ce critère de recherche.

    - j'ai un critère de recherche du formulaire "secteur" (d'activité) avec un menu déroulant: privé ou public. Je point le contenu du menu vers la table "Choix_secteur" qui ne contient que "privé" ou "public".
    Quand je déroule la liste j'ai :

    "Public
    privé
    privé
    privé
    privé

    privé
    privé"

    comme si il me listait tout le contenu du champ "secteur" de ma table emploi.


    - J'ai la table "Choix_annee" qui apparaît en x5 dans mes relations. J'ai beau les supprimer et enregistrer les relations, cela revient toujours.

    - J'ai une table "Choix_pays" avec 2 champs: Id et Pays.
    J'ai établi une relation de pays vers certaines tables. Comme ça j'ai un menu déroulant avec le nom de tous les pays du Monde. J'ai un formulaire de lecture des données qui fontionne. Quand j'ouvre la requête qui est derrière ça, j'ai bien le nom du pays qui s'affiche. en revanche dans mon formulaire de lecture j'ai le code du pays qui s'affiche ... (ID).

    Même en supprimant le champ ID dans la table "Choix_pays", il me sort quand même un numéro !!
    Le plus marrant, c'est que dans la requete j'ai le nom du pays et dans le formulaire j'ai le code !

    Voilà... Si jamais tu aurais une solution je suis preneur

  12. #12
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    Benji_flav,

    à priori rien de bien complexe dans tout çà mais tu donnes des résultats pas la manière dont tu as construit tes objets :

    - j'ai un formulaire de recherche multicritères où une requête se cache derrière. Pas de soucis jusque là. Le seul champ qui me pose soucis est le champ "annee_these". Il me plante toute la requete et la requête s'affiche vide. Lorsque je le supprime tout refonctionne. Le champ de la table d'origine est bien en "texte court" comme pour les autres critères, l'appel du nom de mon champ du forumlaire vers la requête est correct. Mais ça ne fonctionne pas. J'ai donc décidé d'abandonner ce critère de recherche.
    Comment était construit ta requête, à la volée dans le code ? en faisant appel au champ de ton formulaire par un =forms ?


    - j'ai un critère de recherche du formulaire "secteur" (d'activité) avec un menu déroulant: privé ou public. Je point le contenu du menu vers la table "Choix_secteur" qui ne contient que "privé" ou "public".
    Quand je déroule la liste j'ai :

    "Public
    privé
    privé
    privé
    privé

    privé
    privé"
    Sais tu ce que c'est qu'une requête de regroupement ?

    - J'ai la table "Choix_annee" qui apparaît en x5 dans mes relations. J'ai beau les supprimer et enregistrer les relations, cela revient toujours.
    comment est construit ton modèle ? Comment est construit ta requête ? Si les relations sont définies dans ton modèle, il est normal que les requêtes appliquent les relations sous-jacentes


    J'ai une table "Choix_pays" avec 2 champs: Id et Pays.
    J'ai établi une relation de pays vers certaines tables. Comme ça j'ai un menu déroulant avec le nom de tous les pays du Monde. J'ai un formulaire de lecture des données qui fontionne. Quand j'ouvre la requête qui est derrière ça, j'ai bien le nom du pays qui s'affiche. en revanche dans mon formulaire de lecture j'ai le code du pays qui s'affiche ... (ID).

    Même en supprimant le champ ID dans la table "Choix_pays", il me sort quand même un numéro !!
    Le plus marrant, c'est que dans la requete j'ai le nom du pays et dans le formulaire j'ai le code !
    oui il faut spécifier des longueurs de colonnes et pour récupérer la valeur de la deuxième colonne utiliser column(1)

    ce n'est pas en supprimant le champ ID dans la table "Choix_pays" que tu régleras ton problème ! Pour vérifier tes dires à minima il te faut regarder les recordsource de chacun de tes objets et champs.

    Donc je pense sincèrement que la plupart de tes problèmes viennent de défauts de compréhension d'Access. A ce titre je te propose de fournir des explications précises sur chacun de tes points (les écrans, les requêtes, le modèle relationnel...) ou à défaut fournir le fruit de ton travail dans une base édulcorée (ce qui sera plus simple je pense).

    Cldt

    jimbolion

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Bonjour Jimbolion et merci !
    Alors pour répondre à tes questions:


    Comment était construit ta requête, à la volée dans le code ? en faisant appel au champ de ton formulaire par un =forms ?
    Voilà ce que contient le "Critère" de ma requete dans le champ domaine par exemple, un de mes critère de recherche dans mon formulaire multicritères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Comme "*" & [Forms]![recherche_par_criteres]![domaine] & "*"
    . J'ai trouvé ce petit bout de code dans un coin du net et que j'ai adapté. Ca marche pour tout les champs sauf "annee_these", construit sur la même syntaxe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Comme "*" & [Forms]![recherche_par_criteres]![annee_these] & "*"
    .


    Sais tu ce que c'est qu'une requête de regroupement ?
    Non je ne le savais pas. Que faire dans mon cas alors ?

    oui il faut spécifier des longueurs de colonnes et pour récupérer la valeur de la deuxième colonne utiliser column(1)
    Comment faire pour cela ? Comment lui demander de prendre la 2eme colonne ? Et où dois-je utiliser ce code que tu m'as donné ? Concernant le contenu de la source (propriétés du champs Pays du formulaire de lecture) est une requête SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT recherche_nom.[These].Pays FROM recherche_nom ORDER BY [These].Pays;
    Sauf que c'est le nom d'un pays et non le code pays qui est affiché dans la table Thèse > champ Pays. En gros la table Thèse lui sert le nom d'un pays, le formulaire le récupère et affiche un numéro ...

    Dernière chose, je cherche à insérer un bouton avec un lien vers le site web. Comment faire ? J'ai regardé sur le net mais j'ai trouvé que des choses assez complexes ou qui ne fonctionnent pas ...

    Si certaines choses ne sont pas claires ou manquent de précisions n'hésites pas à me demander !

    Merci à toi !

  14. #14
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    Voilà ce que contient le "Critère" de ma requete dans le champ domaine par exemple, un de mes critère de recherche dans mon formulaire multicritères:
    Code :
    Tu regarderas comment est construit le formulaire recherche_par_critere et son interprétation dans le sous formulaire dont la source de données est basée sur la requête Sf_Req_anneethese.

    elle utilise bien :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Comme "*" & [Forms]![recherche_par_critere].[annee_these] & "*"

    ton souci venait peut être du rafraîchissement de la liste.

    Non je ne le savais pas. Que faire dans mon cas alors ?
    le formulaire recherche_Secteur est basé sur la table Choix_secteur et utilise la requête suivante permettant de regrouper les données :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Choix_secteur.secteur FROM Choix_secteur GROUP BY Choix_secteur.secteur ORDER BY Choix_secteur.secteur;

    Sauf que c'est le nom d'un pays et non le code pays qui est affiché dans la table Thèse > champ Pays. En gros la table Thèse lui sert le nom d'un pays, le formulaire le récupère et affiche un numéro ...
    Il ne faut pas confondre le numéro de ton formulaire avec celui issu de la zone de liste déroulante. Ce numéro (probablement auto) est un id correspondant à un champ de la source de données de ton formulaire principal. Il n'a donc rien à voir avec la récupération de la liste déroulante (le contenu de ce champ de ZL lui doit être mis à jour dans un champ de ta source de données). La zone de liste déroulante te permet de choisir une valeur et ainsi l'affecter à un champ de ta table comme par exemple insérer un pays dans une table client (dans ce cas si la source de ton forms est client, le numéro est celui de l'id client source de ton formulaire).

    Je te laisse mûrir avec la base proposée :

    Cldt

    Jimbolion

    PS. Ensuite je te conseille de poster un sujet par fil de discussion plutôt que pêle-mêle plusieurs questions répondant à une problématique précise avec des exemples et le travail fourni
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. formulaire et sous formulaire access (vba access)
    Par alexkickstand dans le forum Access
    Réponses: 3
    Dernier message: 21/04/2006, 19h11
  2. Création de formulaire en VBA
    Par julio02200 dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2006, 17h10
  3. Création de formulaire en VBA - Plantage
    Par Shansson dans le forum Access
    Réponses: 2
    Dernier message: 18/04/2006, 15h48
  4. enlever la croi pour fermer un formulaire en vba?
    Par xtaze dans le forum Access
    Réponses: 6
    Dernier message: 15/06/2005, 17h16
  5. Créer un formulaire avec VBA ?
    Par Jean Bonnisme dans le forum VBA Access
    Réponses: 3
    Dernier message: 14/10/2004, 10h40

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