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 :

Ouverture d'un état sous condition [AC-2013]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Commerçant
    Inscrit en
    Mai 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Commerçant

    Informations forums :
    Inscription : Mai 2014
    Messages : 60
    Points : 21
    Points
    21
    Par défaut Ouverture d'un état sous condition
    Bonjour,

    J’ai besoin d’aide sur Access 2013 s’il vous plait.

    Il y a un formulaire continu F_Produit basé sur la table T_Produit, qui affiche la liste des produits, et qui contient :
    • Une case à cocher pour chaque produit
    • un bouton « Imprimer » en tête de formulaire

    Une requête « R_PMGM » classe tous les produits en deux catégories : PM ou GM

    Il y a deux états basés tous les deux sur la table T_Produits : E_PM et E_GM.

    Je voudrais :
    1. cocher la case d’un produit dans le formulaire
    2. cliquer sur le bouton
    pour ouvrir l’état qui correspond au produit.
    E_PM pour les produits PM
    E_GM pour les produits GM

    Comment faire ?
    Merci d’avance pour votre aide.
    Pascal

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonsoir,

    Tu as une table T_Produit, source d'un formulaire F_Produit en continu. Tu as une case à cocher (quel est son nom ?) dans ta table T_Produit.
    1- A quoi te sert ta case à cocher ? Pour sélectionner le produit à imprimer ?
    2- Quels sont les champs de ta requête R_PMGM ou le nom du champ qui te permet de faire la distinction entre PM et GM ? Parce qu'il faudrait que tu fasses un test sur ce champ pour ouvrir soit l'état E_PM, soit l'état E_GM.

    Ton code ressemblerait à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If LeChamp = "GM" then
         DoCmd.OpenReport "E_GM"
    Else
         DoCmd.OpenReport "E_PM"
    End If
    Le plus difficile serait de récupérer la valeur de LeChamp dans toutes tes combinaisons.

    Cordialement,

  3. #3
    Membre à l'essai
    Homme Profil pro
    Commerçant
    Inscrit en
    Mai 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Commerçant

    Informations forums :
    Inscription : Mai 2014
    Messages : 60
    Points : 21
    Points
    21
    Par défaut Ouverture d'un état sous condition
    Bonsoir Madefemere,

    et merci pour ton aide.

    "Tu as une table T_Produit, source d'un formulaire F_Produit en continu. Tu as une case à cocher (quel est son nom ?) dans ta table T_Produit."
    Le nom de la case à cocher est "Impression"

    "1- A quoi te sert ta case à cocher ? Pour sélectionner le produit à imprimer ?"
    Oui, c'est exatement ça

    "2- Quels sont les champs de ta requête R_PMGM ou le nom du champ qui te permet de faire la distinction entre PM et GM ? Parce qu'il faudrait que tu fasses un test sur ce champ pour ouvrir soit l'état E_PM, soit l'état E_GM."
    Le champ de la requête s'appelle "Taille"; il attribue la valeur PM si un champ de la table produit compte moins de 250 caractères, et GM dans le cas contraire.

    Je vais essayer d'utiliser le code que tu m'as proposé avant de revenir sur le forum pour rendre compte de mon résultat.

    Bien à toi,

    Pascal

  4. #4
    Membre à l'essai
    Homme Profil pro
    Commerçant
    Inscrit en
    Mai 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Commerçant

    Informations forums :
    Inscription : Mai 2014
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Bonjour Madefemere,

    j'ai indiqué le code suivant au bouton d'impression:

    Private Sub Command11_Click()
    If [R_PMGM]![Taille] = "GM" Then
    DoCmd.OpenReport "E_GM", acViewPreview, , , , 3
    Else
    DoCmd.OpenReport "E_PM", acViewPreview, , , , 3
    End If
    End Sub

    Je reçois le msg d'erreur:
    Run-time error '424':
    Object required

    Peux-tu me donner ton avis stp?

    Merci.
    Pascal

  5. #5
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Tu ne peux faire référence directement au champ de ta requête si la requête n'est pas la source de ton formulaire, ou le champ est présent dans le formulaire.
    Si le champ dont tu comptes les caractères sont présents dans ton formulaire, tu peux vérifier directement la condition sans passer par la requête :
    Le champ de la requête s'appelle "Taille"; il attribue la valeur PM si un champ de la table produit compte moins de 250 caractères, et GM dans le cas contraire.
    avec un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Command11_Click()
    'vérifier que le nombre de caractères du champ est supérieur à 250
    If len(LeChampAvecLesCaractères)>250 Then
         DoCmd.OpenReport "E_GM", acViewPreview, , , , 3
    Else
         DoCmd.OpenReport "E_PM", acViewPreview, , , , 3
    End If
    End Sub
    Tu devrais avoir ta réponse.
    Attention, ton code actuel va afficher TOUS LES ENREGISTREMENTS de ta table et non ceux que tu as cochés pour être imprimés. Si tu veux filtrer, regardes l'aide sur la commande Docmd.OpenReport, le quatrième argument permet de définir un filtre.

    NOTA : Mets tes codes dans des balises pour faciliter la lecture par les autres. Comment : Tu les sélectionnes et tu cliques sur le bouton # dans le menu en haut.

    Cordialement,

  6. #6
    Membre à l'essai
    Homme Profil pro
    Commerçant
    Inscrit en
    Mai 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Commerçant

    Informations forums :
    Inscription : Mai 2014
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Effectivement, le champ dont on compte les caractères est le champ d'une requête, il ne fait pas partie de la table.

    Si c'est un gros problème de le récupérer, peut-on envisager de baser le même formulaire sur une table créée par requête création de table, et d'y faire apparaître les champs de la table produits, plus le champ de la requête?

  7. #7
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonsoir,

    1- Quel sont les champs de ta table T_Produit ?
    2- Quel est le contenu de ta requête R_PMGM, son code ?
    3- Quel est la source de ton formulaire ? quelle table ou quelle requête ?
    4- Quel est la source de ton état ? quelle table ou quelle requête ?
    5- Peux-tu indiquer quel est le champ dont tu comptes le nombre de caractères et qui te sert de condition ?

    Ces informations sont nécessaires pour avancer.

    Cordialement,

  8. #8
    Membre à l'essai
    Homme Profil pro
    Commerçant
    Inscrit en
    Mai 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Commerçant

    Informations forums :
    Inscription : Mai 2014
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    voici plus de précisions, mais pour être plus précis, je dois décrire tout le système. Je suis désolé si c'est un peu lourd.

    Il y a 5 tables reliées entre elles
    T_Compositions. Avec le champ "Composition". Les compositions sont des assemblages de Produits
    T_Produits avec le champ "Produit" et le champ "Ingredient". Les produits sont des assemblages d'ingrédients.
    T_Compo_Prod_Qté. Avec 3 champs. Elle est liée aux deux précédentes par les champs Compo et Prod. le troisième champ contient la qté de produit dans la composition
    T_Ingredients avec le champ "Ingredient"
    T_Prod_Ingred avec 2 champs: Produit et Ingredient, qui sont reliés aux tables correspondantes.

    Des requêtes en cascade regroupent les ingrédients contenus dans une composition et les concatènent pour former un enregistrement unique par composition.

    Voici la requête finale qui concatène et qui est la source de l'étiquette:
    "R_Concat2"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT R_Compo_ingrédients_impress.Composition, "Ingrédients : " & ConcatForQuery("Composition",[Composition],"Ingrédient","R_Compo_ingrédients_impress",", ") AS Résultat, R_Compo_ingrédients_impress.[Nom Public], R_Compo_ingrédients_impress.[Poids net], R_Compo_ingrédients_impress.DLUO, R_Compo_ingrédients_impress.QtéImpr
    FROM R_Compo_ingrédients_impress
    GROUP BY R_Compo_ingrédients_impress.Composition, R_Compo_ingrédients_impress.[Nom Public], R_Compo_ingrédients_impress.[Poids net], R_Compo_ingrédients_impress.DLUO, R_Compo_ingrédients_impress.QtéImpr;
    C'est le champ "Résultat" qui est classé en PM ou GM selon le nombre de caractères par la requête "R_TailleEtiq":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT R_Concat2.Composition, Len([Résultat]) AS Taille
    FROM R_Concat2;

    Mon objectif est d'imprimer une étiquette avec le nom de la composition et la liste de ses ingrédients. Comme la longueur du champ Résultat est très variable, je souhaite que l'état/étiquette soit automatiquement d'un format adapté.

    Voici le formulaire:
    Nom : Form.JPG
