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 :

Appeler un champ se trouvant dans un autre formulaire [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut Appeler un champ se trouvant dans un autre formulaire
    Bonjour tout le monde,

    J'ai un problème qui est peut-être facile pour vous.
    Je veux programmer le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.txtdebut < Me.txtdebclause Then
          MsgBox "La date de début doit être identique ou postérieure à la début de la clause salariale.", vbOKOnly, "Message d'erreur!"
    End If
    " Me.txtdebut " est dans le formulaire dans lequel je programme le message d'erreur.

    Le problème c'est que "Me.txtdebclause" se trouve dans un autre formulaire qui n'est pas ouvert.

    Donc j'ai le message d'erreur suivant :

    Nom : erreur.PNG
Affichages : 403
Taille : 13,0 Ko

    J'ai fais des recherches mais j'y arrive pas pour le moment.

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 094
    Points : 5 211
    Points
    5 211
    Par défaut
    Bonjour,

    Si le 2e formulaire est ouvert cela s'écrit par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.txtdebut < form_formulaire2.txtdebclause Then
    ou 
    If Me.txtdebut < forms("formulaire2").txtdebclause Then
    Mais s'il n'est pas ouvert il faut aller lire directement dans la table, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.txtdebut < dlookup("txtdebclause","latablequivabien","laconditionquivabien") Then
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 138
    Points : 84 797
    Points
    84 797
    Billets dans le blog
    15
    Par défaut


    En complément, ce tutoriel de loufab pourrait également vous être très utile :

    .
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  4. #4
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut Merci
    Merci les amis... Je vous répondrez vendredi, jour où je travaille, pour vous faire le compte-rendu si cela marche.

    Mais pour le moment... "Latablequivabien " serai la table dans lequel se trouve le champ?
    Et "laconditionquivabien" serait?
    Encore merci....

  5. #5
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut Dlookup
    Bonjour les amis,

    J'ai essayer la fonction Dlookup, mais avec ça, elle part chercher une valeur spécifique du champ de la table. Moi j'aimerai qu'elle part chercher la valeur qui est enregistrer dans le formulaire.

    Comment faire?

    Avec ce code ci-dessous, elle part chercher la première valeur du champs [DEB_C_SAL] dans la table [DOC]. Et avec une condition, je peux en plus aller chercher une autre valeur du champs.

    Mais moi j'aimerai qu'elle parte chercher la valeur qui est enregistrer dans le formulaire (Formulaire_relation_travail_modifier) qui est fermer. La zone de texte dans ce formulaire s'appelle txtdebclause qui à pour source contrôle [DEB_C_SAL] et relier à la table [DOC].


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.txtdebut < DLookup("[DEB_C_SAL]", "[DOC]") Then
          MsgBox "La date de début doit être identique ou postérieure à la début de la clause salariale.", vbOKOnly, "Message d'erreur!"
    End If

    Je suis débutant en programmation et je m'excuse si je ne suis pas assez clair.

    Merci encore pour votre aide.

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Siramane,

    Je ne comprend pas ce que tu veux dire exactement. Un formulaire fermé n'a pas de valeur, il est vide puisqu'il est fermé. Est-ce que c'est parce que tu ouvres un formulaire à partir du formulaire (Formulaire_relation_travail_modifier) et que tu fermes celui-ci dans la même séquence et que tu veux récupérer l'information qu'il y avait dans le champ txtdebclause au moment de l'action?

    Si c'est le cas le moyen le plus simple et efficace est de passé la valeur dans le OpenArgs du DoCmd.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  7. #7
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut Explication
    Admettons que l'utilisateur viens d'ouvrir Access et qu'il part ouvrir le formulaire A(Formulaire_ivc_modifier). Maintenant, en voulant entrer la date dans la zone de texte txtdebut , il faut que cette date ne soit pas inférieur à la date inscrit dans la zone de texte txtdebclause dans le formulaire B (Formulaire_relation_travail_modifier) qui n'est pas ouvert vu que l'utilisateur à ouvert seulement le formulaire A.

    C'est pourquoi j'avais écris le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.txtdebut < Me.txtdebclause Then
          MsgBox "La date de début doit être identique ou postérieure à la début de la clause salariale.", vbOKOnly, "Message d'erreur!"
    End If
    Mais il ne reconnais pas txtdebclause.

    Comment je peux faire ça ? ou Est-ce que je dois absolument ouvrir le formulaire B ?

    Je ne sais pas si j'ai bien expliquer.




    DÉSOLÉ et merci pour votre aide.

  8. #8
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Siramane,

    Le champ txtdebclause a toujours la même valeur? Je ne crois pas. Quel est donc la relation entre le champ txtdebclause du formulaire (Formulaire_relation_travail_modifier) et le champ txtdebut du formulaire (Formulaire_ivc_modifier). C'est grâce à cette relation qu'il sera possible d'aller récupérer la valeur de txtdebclause.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  9. #9
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut reponse
    Ah ok.

    voici une image de mes deux formulaires, et je dois créer un message d'erreur dans le formulaire du bas en disant que la date que j'ai entourer en rouge(txtdebut) ne doit pas être inférieur à celui du haut entourer en jaune(txtdebclause).

    Vu que les deux formulaires sont lier à des tables différentes, différentes requêtes. Il n'y a pas de relation dans ce cas? C'est moi je dois les mettre en relations par ce message d'erreur que je veux programmer.

    Mais si j'ai bien compris ce que vous avez dit, il doit à la base avoir une relation entre les deux champs.
    Comment je pourrai faire cela.

    Nom : khqhx.PNG
Affichages : 378
Taille : 82,6 Ko



    Mercii!

  10. #10
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Siramane,

    Ok selon moi ce qui fait le lien est le numéro ICTSN. Tu pourrais donc récupérer la date comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.txtdebut <= DLookup("[DEB_C_SAL]", "[DOC]", "[NumeroICTSN]=" & me.NumeroICTSN) Then
          MsgBox "La date de début doit être identique ou postérieure à la début de la clause salariale.", vbOKOnly, "Message d'erreur!"
    End If
    Ici je suppose que ton champ se nomme NumeroICTSM dans la table DOC et je suppose que ton champ dans le formulaire Clause Indemnité de Vie Chère se nomme NumeroICTSM.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  11. #11
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut reponse
    Merci Mr Robert,

    j'essaie cela tout de suite.

    Mais, est-ce que tu voulais dire :

    " et je suppose que ton champ dans le formulaire Document relation de travail (plutôt que Clause Indemnité de Vie Chère) se nomme NumeroICTSM.


    Sinon j'essaie tout de suite.



    Encore merci.

  12. #12
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Siramane,

    Explication de la fonction:

    Première partie = le champ que l'on veut récupérer
    Deuxième partie = la table dans lequel se trouve ce champ
    Troisième partie = la ou les conditions

    Dans le cas présent on veut récupérer "[DEB_C_SAL]" de la table "[DOC]" à la condition que "[NumeroICTSN]=" qui lui est un champ de la table [DOC] soit égal au numéro ICTSN du formulaire dans lequel on met cette fonction & me.NumeroICTSN donc le formulaire Clause Indemnité de Vie Chère.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  13. #13
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut reponse
    Voilà, je l'ai essayer, il marche mais il considère toujours le premier enregistrer de la table [DOC] que j'ai souligner en rouge sur l'image. Quand je rentre une date inférieur à cette date mon message d'erreur s'affiche. Alors qu'on aimerai qu'il tienne compte uniquement de l'enregistrement qui se trouve dans le formulaire Document relation de travail.

    Si je met 2014-01-01 qui est inférieur à la date que j'ai entourer en jaune, j'aimerai que là le message d'erreur s'affiche.
    Mais c'est lorsque je rentre par exemple 1988-12-31 qui est inférieur au premier enregistrement de ma table [DOC] que le message d'erreur s'affiche.

    J'espère que vous avez compris mon explication.


    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.txtdebut <= DLookup("[DEB_C_SAL]", "[DOC]", "[DOSS_NO]=" & Me.txtdoss) Then
          MsgBox "La date de début doit être identique ou postérieure à la début de la clause salariale.", vbOKOnly, "Message d'erreur!"
    End If

    Nom : re.PNG
Affichages : 305
Taille : 58,8 Ko

    Merci robert pour ton aide.

  14. #14
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Siramane,

    Qu'est ce qui fait la relation entre
    Nom : Relation.PNG
Affichages : 388
Taille : 92,9 Ko

    C'est avec cette relation que tu pourras récupérer la bonne date. Comme je n'ai pas la structure de tes tables difficiles d'en dire plus.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  15. #15
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut information de plus
    Voici quelques informations.

    J'ai un formulaire d'accueil ou je dois entrer le No de dossier lannée et le No de génération avant d'avoir accès à mes formulaire. Et tous mes5 formulaire ont des tables ou les informations sont dedans comme dans l'image ci-dessous ou vous pouvez voir le No de dossier, l'année et le numéro de génération.

    Nom : aceuil.PNG
Affichages : 334
Taille : 79,3 Ko

    Nom : nodoss.PNG
Affichages : 277
Taille : 5,5 Ko

  16. #16
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut remerciment
    Je continue mes recherches.

    Encore merci pour votre disponibilité. J'espère le trouver, car il y a à peu près 5 messages d'erreurs à programmer dans ce contexte.
    Images attachées Images attachées  

  17. #17
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Siramane,

    Après avoir vu tes tables voici comment fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub txtdebut_AfterUpdate()
     
        Dim daDate As Date
     
        daDate = DLookup("DEB_CLAUSE", "DOC", "[NO_DOSS]=" & Chr(34) & Me.txtdoss & Chr(34) & " And [DOC_AN]=" & Chr(34) _
            & Me.txtannee & Chr(34) & " And [DOC_NO_GEN]=" & Chr(34) & Me.txtgen & Chr(34))
        If daDate > CDate(Me.txtdebut) Then
            MsgBox "Vous devez inscrire une date plus grande ou égale à :  " & daDate, vbCritical, "Mauvais choix de date"
            Me.txtdebut = Me.txtdebut.OldValue
            Me.txtdebut.SetFocus
            Exit Sub
        End If
     
    End Sub
    Ce qui fait le lien est la combinaison de 3 champs qui sont déjà renseignés dans ton formulaire, donc on récupère ceux-ci pour aller trouver la bonne date. Comme ces champs sont au format texte il faut ajouter les " et c'est ce que Chr(34) fait.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  18. #18
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut Remerciement
    Bonjour Robert,

    J'aimerai te remercier. Je viens d'essayer le code au bureau et il marche au premier coup. Encore merci pour ton aide. Je vais me servir de cela pour programmer les autres messages d'erreur de ce genre. Je marquerai la mention résolu.

    Juste un petit bug, il compare bien la date, sauf qu'il prend toujours 15 pour le jour. Par exemple si j'inscris dans l'autre formulaire 2014-05-02, il va utiliser 2014-05-15 dans la comparaison.

    Je vais essayer de voir pourquoi ça fait cela.

    Mais merci déjà pour ton aides. Vous m'aider vraiment. Encore merci et longue vie au forum.

  19. #19
    Membre du Club
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Points : 44
    Points
    44
    Par défaut Problème resolue
    J'ai trouvé le problème du petit bug. C'est pas un bug en fait, c'est juste que dans le code, le bon nom de champ est DEB_C_SAL au lieu de DED_CLAUSE. Et dans DEB_CLAUSE, toutes les dates avaient pour jour 15.


    Problème résolu.


    Encore merci Robert et longue vie au forum.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/08/2012, 18h04
  2. Faire appel à un sous programme se trouvant dans un autre fichie
    Par Roud9 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 12/04/2011, 11h43
  3. Réponses: 1
    Dernier message: 04/05/2006, 09h26
  4. utiliser une variable se trouvant dans un autre .c
    Par richard_sraing dans le forum C
    Réponses: 2
    Dernier message: 18/03/2006, 11h59
  5. [VBS] appel d'un script VBS dans un autre script VBS???
    Par Amandine62 dans le forum VBScript
    Réponses: 9
    Dernier message: 31/01/2006, 18h17

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