Bonjour,
Je voudrais savoir qu'elle est la syntaxe pour nommer le champ d'une requête et s'en servir dans une fonction.
Merci.
Fred
Bonjour,
Je voudrais savoir qu'elle est la syntaxe pour nommer le champ d'une requête et s'en servir dans une fonction.
Merci.
Fred
Bonjour,
il faudrait détailler !
sinon http://access.developpez.com/cours/#data
Dolphy
Démarrage d'une application Web avec Access 2013
L'éditeur de macros d'une application Web avec Access2013
Personnaliser la vue Backstage d'Access 2010
Je ne réponds pas aux questions techniques par MP
Si ma requête s'appelle requête1 et que mon champ paramétré de la requête s'appelle [n°semaine], est que je peux écrire :
requête1![n°semaine]
comme pour le formulaires et états.
re,
Envoyé par fredpeca
Si ton form est ouvert tu peux récupérer ton champ, sinon va voi le lien et passe par un recordset.
Dolphy
Démarrage d'une application Web avec Access 2013
L'éditeur de macros d'une application Web avec Access2013
Personnaliser la vue Backstage d'Access 2010
Je ne réponds pas aux questions techniques par MP
Voilà le code :
et il me met :
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 Form_Open(Cancel As Integer) 'ouvrir la requête rqtContrat2 Set db = CurrentDb Set rst = db.OpenRecordset("rqtContrat2", dbOpenDynaset) rst.FindFirst "[N__SEMAINE]=[Tapez un n° de semaine de 1 à 52]" 'Mémoriser l'mplacement actuel StrSignet = rst.Bookmark 'Se déplacer sur un autre enregistrement rst.MoveLast 'Se replacer au niveau du signet mémorisé rst.Bookmark = StrSignet End Sub
sur cette ligneToo few parametersPour info, la requête rqtContrat2 est la source du formulaire principal frmSaisieContrat. Ce formulaire contient un sous-formulaire frmPointage qui contient le champ [N__SEMAINE].
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set rst = db.OpenRecordset("rqtContrat2", dbOpenDynaset)
Le champ [Tapez un n° de semaine de 1 à 52] fait partie de la requête paramétrée.
bonjour,
je n'ai pas tout bien compris mais j'ai comme l'impression que tu veux afficher dans un sous formulaire des données qui concernent un N° de semaine.
Dans ce cas le plus simple est de faire une zone de liste pour rechercher tes enregistrements selon le n° de la semaine dans le formulaire principal.
soit tu utilises l'assistant ou tu crées toi même une zone de liste et tu recherches tes enregistrements selon
bonne chance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub MaZoneDeListe_AfterUpdate() ' Rechercher l'enregistrement correspondant au contrôle. Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[N__SEMAINE] = " & Me![MaZoneDeListe] Me.Bookmark = rs.Bookmark ' pour aller à un contrôle précis DoCmd.GoToControl "MonControle" End Sub
En fait mon problème vient du fait que le formulaire principal est basé sur une requête paramétrée.
Cette requête permet à l'utilisateur de choisir un n° de semaine.
Ce n° de semaine est présent sur le sous-formulaire.
Le sous-formulaire (pointage) fait partie du formulaire contrat.
Un contrat peut avoir plusieurs pointages (semaines).
Si je choisis la semaine 10, le formulaire principal m'ouvre les contrats qui comportent un pointage semaine 10.
Ca , cela fonctionne.
Ce qui me dérange et que je n'arrive pas à gérer, c'est que les contrats ont plusieurs pointages. Tous les contrats retenus ne me montrent pas en premier le pointage semaine 10, même s'ils l'ont. Je suis obligé pour chaque contrats, de faire défiler les pointages pour arriver sur l'enregistrement semaine 10.
J'espère que c'est plus clair ...
Envoyé par fredpeca
j'espère comprendre. pour cela j'aurais besoin que tu me dises comment est contruit la liaison entre les tables.
Semaines, pointage et contrat. Car si un contrat peut avoir plusieurs pointages il s'agit d'une relation de 1 à plusieurs
Est-ce que tes champs entre le formulaire principal et le sous-formulaire sont-ils liés? ou bien fais-tu un requery?
Personellement je ferais un formulaire avec comme source une requête non paramètrée avec une zone de liste pour rechercher les semaines. Autre possibilité d'ouvrir le formulaire via un bouton et d'avoir une zone de liste pour sélectionner la semaine et ensuite ouvrir le formulaire filtré sur le n° de la semaine. (je ne suis pas un pro mais je me débrouille bien)
Pourquoi ne pas utiliser de vraies requêtes paramétrées ?
http://warin.developpez.com/access/d...=partie_4#L4.7
Ce message vous a été utile ? Si oui, cliquez sur
Mes tutoriels Access
La rubrique Microsoft Access
Cours et tutoriels pour apprendre Access
La FAQ Access
Le Forum Access
Offres d'emploi développeur Access
Au niveau de la construction de ma base. J'ai trois tables :
INTERIM (N°interim, Nom, Prénom, adresse, ...)
CONTRAT (N°Contrat, DébutContrat, FinContrat, Tache, Responsable, N°Interim)
POINTAGE (N°Pointage, N°Semaine, NbHeures, SalaireDeBase, N°Contrat)
INTERIM 1----->n CONTRAT 1----->n POINTAGE
Un interim peut avoir plusieurs contrats.
Un contrat peut avoir plusieurs pointages, un pointage n'appartient qu'à un contrat.
En fait, une personne peut avoir un contrat n°10 du 01/01/07 au 31/05/07. Et chaque semaine est créé un pointage pour ce contrat :
pointage 1 = du 01/01/07 au 07/01/07
pointage 2 = du 08/01/07 au 14/01/07
...
Donc plusieurs personnes peuvent avoir des contrats pour la semaine de pointage 2. Mon but est d'afficher à la demande tous les intérimaires qui seront présents pour la semaine 2 par exemple.
Et vu que le n°Semaine se trouve dans la table pointage, je ne peux pas le déplacer dans la table contrat.
J'ai donc fait :
- une requête paramétrée (rqtContrat2) qui lie les trois tables et qui me permet de choisir le n°Semaine que je veux.
- sur un formulaire de démarrage, j'ai créé un bouton qui déclenche cette requête et m'ouvre un formulaire principal basé sur cette requête (frmSaisieContrat).
- Ce formulaire principal contient un sous-formulaire basé sur la table Pointage et m'affiche tous les pointages du contrat sélectionné.
Mon soucis est que la requête (lorsque je la lance de manière indépendante) m'affiche ce qu'il faut c'est à dire que les pointages demandés et le contrat correspondant. Mais lorsque je lance le formulaire, j'ai les contrats contenant le bon pointage mais aussi tous les pointages (autres semaines) de ce même contrat. Et c'est "un peu" fouilli.
Voilà
En écrivant je viens de voir que le problème vient du fait que mon sous-formulaire est lié à la table pointage.
Je l'ai donc lié à la requête comme le formulaire principal. Cela fonctionne mais il me redemande forcément, à chaque fois que je fais défiler les contrats, quelle semaine je veux (à cause du paramètre de la requête).
Que faire ?
Je tente toujours.
Qu'est-ce qu'il ne va pas sur ma syntaxe :
Il me dit sur cette phrase
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 Private Sub Form_Open(Cancel As Integer) Dim cnn As adodb.Connection Dim rst As adodb.Recordset Dim strCritere As Integer 'ouvrir la requête rqtContrat2 Set cnn = CurrentProject.Connection Set rst = New adodb.Recordset rst.Open "[rqtContrat2]", cnn 'Lire certains enregistrements selon critères strCritere = ([N__SEMAINE] = [Tapez un n° de semaine de 1 à 52]) rst.Find strCritere 'Libérer les objets rst.Close Set rst = Nothing Set cnn = Nothing End Subqu'il manque SELECT, UPDATE, CREATE ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part rst.Open "[rqtContrat2]", cnn
Pourtant c'est déjà une requête...
Pour utiliser ta requête paramètrée ton formulaire "frmSaisieContrat" doit avoir comme source la requête paramétrée "rqtContrat2".
tu ouvres ton formulaire avec l'aide de ton bouton et il va te demander d'entrer le paramètre et ensuite tu auras tous les enregistrements avec des contrat qui ont un pointage dans la semaine choisie.
Maintenant ton sous formulaire doit avoir comme source une requête basée uniquement sur la table pointage.
Le champ père du sous formulaire doit être "N°Contrat" et le champs fils aussi "N°Contrat". De cette manière tu verras seulement les pointages qui concerne le contrat que tu as sélectionné. Si tu fait défiler les contrats tu auras ainsi pour chaque contrat les bons pointages.
suis-je clair?
Pour l'ouverture de ton formulaire contrat tu peux aussi faire de la manière suivante:
ton formulaire saisie tu le base sur une requête qui prend les trois tables mais non paramètrée.
puis avec le bouton pour l'ouverture de ton formulaire tu mets le code suivant:
ton formulaire vas s'ouvrir sur la semaine indiquée et tu peux même faire un test si la semaine n'est pas correct.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub Commande0_Click() Dim Semaine As Long Semaine = InputBox("entrer un numéro de la semaine 1-52") DoCmd.OpenForm "frmSaisieContrat", , , "N°Semaine =" & Semaine End Sub
le reste de ton formulaire tu l'ouvres de la même manière que l'autre.
Très clair.
Mais si tu remarques, c'est ce que j'ai actuellement.
J'ai exactement ce que tu viens d'écrire au niveau de la construction de mes formulaires.
Il m'affiche les bons pointages avec les contrats correspondants mais j'ai trop de pointages affichés puisqu'il me met tous ceux du bon contrat.
Pour un contrat, je vais avoir pareil 15 pointages (dont le bon) mais ce dernier ne s'affiche pas en premier.
Tout marche, mais j'ai trop d'info. Il me faut un seul pointage par contrat dans mon sous-formulaire.
Or chaque contrat comporte plusieurs pointages dont le bon.
Je n'ai pas bien saisi pourquoi tu as besoin de baser ton sous-formulaire sur une requête où il n'y aurait que la table POINTAGE. Moi, je l'ai basé directement sur la table POINTAGE. Cela a peut_être une incidence...
Merci pour ton aide.
J'ai testé ta dernière méthode. Ca marche mais le problème reste le même que ce que j'ai écris au dessus.
Ok dans ce cas il faut mettre un ligne de plus dans la relation père fils de ton sous formulaire.
Il faut rajouter une ligne pour le N° de semaine
La question que je me pose est si tu as plusieurs pointage par contrat pour une semaine donnée?
Non, un pointage correspond à une semaine.
Je viens d'essayer. CA MAAAAAAAAAAAARRCHE !!!!
J'y croyais plus.
J'ai rajouté en père et fils le champ N°SEMAINE. et c'est bon !
Merci milles fois. Ca va me débloquer la situation.
T'es un chef !
A+
Fred
Problème encore. Même si cela marche très bien. Cela m'a bloqué autre chose.
Le but de la manoeuvre était de faire ressortir tous les bons pointages pour chaque semaine. Par exemple, je sors tous les pointages pour la semaine 12.
Ca c'est ce que tu as réussi à faire.
Ensuite, je dois dupliquer dans chaque contrat le pointage de la semaine 12 pour qu'il se rajoute un pointage semaine 13. En effet, pour certains, le contrat n'est pas terminé donc ils continuent à travailler la semaine suivante.
Or ici, par la méthode père/fils, on l'empêche d'afficher les pointages dont le numéro est différent de ce que l'on a choisi. Donc dès que j'appuie sur mon bouton dupliquer, rien ne se passe et c'est normal.
Vois-tu une solution ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager