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

VBA Access Discussion :

OpenArgs ; sélection d'un enregistrement précis dans un sous formulaire [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut OpenArgs ; sélection d'un enregistrement précis dans un sous formulaire
    Bonjour,


    Je me retrouve confronté à un problème et je vais avoir besoin d'un peu aide...

    Pour résumé mon affaire. J'ai un formulaire A composé d'un bouton commande et d'un sous formulaire A.1. Ce sous formulaire est en mode feuille de données. Il contient des champs basés sur table nommé T_dossier. Ce sous formulaire doit servir à sélectionner des enregistrements dans la table T_dossier. Un enregistrement représente le dossier d'une personne. Ce dossier par la suite devra etre controlé (le but de mon appli). Un controleur arrivera sur le formulaire A, sélectionnera un dossier parmis tous (sélection dans le sous formulaire A1), et cliquera sur le bouton de commande "controler le dossier sélectionné". Un formulaire B s'ouvrira alors.

    Je souhaite en faite que lorsqu'un dossier est sélectionné l'IDdossier de la table T_dossier aille dans le champ IDdossier de T_controle. Pour le moment j'ai aucun souci. J'utilise la méthode OpenArgs avec :

    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
    '---------------------------------------------------------------------------------------
    ' Bouton ouverture du formulaireB 
    '---------------------------------------------------------------------------------------
     
    Private Sub controlselectdoss_Click() ' Bouton "controler le dossier sélectionné"
     
    DoCmd.OpenForm "formulaireB", , , acFormAdd, , Me!IDdossier
    DoCmd.Close acForm, Me.Name
    End Sub
     
    '---------------------------------------------------------------------------------------
    ' code sur lévenement OpenForm dans le formulaire B
    '---------------------------------------------------------------------------------------
     
     
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.GoToRecord , , acNewRec
    Me!IDdossier = Me.OpenArgs
     
    End Sub
    Mon problème est que lorsque je sélectionne un dossier dans le sous formulaire, La méthode Openform n'ajoute que le premier enregistrement de la table, elle ne prend pas en compte la sélection éffectué. Donc je pense qu'il manque quelque chose dans le code mais à vrai dire je m'y connais pas assez en VBA pour trouver... Du moins je pense que le problème se trouve sur DoCmd.GoToRecord , il y a surement quelque chose de manquant c'est même sur...

    Au niveau de mon shéma relationnel. J'ai :

    T_dossiers (IDdossiers, nom, prénom, num secu,....)
    qui est relié à T_controle (#IDdossier, IDcontroledossier, IDcontroleutr, heure du controle...etc)

    T_controle est en relation avec T_ Resultatcontrole (#IDcontroledossier,IDlibptsCtrole, OK, KO, incidence doc....)

    Merci pour votre aide. En espérant trouver une solution...

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 350
    Points
    34 350
    Par défaut
    salut,
    en regardant l'aide en ligne de la fonction , on voit dans l'exemple que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "Employees", , ,"LastName = 'King'"
    on passe certes un parametre, mais il s'agit surtout de preciser une clause where a appliquer au formulaire qu'on souhaite ouvrir

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Merci de m'avoir répondu. :=)

    j'ai essayé de modifier la conditon where de procédure openform.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "Controle_doss_02", , , , acFormAdd, , "numero.value = &Me!IDdossier"
    je ne sais pas si d'une c'est bien écrit, de deux si c'est possible.

    Si je modifie cette ligne je dois surement modifier celle ci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.GoToRecord , , acNewRec
    Me!IDdossier = Me.OpenArgs
     
    End Sub

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 350
    Points
    34 350
    Par défaut
    essaie en corrigeant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "Controle_doss_02", , , , acFormAdd, , "numero.value = " & Me!IDdossier
    attention, numero doit etre ici la table et value le nom du champ que tu souhaites comparer. Est-ce bien le cas ?

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    En faite numero.value ne peut pas marcher, c'est pas logique. j'ai essayé de mettre la table T_dossier. Je n'ai pas d'erreur sur cette synthaxe ms par contre j'en ai une sur le code présent dans le formulaire ouvert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me!IDdossier = Me.OpenArgs
    valeur incorrecte pour ce champ...

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Oui c'est ce que j'ai vu... c'est pour ca qsue je disais que c'était pas logique j'ai remplacé numero par T_dossier .

    j'ai testé en changeant le guillemet. je n'ai tjr pas d'erreur sur la ligne openform mais j'en ai toujours valeur incorrecte pour ce champ avec end sub sélectionné en jaune

    [EDIT]

    Ma table : T_dossiers
    Le champ : IDdossier

    la ligne de code dans le formulaire A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub controlselectdoss_Click()
    DoCmd.OpenForm "Controle_doss_02", , , , acFormAdd, , "T_dossiers.IDdossier =" & Me!IDdossier
    DoCmd.Close acForm, Me.Name
    et la ligne de code dans le form B

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.GoToRecord , , acNewRec
    Me!IDdossier = Me.OpenArgs
     
    End Sub
    Et j'ai toujour cette erreur sur end sub dand Form_open... [/EDIT]

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Je suis tombé sue un post :

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim strsql As String
       strsql = "" & Forms![f_test].cmd_autre.Tag & ""
       DoCmd.OpenForm "f_change_test", , "t_test", strsql
    Ce code permet de contourner le point faible des sous-formulaires : il est impossible d'identifier un enregistrement d'un sous-formulaire pour par exemple afficher le détail de cet enregistrement.
    Sur l'évènement current du sous-formulaire, j'initialise le tag du bouton avec les paramètres.
    Sur clique du bouton j'ouvre un nouveau formulaire qui affiche le détail de l'enregistrement sélectionné.

    Laurence
    Je ne sais pas si cela correspond à mon problème... Quelqu'un aurait une idée ??

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Bon je commence à me rapprocher maisc'est pas encore parfait pour que ca fonctionne

    j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub controlselectdoss_Click()
     
    DoCmd.OpenForm "Controle_doss_02", , , , acFormAdd, , "IDdossier = " & Me!IDdossier & " ' "
     
    DoCmd.Close acForm, Me.Name
     
    End Sub

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 742
    Points : 57 547
    Points
    57 547
    Billets dans le blog
    42
    Par défaut
    Je re-re-reviens chagui, salut jpcheck,

    1°) la ConditionWhere doit être le 4ème argument d’OpenForm, l’OpenArg le 7ème.

    Citation Envoyé par Aide Access
    expression.OpenForm(NomFormulaire, Affichage, NomFiltre, ConditionWhere, ModeDonnées, Modefenêtre, ArgOuverture)
    Puis en restant sur l’idée avec OpenArg (explications sur le principe dans la FAQ : Comment préremplir un champ d'un formulaire qu'on ouvre en fonction d'un autre formulaire)

    2°)
    Citation Envoyé par Chagui
    J'ai un formulaire A composé d'un bouton commande et d'un sous formulaire A.1…
    …Un controleur arrivera sur le formulaire A, sélectionnera un dossier parmis tous (sélection dans le sous formulaire A1), et cliquera sur le bouton de commande "controler le dossier sélectionné". Un formulaire B s'ouvrira alors.
    Si le bouton est dans le formulaire A, il me semble que la syntaxe d’appel devrait plutôt être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "NomDuFormulaireB", , , , acFormAdd, , Me.NomDuSousFormA1.Form.IDdossier
    3°) J’ai un doute dans ton formulaire B…
    Lorsque dans le formulaire B, tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me!IDdossier = Me.OpenArgs
    Le contrôle IDdossier doit avoir pour source le champ T_Controle.IDdossier, et non pas T_Dossier.IDdossier. Attention de bien mettre le bon IDdossier dans la requête source du formulaire B. Il s’agit de créer un nouvel enregistrement dans T_Controle avec la clé étrangère T_Controle.IDdossier pré-remplie avec l’IDdossier passé en paramètre grâce à l’OpenArg.

    En espérant avoir apporté de quoi démêler tout ça… après ça j’ai plus d’idées, je sèche…

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Ahahah F-leb toujour la pour me sauver !!! lol

    Le contrôle IDdossier doit avoir pour source le champ T_Controle.IDdossier, et non pas T_Dossier.IDdossier. Attention de bien mettre le bon IDdossier dans la requête source du formulaire B.
    Pour ca c'est ok ! Je me demandais par contre si il devait apparaitre dans le from B. Je l'ai mis mais en non visible.

    Si le bouton est dans le formulaire A, il me semble que la syntaxe d’appel devrait plutôt être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "NomDuFormulaireB", , , , acFormAdd, , Me.NomDuSousFormA1.Form.IDdossier
    j'ai testé mais j'ai un message d'erreur, pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub controlselectdoss_Click()
     
    DoCmd.OpenForm "Controle_doss_02", , , , acFormAdd, , Me.sousform_selectdossier.Form.IDdossier
     
    DoCmd.Close acForm, Me.Name
     
    End Sub
    J'ai comme message : erreur de complilation : Membre de méthode ou de données introuvable avec .sousform_selectdossier de souligné en bleu

    [EDIT] Je remarque que le S de sousform_selectdossier ne se met pas en majuscule (en essayant il se remet en minuscule) alors que le nom du sousform est bien avec un S majuscule... [/EDIT]

  11. #11
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 742
    Points : 57 547
    Points
    57 547
    Billets dans le blog
    42
    Par défaut
    Citation Envoyé par Chagui
    Ahahah F-leb toujour la pour me sauver !!! lol
    Sur ce coup là, je patauge un peu quand même


    Essaye d’isoler le problème :

    Si tu remplaces provisoirement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me!IDdossier = Me.OpenArgs
    par
    en supposant que le dossier avec idDossier=1 existe, est-ce qu’un nouveau contrôle de dossier est créé avec les caractéristiques du dossier n°1 lorsque tu cliques sur le bouton ?

    Si non, il y a déjà un problème dans le formulaire B à régler…

    Si oui, on devrait pouvoir avancer et s’occuper de l’OpenArgs.

    Citation Envoyé par Chagui
    [EDIT] Je remarque que le S de sousform_selectdossier ne se met pas en majuscule (en essayant il se remet en minuscule) alors que le nom du sousform est bien avec un S majuscule... [/EDIT]
    Normalement, quand tu tapes "Me." dans l’éditeur, juste après le point devrait apparaître une liste déroulante où tu devrais trouver le nom du sous-formulaire. Tu le sélectionne dans la liste, c’est plus sûr.

  12. #12
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Hello F-leb

    Déja merci de ta patience. Ceci est fort appréciable. Je n'ai pas pu répondre avant suite à un empechement.
    tu disais :
    Sur ce coup là, je patauge un peu quand même…
    Rassure toi, c'était à cause de moi... car les infos que je te donnais étaient fausses ! J'ai cherché tranquillement et calmement le problème et jai fini par le résoudre et je t'avoue que je suis bien content !!!!!

    D'une,
    J'ai comme message : erreur de complilation : Membre de méthode ou de données introuvable avec .sousform_selectdossier de souligné en bleu
    Access ne se trompait pas ! ce n'était pas du tout le bon sous form, j'en avais créé un autre mais avait oublié... Donc j'ai fait ce que tu m'as dit en mettant le bon sous form..!

    De deux, mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.GoToRecord , , acNewRec
    Me!IDdossier = Me.OpenArgs
    End Sub
    C'est de là que tout déconnait... et oui j'ai été stupide ! J'avais zappé que le code qui se trouvait en dessous appelait une procédure form_load... Si j'avais été plus attentif je me serais rendu compte qu'un formulaire se charge avant de s'ouvrir et non s'ouvre puis se charge... donc voila !!!

    tout marche nickel, et je récupère même les champs de la table T_dossier présent dans le formulaire B, bref c'est parfait !!

    Je vais devoir faire pareil pour la table T_controle vers T_résultat controle pour le champ IDcontroledossier Normalement ca ne devrait pas poser de problème (enfin ne parlons pas trop vite...lool).

    J'ai juste une question (et oui encore, ca ne s'arrète jamais..). La table T_resultatcontrole est relié à T_incidenceFI. La clé primaire pour ces deux tables étant IDcontrolledossier. (shéma relationnel dans le premier message de ce post).

    Lorsque L'IDcontroledossier de T_controle se copiera dans T_resultatcontrole, un message d'erreur apparaitra surement, me disant que La table T_incidenceFI étant relié a T_resultatcontrole, les champs en relations devront etre identique. Donc si T_resultatcontrole.IDcontrolledossier = 1 automatiquement T_incidenFI.IDcontroledossier devra etre = a 1

    Je me demande si je dois créer a chaque fois une ligne pour chaque controle dans T_incidenceFi meme si il n'y a pas d'incidence financière ou faire en sorte que qu'elle ne se créer qu si incidenceFI il y a...

    Merci pour tout ce que tu as déja fait F-leb, Mais tinkiet je trouverai bien un moyen pour te remercier... que tu le veuille ou non !

  13. #13
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 742
    Points : 57 547
    Points
    57 547
    Billets dans le blog
    42
    Par défaut
    Citation Envoyé par Chagui
    …bref c'est parfait !!
    Ouf, ça fini par s’arranger !
    Citation Envoyé par Chagui
    Je me demande si je dois créer a chaque fois une ligne pour chaque controle dans T_incidenceFi meme si il n'y a pas d'incidence financière ou faire en sorte que qu'elle ne se créer qu si incidenceFI il y a...
    A mon avis, Il y a une incohérence importante dans la relation T_IncidenceFI-1------∞-T_ResultatControle .

    De mémoire (dans ta discussion qui n’a toujours pas le tag [Résolu], ici), la règle de gestion était :

    A chaque fois qu’un contrôle dans un dossier présente au moins un libellé coché I_FI, alors le contrôle donne lieu à un Incident Financier avec un BRUTmachin, une date d’effet truc…
    Dans ce cas la relation doit être : T_IncidenceFI------T_Controle

    Peut-être doit-on considérer qu’un IF (et ses propriétés BRUTmachin…) est une caractéristique non pas d’un contrôle, mais d’un dossier. Dans ce cas, T_IncidenceFI------T_Dossier. A voir aussi.

    Ta relation, T_IncidenceFI-1------∞-T_ResultatControle laisse entendre que tu créées un IF (avec un nouveau BRUT machin et une nouvelle date d’effet truc) à chaque libellé coché I-FI. Ce n’est pas la même chose.

    Dans tous les cas, il faut quand même revoir cette relation mais quelle est donc la règle en matière d’IF?


    Pour répondre à ta question, il faut penser à rester dans l’esprit des règles de gestion. Lorsque celles-ci disent que pour un contrôle ne présentant aucun libellé coché I-FI il n’y a pas d’IF, alors il n’y a aucune raison de créer une nouvelle ligne dans T_IncidenceFI.
    C'est quand même pas Access qui va t'imposer ses règles, non mais...

  14. #14
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Bon il y a eu des changements au niveau des règles de gestions.

    Au départ un deuxieme controle devait créer une deuxieme ligne de point de controle. Maintenant tout à changé et je l'ai appris hier !!

    ce qu'on me demande :
    Un controleur termine son controle : tout est OK alors synthese et impression. Si il y a des KO. il faudra retrouver dans un sous form chaque ligne de point de controle qui est KO (sous form vérouillé) pour ne pas modifier ce qui a été fait). Il devra alors se trouver des case options (oui & non) qui permettront de valider chaque ligne, pour etre daccord que cette ligne est bien KO ( c'est le controleur qui controle son controle...mdr)

    Si KO avec incidence financiere. Le dossier devra etre recontrolé. seul les KO devront etre validé via un même groupe d'option par un autre controleur (présent dans un sous form verouillé également). Si il trouve une erreur de calcul dans le premier controle le dossier sera donc en attente.
    Donc plus besoin de deuxieme ligne d'IDcontroledossier.

    (tout ceci n'est qu'infos pour toi, vu que tu as suivi le dossier..lol à moins que tu trouves que qqch cloche !)

    je me demande maintenant si la table incidence FI sert à qqch. Je peux tres bien mettre les champs qui devront recevoir un calcul dans T_controle...

    je testerai et on verra bien.


    Question d'ordre plus technique. Je souhaite avoir un message d'erreur si un même dossier est sélectionné deux fois pour un controle.

    j'utilise ce code qui marche bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Private Sub Form_BeforeUpdate(Cancel As Integer)
    If DCount("IDdossier", "T_controle", "IDdossier=" & Me.IDdossier) > 0 Then
    MsgBox "Ce dossier existe déjà. Vérifier dans rechercher un dossier si il n'a pas déja été controlé.", vbInformation
    Cancel = True
    End If
    End Sub
    Le problème c'est que je souhaiterai qu'il s'active lorsque le controleur choisi un dossier et qu'il clic sur "sélectionné le dossier controlé" dans le formulaire A. Pour le moment je ne peux que le mettre dans le formulaire B, Le problème est qu'il n'est pas possible de revenir au menu général à partir du formulaire B.

    Je ne vois pas comment mettre cet évènement avant maj. Il faudrait finalement que ce code se trouve sur l'évènement clic du bouton "sélectionné le dossier controlé". j'ai essayé mais cela ne marche pas. une erreur : variable non définie pour Normalement un dossier qui sera sélectionné et controlé ne devrais plus apparaitre dans le sous form de sélection grace à un filtre mais je souhaite avoir cette sécurité au cas ou.

    Si tu as une idée je suis preneur sinon tant pis je m'en passerais.

    merci f -leb :

  15. #15
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 742
    Points : 57 547
    Points
    57 547
    Billets dans le blog
    42
    Par défaut
    Citation Envoyé par Chagui
    Bon il y a eu des changements au niveau des règles de gestions…
    Au départ un deuxieme controle devait créer une deuxieme ligne de point de controle. Maintenant tout à changé et je l'ai appris hier !!
    gniiiiii

    Autrement dit, 1 dossier = 1 contrôle = 1 table. Les champs des deux tables T_Dossier et T_Controle peuvent fusionner dans une table unique. Ça t’aurait simplifiée la vie si tu l’avais su dès le début, hein ?

    Citation Envoyé par Chagui
    je me demande maintenant si la table incidence FI sert à qqch. Je peux tres bien mettre les champs qui devront recevoir un calcul dans T_controle...
    Il faudra alors se méfier des valeurs à Null des champs BRUTmachin et date d’effet truc lorsqu’il n’y a pas d’incidence financière à calculer.
    Le schéma T_Controle-1------1-T_IncidenceFI permet d’éviter justement ces valeurs à Null (s’il n’y a pas d’IF, alors il n’y a pas de ligne ajoutée dans T_IncidenceFI).
    Ti fais comme ti préfères !

    Citation Envoyé par Chagui
    Question d'ordre plus technique. Je souhaite avoir un message d'erreur si un même dossier est sélectionné deux fois pour un controle.
    Si tu restes sur le même schéma avec deux tables en relation "un à plusieurs" : T_Dossier-1-----∞-T_Controle mais avec un seul contrôle par dossier (je comprends que tu n’as pas envie de refaire les requêtes/formulaires/états…et puis on ne sait jamais si à nouveau il peut y avoir plusieurs contrôles par dossier) il faut effectivement une sécurité. La plus radicale est de mettre la propriété "indexé" de la clé étrangère T_Controle.idDossier à "oui-sans doublon".

    Citation Envoyé par Chagui
    Je souhaite avoir un message d'erreur si un même dossier est sélectionné deux fois pour un controle…
    Le problème c'est que je souhaiterai qu'il s'active lorsque le controleur choisi un dossier et qu'il clic sur "sélectionné le dossier controlé" dans le formulaire A. Pour le moment je ne peux que le mettre dans le formulaire B, Le problème est qu'il n'est pas possible de revenir au menu général à partir du formulaire B.
    J’ai pas compris pourquoi tu ne peux pas mettre ton code sur le clic du bouton du formulaire A:
    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
    Private Sub controlselectdoss_Click()
     
    Dim NumeroDuDossier as Long
     
    NumeroDuDossier= Me.NomDuSousFormA1.Form.IDdossier
     
    If DCount(…bla bla) = 0 Then
    	' le dossier n’a jamais été contrôlé, on ouvre le form B
    	' avec NumeroDuDossier dans l’OpenArg
    	DoCmd.OpenForm …
    Else	
    	MsgBox "Ce dossier existe déjà. Bla bla…", vbInformation
    End if
     
    End Sub

  16. #16
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Pour au moins la 20 eme fois maintenant : MERCI !!! lol

    Ca marche nickel... comme je le veux... j'ai également passé T_controle.IDdossier à oui sans doublons pour plus de sécurité.

    Ma relation actuellement entre T_dossier et T_controle : T_Dossier-1-----1-T_Controle alors qu'elle était avant T_Dossier-1-----∞-T_Controle. Les infos (champs) de la table T_dossier correspondant au dossier choisi et qui remontait dans le formulaire B n'aparaisse plus. Les regles ont changé donc forcément la requete source également. Il y a des chances que le problème vienne de la... mais je demande si le faite d'etre en relation 1-1 bloque le renvoie d'infos...
    je vais garder la table T_controle. c'est plus claire visuellement mais oui si je l'avais su dès le départ j'aurais surement gagner bcp de tps...

    je reste également sur l'idée des formulaire ( 4 au total). j'aurais donc une requete que j'appelerai pour chaque libellé avec un critere pour le champ Libellespointsdecontrole. Par contre je risque d'avoir besoin d'un code pour que l'IDcontroledossier vienne s'ajouter dans la table T_resultatcontrole à chaquefois qu'un libellés sera concerné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IDcontroledossier              Libelleptscontrole                 OK     
           1                                  1                       oui    
           1                                  3                        ...
           1                                  9                        ...
           1                                 15                       ...
    penses tu que l'openargs doit etre utilisé pour cela ??

    [EDIT]
    Les infos (champs) de la table T_dossier correspondant au dossier choisi et qui remontait dans le formulaire B n'aparaisse plus.
    Rien qu'en lisant je pense que tu savais déja d'ou venait le problème... j'ai fini par comprendre (ca m'arrive de tps en tps...lol). C'est à cause de T_controle.IDdossier qui était indéxé sans doublons donc relation T_Dossier-1-----1-T_Controle. J'ai mis avec doublons ce qui me donne T_Dossier-1-----∞-T_Controle et permet de remonter les champs dans le form B. Le code avec message d'erreur bloquant les doublons et le filtre qui devrait s'opérer sur le sousformA1 (ne pas faire apparaitre les dossier déjà controlés) suffiront je pense...[/EDIT]

  17. #17
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 742
    Points : 57 547
    Points
    57 547
    Billets dans le blog
    42
    Par défaut
    Salut,

    Citation Envoyé par Chagui
    Rien qu'en lisant je pense que tu savais déja d'ou venait le problème...
    Ben en fait non, je ne vois pas en quoi changer la propriété "indexé" de T_Controle.idDossier modifie la requête source. Mais bon, j’ai peut-être loupé un truc…

    Citation Envoyé par Chagui
    Par contre je risque d'avoir besoin d'un code pour que l'IDcontroledossier vienne s'ajouter dans la table T_resultatcontrole à chaquefois qu'un libellés sera concerné.
    N’est-ce pas ce dont nous avons déjà parlé ici ?

    Avec un peu plus loin, une proposition de requête à la fin du message ?


    Si T_Controle.idControleDossier est un NumAuto, tu peux l’obtenir dès l’ouverture du formulaire B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.GoToRecord , , acNewRec
    Me!IDdossier = Me.OpenArgs
     
    Msgbox (Me!idControleDossier) ' affichage de idControleDossier pour test
     
    End Sub
    Pour le reste, tout dépend de la structure de tes 4 formulaires (dépendant, indépendant).
    Comme on déborde du sujet initial, tu devrais ouvrir une nouvelle discussion en cas de soucis…

  18. #18
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Merci !!!!


    J'avais oublié que tu avais mis ca, je m'étais trop concentré sur l'openargs.. ca marche très bien la requete est nickel... exactement ce que je voulais

    Je met ce post en résolu.

    j'en ai un autre ici...lol

    et oui ca ne s'arrete jamais !!! . Si jamais tu as une idée...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/06/2015, 13h58
  2. Réponses: 3
    Dernier message: 24/07/2014, 09h59
  3. Réponses: 9
    Dernier message: 04/06/2012, 10h28
  4. Réponses: 2
    Dernier message: 23/10/2007, 11h14
  5. Réponses: 4
    Dernier message: 18/12/2006, 14h13

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