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

Access Discussion :

Syntaxe dans Where (docmd.openform)


Sujet :

Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Par défaut Syntaxe dans Where (docmd.openform)
    Bonjour,

    Je ne comprends pas ce qui ne veut pas dans cette syntaxe.
    Pouvez-vous m'aider. Le champ N__SEMAINE fait partie d'un sous-formulaire. Je veux afficher seulement les enregistrements dont le n°de semaine correspond à ce que choisit l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande30_Click()
    Dim NSemaine As Integer
    NSemaine = Val(InputBox("Taper un numéro de semaine :", "Choix de la semaine"))
     
    DoCmd.OpenForm "frmSaisieContrat", acNormal, , "Forms![frmSaisieContrat]![frmPointage].Form![N__SEMAINE]= " & NSemaine
     
    End Sub
    Merci.

    Fred

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Le paramètre WHERECONDITION de Docmd.OpenForm est utilisé pour filtrer la table our la requêtesous-jacente du formulaire ouvert par Docmd...

    C'est un paramètre de type String, dont la syntaxe ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wherecondition:="MonChamp = MaValeur"
    et doit correspondre à une syntaxe SQL valide.
    Si MaValeur est le résultat d'une variable, tu auras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WhereCondition:="MonChamp = " & MaValeur ' MaValeur est numérique
    WhereCondition:="MonChamp = '" & MaValeur & "'" ' MaValeur est de type string
    Dès lors, le terme de gauche de l'égalité doit correspondre à un champ valide de la table ou de la requête sous-jacente du formulaire. Or, dans ton exemple, tu demande que ce soit un champ du formulaire (la valeur d'un contrôle, en fait) qui soit égale à Nsemaine.

    Tu peux bien sûr complexifier la condition avec des AND, des OR, ... mais c'est actuellement hors de propos, je pense.

    C'est là que le problème se pose.

    Ceci t'aide-t'il à trouver une solution?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Par défaut
    Je suis d'accord avec tout cela mais où qu'elle peut être la solution ici ?
    La valeur qui va être saisie par l'utilisateur doit servir à filtrer le formulaire.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu donnes comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenForm "frmSaisieContrat", acNormal, , "Forms![frmSaisieContrat]![frmPointage].Form![N__SEMAINE]= " & NSemaine
    Ce paramètre n'est pas une condition SQL, puisque tu demandes que ce soit un contrôle de formulaire qui soit égal au paramètre passé NSemaine.

    je ne connais pas la structure de ta table, mais imaginons que ton formulaire est basé sur une table ou requête qui possède un champ NoSemaine, tu devras avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "nosemaine = " & NSemaine
    Donne-nous la structure de la table ou requête sous-jacente du formulaire, et nous pourrons mieux t'aider

    Remarque perso: J'aime bien utiliser les paramètres nommés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenForm FormName:="MonFormulaire", view:=acNormal, wherecondition:="MaCondition"
    Cela évite d'oublier une virgule de séparation, ou d'en mettre une de trop. De plus, le code sera plus lisible et compréhensible.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Par défaut
    Ok merci beaucoup. J'ai compris mon problème.
    En fait le formulaire frmSaisieContrat est basé sur une requête qui relie deux tables. Or j'avais oublié dans la requête de mettre le champ N__SEMAINE.
    Donc il ne le trouvait pas dans ma syntaxe.
    Merci de m'avoir éclairci les idées.
    A+
    Fred

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Par défaut
    Bonjour,

    Dans la suite de ce que je voulais faire hier, j'ai encore un soucis. Access ne trouvait ps le champ [N__SEMAINE] car il se trouvait sur le sous-formulaire.
    Est-il possible de filtre un formulaire à l'ouverture par rapport à un champ se trouvant sur le sous-formulaire ??? Et comment s'y prendre ?

    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
    Private Sub Commande30_Click()
    Dim NSemaine As Integer
     
    'l'utilisateur saisit un numéro de semaine
    NSemaine = Val(InputBox("Taper un numéro de semaine :", "Choix de la semaine"))
     
    'Le formulaire principal (frmSaisieContrat) s'ouvre avec le sous-formulaire (frmPointage)
    'le Problème est que le champs [N__SEMAINE] se trouve sur le sous-formulaire
    DoCmd.OpenForm "frmSaisieContrat", acNormal
     
    'j'essaie de lui dire de regarder le sous-formulaire et de filtrer les enregistrements
    'du formulaire principal par rapport au n° de semaine du sous-formulaire
    'Est-ce possible ?
    Me.[frmSaisieContrat]![frmPointage].SetFocus 'il me met en retour qu'il ne trouve pas ce champ. Là ce n'est qu'une erreur de syntaxe.
    DoCmd.ApplyFilter , Forms![frmSaisieContrat]![frmPointage].Form![N__SEMAINE] = " & NSemaine" 'ça c'est pas bon je suppose
     
    End Sub
    Merci beaucoup pour votre aide.

    Fred

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Commande DoCmd.OpenForm dans access
    Par pontoise dans le forum Access
    Réponses: 6
    Dernier message: 14/05/2013, 01h13
  2. Erreur de syntaxe dans clause where
    Par tomguiss dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/11/2007, 22h39
  3. Réponses: 5
    Dernier message: 23/03/2007, 09h58
  4. Syntaxe de DoCmd.OpenForm
    Par PhRey dans le forum Access
    Réponses: 9
    Dernier message: 29/12/2006, 14h20
  5. [PL/SQL Oracle] Syntaxe dans clause where
    Par Misdrhaal dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2006, 13h33

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