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 :

formulaire sous formulaire access


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 19
    Points
    19
    Par défaut formulaire sous formulaire access
    bonjour

    j'ai cree une formulaire principal dan lequel j'ai inserer un sous formulaire secondaire. le formulaire principal gere les appel d'offre, le secondaire gere les lots que contien chaque appel d'offre. bien sur, chaque appel d'offre peu avoir un nombre de lot different. une question pratique: commen peut on limite le nombre d'entre du sous formulaire en fonction du nombre de lot (zone texte qui se trouve dans le formulaie principal).

    par exemple: pour lappel d'offre "amd12" on a 2 lot. alors le sous formulaire pour la description des lots ne pourra accepte que 2 entree/donnee.

    pour l'instant, je peux entree autant de donne que je veux!

    merci de m'eclairer sur la question!!!

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Avec un événement BeforeUpdate sur le champ qui reçoit les données dans le sous-formulaire qui compte le nombre de lots (avec une fonction maison ou un DCount()) et le compare à la limite tolérée auquel cas Cancel prend la valeur True et le champ reçoit la méthode Undo.

    Argy

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 19
    Points
    19
    Par défaut Formulaire Sous formulaire access
    merci pour tes indications!

    peux tu me donner de plus amples details cependant car je suis encore debutant!!!

    Comment dois s'effectuer la manip? dois je alle sur mon sous formulaire et configurer les propriete de ce dernier?

    que ce qu'une fonction maison ou Dcount? comment la programmer?

    merci de m'eclairer sur le sujet!!!

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    pour la fonction DCount ou la FAQ...
    Pour la fonction maison, il faut l'écrire en VBA avec un objet Recordset (DAO)
    Le principe est le même quel que soit le cas.
    Dans le sous-formulaire, il doit y avoir un ou plusieurs champs.
    Le premier que tu remplis possède un événément BeforeUpdate() (entre autres...) et c'est lui que tu sollicites. Cancel doit être à True pour interrompre le code...


    Argy

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 19
    Points
    19
    Par défaut formulaire sous formulaire access
    Pour la manip BeforeUpDat :

    dois l'effectuer dans propriete du sous formulaire?

    dois entrer des lignes de code dans VBA pour mon sous formulaire?

    enfin dois je utiliser une fonction maison/Dcount ou simplement remplir l'enevenment BeforeUpDate?

    je suis encore debutant donc il se peux que je m'exprime mal ou que je me fasse mal comprendre.

    merci beaucoup de m'aider!!

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 19
    Points
    19
    Par défaut formulaire sous formulaire access
    j'ai cherche sur l'aide online d'access et sur le FAQ mais je ne trouve pas comment on peut programmer et utiliser une fonction DCount.

    tout ce que j'ai trouve c'est ca:

    nb=DCount("*",NomRequete)

    il est conseille de mettre : rst.RecordCount
    rst.MoveLast

    je ne vois pas comment utiliser cette fonction dans ma base de donnee

    merci de bien vouloir m'indiquer les etapes a suivre!

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bon voici un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Réf_produit_BeforeUpdate(Annuler As Integer)
    Const MAX_AUTORISE = 2 'Par exemple
    
      If DCount("[Mon champ]", "Ma Table ou ma Requête", "[MaCléAppelDOffres]=" & _
      TelleValeur) > MAX_AUTORISE Then
        MsgBox "Nombre de lots maxi atteint !", 48, "Contrôle lots"
        Cancel = True
      End If
    End Sub
    Argy

    P.S. Arrête de m'inonder de MP, je ne répondrais pas à tes demandes de support par cette voie

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 19
    Points
    19
    Par défaut formulaire access
    merci pour ton aide!

    desoler de t'avoir inonder de mail!!!

    s'aurai tu comment on arrive a masquer/ou faire apparaitre un formulaire!

    je m'explique:

    j'ai un formulaire appel d'offre qui contient un sous formulaire visite. dans mon formulaire principal, j'ai un champ ou je met oui/non en fonction d'une visite possible d'une site. certain appel d'offre neccessite des visites. je voudrai savoir si je peu en fonction de ma reponse au champs faire apparaitre ou pas le formulaire visite!!!

    y a t il une methode ou une astuce???

    merci de m'eclairer!!!!

  9. #9
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Le sous-formulaire possède un nom.
    Par défaut, il porte le nom de la requête/table source.
    Je te conseille de le préfixer avec "sf" suivi d'un nom cohérent.

    De là, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If TelleCondition Then
        sfVisites.Visible = True
    Else
        sfVisites.Visible = False
    End If
    Argy

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 19
    Points
    19
    Par défaut formulaire access sous formulaire
    merci pour ta reponse!

    cependant, comment dois je formuler ma condition si je choisi de mettre dans mon champ oui/non?

    je n'ai malheureusement pas beaucoup de notion de programmation en vba. peu tu m indiquer la methode general!! merci d'avance

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 19
    Points
    19
    Par défaut fomulaire sous formulaire access
    bonjour

    j'essai de recupere la valeur d'un champ pour l 'utiliser

    le champs s'appelle nombre de lot et se trouve dans le formulaire F_appeldoffre.

    j'utlilise la methode suivante que j'ai trouvé :

    Private Sub Nombre_de_lot_BeforeUpdate(Cancel As Integer)
    Dim bd As DAO.Database
    Dim rst As DAO.Recordset
    Dim sql As String

    Set bd = CurrentDb
    Set rst = bd.OpenRecordset(sql)
    nb = rst![Nombre de lot]

    End Sub

    cependant, elle ne marche pas et access passe en mode deboguage!

    je voudrai savoir ou se situe mon erreur.

    puis cette valeur sera utiliser afin de limiter le nombre d'enregistrement d'in sous formulaire decription des lots. j'utilise la methode suivante que tu m'a indiqué :

    Private Sub Description_général_des_lots___Enter()
    If DCount("[Num Lot]", "T_LotGen", "[Nombre de lot]=") > nb Then
    MsgBox "Nombre de lots maxi atteint !", 48, "Contrôle lots"
    Cancel = True
    End If
    End Sub

    malheureusement, meme chose, je recoi un message erreur!

    peux m'indiquer mes erruer afin que je les corrige!!!

    merci beaucoup pour ton aide!!!!

  12. #12
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Merci d'utiliser les balises code (#) pour le code...
    Utilise le bouton Editer pour modifier ton message.

    Ton erreur : il ne faut pas utiliser l'événement Enter pour ton cas.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    BeforeUpdate permet d'annuler...
    Private Sub Nombre_de_lot_BeforeUpdate(Cancel As Integer)
    Dim BD As DAO.Database
    Dim RST As DAO.Recordset
    Dim SQL As String
    Dim LeNumeroDeLotEnCours As Long
    Dim intNBLots As Integer
    Dim intNombreMaxDeLots As Integer
     
      SQL = "SELECT COUNT([Nombre de lot]) AS NBLOTS FROM T_LotGen _
    WHERE [Num Lot] = " & LeNumeroDeLotEnCours & ";"
     
      intNombreMaxDeLots = Me!NombreMaxDeLot 
    'Je ne sais aps comment tu gères la quantité maxi
      Set BD = CurrentDb
      Set RST = BD.OpenRecordset(SQL)
      With RST
        If Not .EOF Then
          intNBLots = RST![NBLots]
        End If
      End With
      Set BD = Nothing
      Set RST = Nothing
     
      If Me!intNombreMaxDeLots > intNBLots Then
        MsgBox "Nombre de lots maxi atteint !", 48, "Contrôle lots"
        Cancel = True
      End If
    End Sub
    Argy

  13. #13
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 19
    Points
    19
    Par défaut formulaire sous formulaire access
    merci pour ta correction!!!

    malheureusement je recoi toujours un message erreur
    erreur de compilation : erreur de syntaxe à la ligne

    SQL = "SELECT COUNT([Nombre de lot]) AS NBLOTS FROM T_LotGen _
    WHERE [Num Lot] = " & Nombre de lot & ";"

    sur cette ligne j'ai modifier l'appellation "Lenumerodelotencour" parce que j'en ai pas!!!

    apres avoir entre le nombre de lot dans le champ de mon formulaire, j'introduis pour chaque lot le montant et le numero

    exemple :

    Sur le formulaire standard:

    appel d'offre numero amd 12

    Nombre de lot : 2

    Sur le sous formulaire:

    numero de lot 1 montant 20 000
    Numero de lot 2 montant 30 000

    ceux que je veux c'est limite le nombre d'entree sur mon sous formulaire par rapport au champ nombre de lot.

    le procedure que j'utilise est-elle la bonne?
    ou bien je me trompe completement!!!

    merci de m'indiquer la bonne demarche a suivre!

  14. #14
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Tout objet ne doit jamais être nommé avec des espaces !!!

    Donc tu dois mettre des crochets dans ton cas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL = "SELECT COUNT([Nombre de lot]) AS NBLOTS FROM T_LotGen _
    WHERE [Num Lot] = " & me![Nombre de lot] & ";"
    Mais la condition WHERE ne doit pas contrôler "Nombre de lot" mais la clé primaire de ta table parent;

    Par exemple imagine une gestion de commandes, tu as la commande avec son N°, OK ???
    Bon disons la commande N° 100 par exemple.
    Bien dans la table tblLigneCommandes qui est la table fille de la table tblCommandes où dans chacune, réside un champ commun qui est le N° de commande (NumCommande de type Long), imagine que je n'ai pas le droit de commander plus de 10 produits par commande ; cette table est attaché au sous-formulaire en mode continu de mon formulaire qui est la Commande elle-même.
    Eh bien sur dans le champ NumProduit qui me renvoie l'intégralité des infos du produit que je souhaite commander (Libellé, Prix etc...), je pose un BeforeUpdate() tel que je te l'ai montré mais avec mon N° de commande car c'est le seul moyen de contrôler la quantité de lignes.

    Je controle la quantité de lignes de ma commande N°100 avec le N°100 et pas avec le NumProduit, tu comprends ??? Sinon, c'est incohérent.

    Donc ça donnerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(NumProduit) AS NBLignes FROM _
    tblLigneCommandes WHERE NumCommande = 100
    Aller, cogite la dessus, je pense que tu as une incohérence dans ta base.
    Argy

Discussions similaires

  1. [AC-2010] Formulaire - Sous formulaire - Sous sous formulaire
    Par meli74 dans le forum IHM
    Réponses: 1
    Dernier message: 21/04/2011, 19h35
  2. Réponses: 8
    Dernier message: 11/12/2007, 17h58
  3. Réponses: 4
    Dernier message: 11/04/2007, 18h46
  4. formulaire/sous formulaire/sous formulaire
    Par aimejielle dans le forum Access
    Réponses: 1
    Dernier message: 24/07/2006, 22h48
  5. Réponses: 1
    Dernier message: 10/07/2006, 09h15

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