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

Macros Access Discussion :

Depuis un formulaire déclencher une procédure d'un autre formulaire [AC-2019]


Sujet :

Macros Access

  1. #1
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut Depuis un formulaire déclencher une procédure d'un autre formulaire
    Bonjour à tous et à toutes,

    J'ai un 1er formulaire avec un contrôle[txtNombreDepart] dans lequel je saisis une année.

    J'y ai mis 2 boutons, 1 qui déclenche l'exécution d'une requête (à faire en 1er), l'autre qui ouvre un formulaire basé sur cette requête ; tout cela fonctionne parfaitement

    J'ai rajouté un bouton [f paiement] pour ouvrir un autre formulaire.

    Dans ce formulaire, j'ai un contrôle [txtNbrDepart] dans lequel, en fonctionnement normal, je saisis une année ; cela déclenche la procédure suivante

    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
    30
    31
    32
    33
    34
    Private Sub txtNbreDepart_AfterUpdate()
      Dim iNumDepart As Integer
      Dim Ctl As Control
      'Vérifier que le contrôle n'est pas null
      If IsNull(Me.txtNbreDepart) Then Exit Sub
      iNumDepart = Me.txtNbreDepart
     
      'Aménager les contrôles
      For Each Ctl In Me.Controls
        If Ctl.Name Like "txtDU#" Then Ctl.ControlSource = iNumDepart + Right(Ctl.Name, 1): GoTo ctlSuivant
        If Ctl.Name Like "et#" Then Ctl.Caption = (iNumDepart) + Right(Ctl.Name, 1)
        If Ctl.Name Like "txtAJour#" Then
           Ctl.ControlSource = "=DCount(""*"",""0_R_COTISATIONS_ADHERENTS"",""Cotisation_An=" & iNumDepart + Right(Ctl.Name, 1) & " and Cotisation_Du=0"")"
           GoTo ctlSuivant
        End If
        If Ctl.Name Like "txtRetard#" Then
           Ctl.ControlSource = "=DCount(""*"",""0_R_COTISATIONS_ADHERENTS"",""Cotisation_An=" & iNumDepart + Right(Ctl.Name, 1) & " and Cotisation_Du<>0"")"
           GoTo ctlSuivant
        End If
     
        If Ctl.Name Like "txtTlDu#" Then
           Ctl.ControlSource = "=DSum(""Cotisation_Du"",""0_R_COTISATIONS_ADHERENTS"",""Cotisation_An=" & iNumDepart + Right(Ctl.Name, 1) & """)"
           GoTo ctlSuivant
        End If
    ctlSuivant:
      Next Ctl
     'Créer la requête source 0_R_COTISATIONS_ANNEE_0_+_4_SUIVANTES
     Call MAJCotisDues_0_à_4(iNumDepart)
      'L'affecter comme source
     Me.RecordSource = "0_R_COTISATIONS_ANNEE_0_+_4_SUIVANTES"
     Me.Recalc
     Me.txtNbreDepart = iNumDepart
     
    End Sub
    Pour le moment à ce bouton j'ai associé la macro que je joins ici (je ne sais pas comment insérer les actions d'une macro à l'intérieur d'une discussion)


    Cela marche en partie puisque mon formulaire 0_Formulaire_paiement_des_cotisations s'ouvre bien et que l'année saisie dans le 1er formulaire s'affiche bien dans le contrôle [txtNbrDepart]

    Par contre la procédure ne va pas plus loin, même si je fais [Entrée] sur cette valeur qui s'affiche, rien ne se passe

    J'ai essayé de rajouter une autre action
    [Exécuter Code] avec comme
    [Nom de la fonction] Private Sub txtNbreDepart_AfterUpdate()

    Cela ne fonctionne pas.

    L’exécution de cette procédure peut-elle se faire automatiquement ?
    Si oui quelle action utiliser ?

    Merci de votre aide
    A+
    C15
    Images attachées Images attachées

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    novembre 2004
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : novembre 2004
    Messages : 8 202
    Points : 13 831
    Points
    13 831
    Par défaut
    bonjour C15Nantes,
    à priori dans ce code, tu fais un chargement dynamique de la source (ou du label) de plusieurs contrôles de ton formulaire.
    1ère question: dans ces contrôles commençant par "txtDU#" ,"et#", "txtAJour#", txtRetard# et txtTlDu# : à quoi correspond pour toi le caractère "#" ?
    J'espère que cela ne correspond pas au caractère joker qu'on utilise avec like, car ce caractère est "*" et pas "#".

    D'autre part, si il y a plusieurs contrôles à traiter (txtDu1 à txtDU9 par exemple), je ne vois pas où est incrémenté ta variable iNumDepart
    (à part peut-être ici: Call MAJCotisDues_0_à_4(iNumDepart), si toutefois le paramètre est passé par référence (ByRef) ?) ce qui fait que tu modifies toujours les mêmes contrôles.

    Par contre la procédure ne va pas plus loin, même si je fais [Entrée] sur cette valeur qui s'affiche, rien ne se passe
    2ème question: je suppose que c'est une boite message demandant un paramètre, peux-tu imprimer l'écran qui s'affiche ?
    Pour le moment à ce bouton j'ai associé la macro que je joins ici (je ne sais pas comment insérer les actions d'une macro à l'intérieur d'une discussion)
    un fichier pdf c'est très bien, tu peux aussi poster une image.

    Autre chose: l'utilisation de tag comme GoTo ctlSuivant dans une boucle, c'est dépassé et même, dans ton cas, inutile (cela ne te fera pas gagner plus de temps) étant donné que chaque bloc If est conditionné par la comparaison du début du nom des contrôles, ils ne peuvent donc pas s'exécuter tous pour un même contrôle.
    Je t'invite également à corriger les fautes de frappe de ton titre (pour les éventuelles recherches des autres forumeurs)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut Depuis un formulaire déclencher une procédure d'un autre formulaire
    Bonsoir tee_grandbois,

    1 En ce qui concerne les contrôles txDU# et autres, je te joins un pdf montrant à quoi ils correspondent dan mon formulaire ; dans la 1ère colonne on a, par exemple, txDU0 et la dernière txDU4, 0 correspondant à l'année saisie, 4 à l'année saisie +4.

    Ils sont effectivement incrémentés par la procédure MAJCotisDues_0_à_4(iNumDepart)

    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
    Public Sub MAJCotisDues_0_à_4(NumDebut As Integer)
      Dim sSql As String
      Dim q As QueryDef
      sSql = "TRANSFORM Sum(T_Cotisation.Cotisation_Du) AS SommeDeCotisation_Du" _
    & " SELECT[T Adhérents].Titre, [T Adhérents].N°Adherent, [T Adhérents].Nom, [T Adhérents].Prenom, Sum(T_Cotisation.Cotisation_Du) AS Total" _
    & " FROM [T Adhérents] INNER JOIN T_Cotisation ON [T Adhérents].N°Adherent = T_Cotisation.T_Adherent_FK" _
    & " WHERE (((T_Cotisation.Cotisation_An) Between " & NumDebut _
    & " And " & NumDebut + 4 & ") AND (([T Adhérents].Adherent)=True))" _
    & " GROUP BY[T Adhérents].Titre, [T Adhérents].N°Adherent, [T Adhérents].Nom, [T Adhérents].Prenom" _
    & " ORDER BY[T Adhérents].Nom, [T Adhérents].Prenom" _
    & " PIVOT T_Cotisation.Cotisation_An;"
     
      Set q = CurrentDb.QueryDefs("0_R_COTISATIONS_ANNEE_0_+_4_SUIVANTES")
      q.SQL = sSql
    End Sub

    2 Je n'ai pas de message d'erreur, j'ai simplement un formulaire désespérément vide où seule l'année saisie dans mon 1er formulaire est affichée (voir page 2 du *pdf)

    Il faudrait que je ressaisisse dans ce formulaire l'année 0 pour que tout s'affiche, c'est un peu bête...

    Le premier formulaire reste visible au milieu de l'écran


    3 Toute cette procédure, et beaucoup d'autres qui font marcher ma base depuis 2002, m'a été proposée par un ou plusieurs contributeurs de ce forum. J'aurais bien été incapable d'en écrire la moindre ligne.

    Je ne vous remercierai jamais assez.

    Si je comprends ta remarque concernant les GoTo ctlSuivant, je peux les supprimer ?


    4 J'ai corrigé mon titre...

    Merci de ton aide
    A+
    C15
    Images attachées Images attachées

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    novembre 2004
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : novembre 2004
    Messages : 8 202
    Points : 13 831
    Points
    13 831
    Par défaut
    1 En ce qui concerne les contrôles txDU# et autres, je te joins un pdf montrant à quoi ils correspondent dan mon formulaire ; dans la 1ère colonne on a, par exemple, txDU0 et la dernière txDU4, 0 correspondant à l'année saisie, 4 à l'année saisie +4.
    commence par corriger ton code en remplaçant tous les # par *: If Ctl.Name Like "txtDU*" et vois ce que ça donne
    Ils sont effectivement incrémentés par la procédure MAJCotisDues_0_à_4(iNumDepart)
    en fait, c'est avec le dernier chiffre du nom contrôle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (iNumDepart) + Right(Ctl.Name, 1)
    Le premier formulaire reste visible au milieu de l'écran
    peut-être parce que sa propriété "Fenêtre modale" est à Oui, essaie de mettre à Non

    4 J'ai corrigé mon titre...
    étrange moi, je vois toujours l'ancien titre :
    Nom : Capture d’écran 2020-12-09 233517.jpg
Affichages : 128
Taille : 10,4 Ko
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut Depuis un formulaire déclencher une procédure d'un autre formulaire
    Bonjour
    Merci de cette réponse.

    Quelques remarques
    1 le changement de # par *, n'a rien modifié dans le résultat : quand j'ouvre mon 0_ FORMULAIRE_PAIEMENT_DES_COTISATIONS via mon 0_FORMULAIRE_MAJ_COTIS Année 0 et suivantes, j'ai toujours mon année 0 qui s'affiche mais mon formulaire reste vide.
    Il n'affiche des données que lorsque je ressaisis l'année en question (comme je l'aurais fait si j'avais ouvert ce formulaire directement)

    Que faire ?

    J'ai essayé d'associer la procédure à une propriété du formulaire comme sur activation ou sur ouverture ; formulaire toujours vide

    2 j'ai rajouté une action à ma macro pour fermer le 0_FORMULAIRE_MAJ_COTIS Année 0 et suivantes ; cela marche

    3 je n'ai pas trouvé le moyen de modifier l'intitulé de ma discussion, même en allant dans "examiner l'élément"

    Merci de ton aide
    A+
    C15

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    novembre 2004
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : novembre 2004
    Messages : 8 202
    Points : 13 831
    Points
    13 831
    Par défaut
    bonsoir,
    un peu compliqué de savoir ce qui se passe sans voir le contexte dans son ensemble, il me faudrait une copie allégée (si possible) de la base avec quelques données mais anonymisées et la marche à suivre pour reproduire l'erreur
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut Depuis un formulaire déclencher une procédure d'un autre formulaire
    Bonjour tee_grandbois

    Ci joint une base allégée.

    La procédure à suivre :
    Ouvrir le formulaire 0_FORMULAIRE_MAJ_COTIS Année 0 et suivantes
    Saisir l'année de départ 2016
    Utiliser les boutons de ce formulaire

    Créer la requête 0_R_COTISATIONS_ANNEE_0_+_4_SUIVANTES ; elle s'affiche en arrière plan avec les données des 10 adhérents

    Ouvrir le formulaire 0_FORMULAIRE_SUIVI_COTISATIONS ; il s'affiche en arrière plan avec toutes les données
    Ouvrir le formulaire 0_ FORMULAIRE_PAIEMENT_DES_COTISATIONS ; il s'affiche en arrière-plan avec 2016 affichée en année de départ, mais le reste est vide


    le formulaire 0_FORMULAIRE_MAJ_COTIS Année 0 et suivantes est fermé

    La procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call MAJCotisDues_0_à_4(Me.txtNombreDepart)
    se trouve dans le Module MAJCotisDues

    Toute cette procédure me permettrait d'ouvrir 3 objets complémentaires en ne saisissant qu'une seule fois l'année de départ dans le formulaire 0_FORMULAIRE_MAJ_COTIS Année 0 et suivantes

    Merci de ton aide
    A+
    C15
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    novembre 2004
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : novembre 2004
    Messages : 8 202
    Points : 13 831
    Points
    13 831
    Par défaut
    bonjour,
    serait-il possible de l'avoir en .Zip ? je n'ai pas de décompresseur pour .Rar
    merci
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour


    Et voilà...
    Merci
    Fichiers attachés Fichiers attachés

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    novembre 2004
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : novembre 2004
    Messages : 8 202
    Points : 13 831
    Points
    13 831
    Par défaut
    je me souviens d'avoir travaillé sur cette application il y a quelques temps déjà ..

    mais je ne comprend pas pourquoi il faut passer par toute cette procédure pour ouvrir le formulaire 0_ FORMULAIRE_PAIEMENT_DES_COTISATIONS qui, fonctionne de manière autonome, il suffit de renseigner l'année et le formulaire se remplit tout seul:

    Nom : _0.JPG
Affichages : 89
Taille : 288,8 Ko

    alors pourquoi ouvrir une requête et un formulaire au préalable ?

    il faudrait nous expliquer le but de la manœuvre pour proposer une meilleure solution

    PS: j'ai masqué les noms, ne sachant pas si les données avaient été anonymisées
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,

    J'ai envisagé cela pour faciliter le travail du trésorier pour être sur que pour la requête et les 2 formulaires, il ait les mêmes informations (basées sur le même année de référence).

    Par contre, en refaisant des tests, je m'aperçois avec effroi que mes 2 formulaires ne fonctionnent pas.
    En effet ils sont basés sur une requête analyse croisée...et donc les données, sauf erreur de ma part, ne sont pas modifiables

    Suite aux conseils que l'on m'a donné, j'ai très sensiblement modifié la structure de la base ; les formulaires, que j'avais imaginés lorsque j'ai créé la base, avaient comme source de données une requête sélection et avaient ainsi l'avantage de permettre la modification de plusieurs enregistrements à la fois (par exemple lorsque le trésorier recevait les cotisations)...et cela marchait très bien !

    Est-il possible, en modifiant la source, de rendre ces formulaires "utilisables" ?

    Pour les noms, ne t'inquiète pas, c'est une pure invention de ma part.

    Merci de ton aide.

    A+
    C15

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    novembre 2004
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : novembre 2004
    Messages : 8 202
    Points : 13 831
    Points
    13 831
    Par défaut
    J'ai envisagé cela pour faciliter le travail du trésorier pour être sur que pour la requête et les 2 formulaires, il ait les mêmes informations
    à part rassurer le trésorier, je ne vois vraiment pas l'utilité de tout çà

    Est-il possible, en modifiant la source, de rendre ces formulaires "utilisables"
    il faut utiliser les données des tables d'origine, les requêtes analyse croisée servent uniquement à afficher des tableaux ou imprimer des états.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  13. #13
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,

    Je dois donc revoir ma copie sur cet aspect des choses ; avec le confinement, j'ai du temps devant moi...

    Je vais donc considéré le problème comme résolu.

    Merci encore pour tes conseils

    A+
    C15

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

Discussions similaires

  1. Déclencher une procédure en fonction de l'heure
    Par marwanaff dans le forum WinDev
    Réponses: 11
    Dernier message: 09/10/2013, 17h07
  2. Comment appeler une procédure d'un autre formulaire.
    Par cmatias dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2008, 14h58
  3. Réponses: 2
    Dernier message: 04/04/2007, 18h30
  4. exécuter directement une procédure d'un autre classeur
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/12/2006, 16h30
  5. [VBA-A]Appel d'une procédure d'un autre projet!
    Par TiT0f dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/06/2006, 09h20

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