Affichages : 91
Taille : 34,7 Ko
    La source est la table T_Compositions

    Il y manque le champ Taille de la requête R_TailleEtiq ainsi que tu l'as dit.

    J'ai pu contourner le problème grâce à une requête création de table qui réunit les champs de la table composition et le champ Taille de la requête. J'ai ensuite défini cette nouvelle table comme source du formulaire. A mon sens, le problème est contourné, mais pas résolu.

    Je te remercie d'avance si tu penses qu'il y a mieux à faire et si tu souhaites approfondir la question, ce qui pourra servir pour la prochaine fois.

    Bien à toi.

  9. #9
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    J'ai pu contourner le problème grâce à une requête création de table qui réunit les champs de la table composition et le champ Taille de la requête. J'ai ensuite défini cette nouvelle table comme source du formulaire. A mon sens, le problème est contourné, mais pas résolu.
    Je dirais que tu n'as pas besoin de faire une requête création de table. Il te suffirait de transformer la requête en requête sélection et d'en faire la source de ton formulaire.

    Cordialement,

  10. #10
    Membre à l'essai
    Homme Profil pro
    Commerçant
    Inscrit en
    Mai 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Commerçant

    Informations forums :
    Inscription : Mai 2014
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Si la source du formulaire est une requête, est-il quand même possible de cocher la case Impression?
    Je pensais que les champs d'une requête étaient figés.

  11. #11
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Re-,

    A priori oui, c'est possible. Cela dépend des types de relations que tu as dans tes requêtes mères.
    Sinon tu ne pourrais effectivement pas te passer de la création d'une nouvelle table.

    Bonne continuation

  12. #12
    Membre à l'essai
    Homme Profil pro
    Commerçant
    Inscrit en
    Mai 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Commerçant

    Informations forums :
    Inscription : Mai 2014
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Merci pour ton aide, le problème est résolu

    Cordialement.
    Pascal

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

Discussions similaires

  1. Ouverture état sous condition
    Par dav787 dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/10/2011, 21h31
  2. Ouverture d'état sous condition impossible
    Par dav787 dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/09/2011, 12h45
  3. ouverture d'état sous condition
    Par isabelle b dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/11/2008, 07h58
  4. aperçu d'un sous état sous condition
    Par dodie84 dans le forum IHM
    Réponses: 1
    Dernier message: 29/04/2008, 13h59
  5. afficher un état sous condition
    Par remi59 dans le forum IHM
    Réponses: 4
    Dernier message: 15/09/2006, 16h24

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