Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/02/2011, 19h21   #1
Membre régulier
 
Inscription : janvier 2011
Messages : 310
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 310
Points : 76
Points : 76
Par défaut Réinjection de données dans formulaire

Bonjour à tous,

Je tente de réinjecter les valeurs d'une requête dans un formulaire contenant que des champs indépendants pour éviter d'utiliser des variables.

Pour essayer j'ai mis ce code basique sur un bouton dans un formulaire indépendant contenant un combobox de sélection.

Voici le code du bouton :

Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub Commande8_Click()
 
Dim MaRequete As String
 
MaRequete = "SELECT [Devis et Factures].NumDocument,[devis et factures].datedoc FROM [Devis et Factures]" & _
" WHERE ((([Devis et Factures].NumDocument)=[Formulaires]![Formulaire3]![ListeDocuments]));"
 
DoCmd.OpenForm "devis et factures"
Forms![Devis et Factures].RecordSource = MaRequete
 
End Sub
Aucune erreur n'apparait quand je clique sur le bouton mais aucune donnée non plus... Je suppose qu'il faut redéfinir la source de chaque champ du formulaire à ouvrir avec le bouton ..., j'ai essayé en mettant à la suite du code plus haut :

Code :
1
2
forms![devis et facture]![numdocument].controlsource=NumDocument
forms![devis et facture]![DateDoc].controlsource=DateDoc
Mais évidement il me signale que les variables sont inconnues !

Cela veut il dire qu'il faut déclarer la source de chaque champ comme variable avant exécution ? Comment s'y prendre pour avoir le moins de code possible ?

(Pour l'instant je me servais de variables reprises dans un formulaire pour en ouvrir un autre mais vu le nombre de champs existants dans le formulaire final ça devenait pénible, j'ai donc pensé qu'il valait mieux essayer de le remplir avec le résultat d'une requête ...)

Merci d'avance pour vos suggestions
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 05h46   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 037
Points : 11 037
Bonjour,

Résumons :

Tu as dans un formulaire un contrôle indépendant dans lequel tu veux afficher le résultat d'une requête.

Je te suggère d'utiliser une fonction de domaine pour y arriver.

Vois ici comment cela fonctionne :

-Les fonctions de domaine (Philippe JOCHMANS)
http://starec.developpez.com/tuto/fonctionsdomaines/
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 06h15   #3
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Je n'ai pas tout saisi, mais voici ma suggestion :

au lieu de définir la source du formulaire ainsi que le contenu de chaque champ à partir du bouton, il me semblerait plus logique de le faire à partir du formulaire qui s'ouvre.

Dans un premier temps, le bouton ouvre le formulaire

Code :
DoCmd.OpenForm "devis et factures"
Dans un deuxième temps, sur l'événement "Ouverture" du formulaire "devis et facture", vous définissez votre chaîne SQL, puis vous l'affectez comme source du formulaire.


Pour les contrôles, à priori (sauf cas plus complexe), il suffit de leur affecter comme source un des champs de la requête.
Je ne vois pas trop l'intérêt de les mettre indépendant?

Dernière chose : comme votre chaine sql contient une condition "where", il faudra peut-être stocker ces valeur soit des variables globales, soit dans une table paramètre, soit utiliser "open args"

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2011, 10h20   #4
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
pour ce genre de fonctionnement, je base le formulaire "devis et factures"
sur la table [Devis et Factures]. ça peut même être fait à la va vite avec un assistant
enuite, soit j'ouvre le formulaire avec un filtre
Code :
DoCmd.OpenForm "devis et factures",,, "NumDocument)= " & [Formulaires]![Formulaire3]![ListeDocuments]
soit les données sont dans un sous-formulaire, alors j'utilise juste la relation père-fils qui peut d'ailleurs se programmer avec .linkchildfield et .linkmasterfield
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/02/2011, 23h48   #5
Membre régulier
 
Inscription : janvier 2011
Messages : 310
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 310
Points : 76
Points : 76
Bon, alors un peu d'explications pour que vous cerniez mieux le problème :

Le formulaire que je veux remplir avec le résultat de requête est le même qui sert à la saisie des données.
Les champs sont indépendants car c'est la seule façon pour que l'on puisse contrôler finement ce que rentre l'utilisateur dans le dit formulaire et que des conditions puissent être vérifiées en VBA.

Ce que je voulais c'est réinjecter les valeurs dans le formulaire lorsqu'on choisit dans une liste placée dans un autre formulaire.

Jusqu' à présent je déclarais les variables concernant chaque valeur de chaque champ de destination en les reprenant une à une dans le formulaire ou se trouve la liste de choix de documents...

Concernant les fonctions de domaines, je pense que vous vous référez à Dlookup qui serait utilisé autant de fois que de champs à remplir dans le formulaire à ouvrir non ?

Je pensais que l'utilisation d'une requête alourdissait moins le procesus !

Qu'est ce qu'un pro ferait dans un cas comme çà ?
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 04h17   #6
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 612
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 612
Points : 30 965
Points : 30 965
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Citation:
Envoyé par clickandgo Voir le message
Les champs sont indépendants car c'est la seule façon pour que l'on puisse contrôler finement ce que rentre l'utilisateur dans le dit formulaire et que des conditions puissent être vérifiées en VBA.
Même si les champs sont liées tu peux également contrôler finement les saisies et les canaliser.
En effet il y a plein de trucs tel que : masque de saisie, test des valeurs, etc. Et souvent avec moins de codes , voir pas du tout.

Je te conseille de t'orienter vers cette solution, cela allégera ton travail.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 14h21   #7
Membre régulier
 
Inscription : janvier 2011
Messages : 310
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 310
Points : 76
Points : 76
Citation:
Envoyé par Philippe JOCHMANS Voir le message
Bonjour



Même si les champs sont liées tu peux également contrôler finement les saisies et les canaliser.
En effet il y a plein de trucs tel que : masque de saisie, test des valeurs, etc. Et souvent avec moins de codes , voir pas du tout.

Je te conseille de t'orienter vers cette solution, cela allégera ton travail.

Philippe
C' est ce que je faisais avant mais access enregistrait les données dès que l'on changeait de champ, même quand les données n' étaient pas correctes...
En faisant des requêtes par vba après vérification des conditions le contrôle est total , très utile par exemple quand on remplit des lignes de factures/devis.

En effet la ligne ne s'enregistre que si tous les champs et toutes les conditions sont remplis ...
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 15h10   #8
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 037
Points : 11 037
Citation:
mais access enregistrait les données dès que l'on changeait de champ, même quand les données n' étaient pas correctes...
Intéresse-toi à l'événement "Avant Mise à Jour" de ton contrôle.
Cela te permet de vérifier et prendre la main pour
- valider et accepter ;
- corriger d'office ;
- refuser et afficher un message...

édit: c'est alors la propriété ".Text" qu'il faut manipuler (et non pas ".value")
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/03/2011, 19h17   #9
Membre régulier
 
Inscription : janvier 2011
Messages : 310
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 310
Points : 76
Points : 76
J'ai opté pour la fonction de domaine Dlookup qui me ramène toutes les valeurs requises champ par champ, je ne l'avais pas utilisée dans ce procesus croyant qu'elle allait consommer beaucoup de ressource/ temps mais il n'en est rien

Merci à tous
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h15.


 
 
 
 
Partenaires

Hébergement Web