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

Requêtes et SQL. Discussion :

Comment utiliser en VBA le champ paramétré d'une requête ?


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut Comment utiliser en VBA le champ paramétré d'une requête ?
    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

  2. #2
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Bonjour,

    il faudrait détailler !

    sinon http://access.developpez.com/cours/#data

    Dolphy

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    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.

  4. #4
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    re,
    Citation Envoyé par fredpeca
    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.


    Si ton form est ouvert tu peux récupérer ton champ, sinon va voi le lien et passe par un recordset.

    Dolphy

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Voilà le 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
    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
    et il me met :
    Too few parameters
    sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = db.OpenRecordset("rqtContrat2", dbOpenDynaset)
    Pour 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].
    Le champ [Tapez un n° de semaine de 1 à 52] fait partie de la requête paramétrée.

  6. #6
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    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

    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
    bonne chance

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    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 ...

  8. #8
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Citation Envoyé par fredpeca
    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 ...

    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)

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pourquoi ne pas utiliser de vraies requêtes paramétrées ?

    http://warin.developpez.com/access/d...=partie_4#L4.7

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    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à

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    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 ?

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Je tente toujours.

    Qu'est-ce qu'il ne va pas sur ma syntaxe :

    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 Sub
    Il me dit sur cette phrase
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rst.Open "[rqtContrat2]", cnn
    qu'il manque SELECT, UPDATE, CREATE ...
    Pourtant c'est déjà une requête...

  13. #13
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    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?

  14. #14
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    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:

    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
    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.

    le reste de ton formulaire tu l'ouvres de la même manière que l'autre.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    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.

  16. #16
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    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.

  17. #17
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    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?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Non, un pointage correspond à une semaine.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    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

  20. #20
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    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 ?

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

Discussions similaires

  1. [VBA EXCEL]comment utiliser les boites a outils control sur une feuille excel
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/02/2007, 19h04
  2. Réponses: 3
    Dernier message: 26/09/2006, 11h06
  3. Réponses: 1
    Dernier message: 13/09/2006, 17h41
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Réponses: 6
    Dernier message: 25/03/2006, 17h46

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