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 :

Renseigner formulaire et sous formulaire [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    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 : 383
    Par défaut Renseigner formulaire et sous formulaire
    Bonjour et bonne année à tous et à toutes,

    J'ai un formulaire concernant les données d'adhérents d'une association.
    J'y ai inséré un sous-formulaire affichant les cotisations de cet adhérent (liés champs-père/champ-fils par N°Adherent).

    Cela marche bien pour la consultation des adhérents actuels.
    Par contre, lorsque je crée un nouvel adhérent (via un bouton sur mon formulaire principal) cela ne marche pas en ce qui concerne mon sous-formulaire.

    Quelques lignes que j'utilise sur le formulaire principal :

    Sur bouton "nouvel enregistrement" :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Private Sub Nouveau_Click()
     
    On Error GoTo Err_Nouveau_Click
     
        Forms![F Adhérents avec cotisations].AllowEdits = True
     
        DoCmd.GoToRecord , , acNewRec
     
     
        DoCmd.GoToControl "Titre"
     
        Me!Titre.Locked = False
        Me!NomAdherent.Locked = False
        Me!Prénom.Locked = False
        Me!DateNaissance.Locked = False
        Me!Adherent.Locked = False
        Me!DateAdhesion.Locked = False
        Me!TypeAdherent.Locked = False
        Me!Fonction.Locked = False
        Me!Spécialité.Locked = False
        Me!NomOrigine.Locked = False
        Me!DateOrigine.Locked = False
        Me!DateRadiation.Locked = False
        Me!MotifRadiation.Locked = False
        Me!DateDeces.Locked = False
        Me!Adresse.Locked = False
        Me!NomVille.Locked = False
        Me!CP.Locked = False
        Me!Region.Locked = False
        Me!Téléphone.Locked = False
        Me!Mobile.Locked = False
        Me!EMail.Locked = False
        Me!Profession.Locked = False
        Me!Retraite.Locked = False
        Me!DateMiseAJour.Locked = False
     
     
    Exit_Nouveau_Click:
        Exit Sub
     
    Err_Nouveau_Click:
        MsgBox Err.Description
        Resume Exit_Nouveau_Click
     
    End Sub
    Sur "Avant insertion" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_BeforeInsert(Cancel As Integer)
     
    N°Adherent = DLast("[N°Adherent]", "[T Adhérents]") + 1
    Forms![F Adhérents avec cotisations]![T Cotisations].Form!N°Adherent.Value = Forms![F Adhérents avec cotisations].N°Adherent.Value
     
    End Sub
    Ce qui fait que, dès que je commence à saisir le nom du nouvel adhérent, un nouveau N°Adherent lui est attribué dans le formulaire principal et le sous-formulaire.
    Cela fonctionne parfaitement.

    Sur bouton "nouvel enregistrement" :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Private Sub Nouveau_Click()
     
    On Error GoTo Err_Nouveau_Click
     
        Forms![F Adhérents avec cotisations].AllowEdits = True
     
        DoCmd.GoToRecord , , acNewRec
     
     
        DoCmd.GoToControl "Titre"
     
        Me!Titre.Locked = False
        Me!NomAdherent.Locked = False
        Me!Prénom.Locked = False
        Me!DateNaissance.Locked = False
        Me!Adherent.Locked = False
        Me!DateAdhesion.Locked = False
        Me!TypeAdherent.Locked = False
        Me!Fonction.Locked = False
        Me!Spécialité.Locked = False
        Me!NomOrigine.Locked = False
        Me!DateOrigine.Locked = False
        Me!DateRadiation.Locked = False
        Me!MotifRadiation.Locked = False
        Me!DateDeces.Locked = False
        Me!Adresse.Locked = False
        Me!NomVille.Locked = False
        Me!CP.Locked = False
        Me!Region.Locked = False
        Me!Téléphone.Locked = False
        Me!Mobile.Locked = False
        Me!EMail.Locked = False
        Me!Profession.Locked = False
        Me!Retraite.Locked = False
        Me!DateMiseAJour.Locked = False
     
     
    Exit_Nouveau_Click:
        Exit Sub
     
    Err_Nouveau_Click:
        MsgBox Err.Description
        Resume Exit_Nouveau_Click
     
    End Sub
    Ce que je voudrais c'est que, quand je saisis les premières données de l'adhérent dans le formulaire principal, cela s'affiche aussitôt dans le sous-formulaire.
    Ou alors, quand je valide les données du formulaire principal, les données apparaissent dans mon sous-formulaire.

    Le code associé à mon bouton "Valider les données" de mon formulaire principal :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    Private Sub Sauvegarde_Click()
     
     ' Dim stDocName As String
     
               ' On Error GoTo Err_Sauvegarde_Click
     
        If Me.Dirty And IsNull(Me.DateDeces) And Me.N°Adherent <= DLast("[N°Adherent]", "[T Adhérents]") Then
     
               'DoCmd.RunCommand acCmdSaveRecord
     
               'Me.Refresh
     
        '
        'Sauvegarde anciennes valeurs
        '
     
        Dim T_Anciennes_valeurs As Recordset
                Set T_Anciennes_valeurs = CurrentDb.OpenRecordset("T_Anciennes_valeurs", DB_OPEN_TABLE)
     
                T_Anciennes_valeurs.AddNew
     
                T_Anciennes_valeurs("N°Adherent") = Me.N°Adherent.OldValue
                T_Anciennes_valeurs("Titre") = Me.Titre.OldValue
                T_Anciennes_valeurs("NomAdherent") = Me.NomAdherent.OldValue
                T_Anciennes_valeurs("PrenomAdherent") = Me.Prénom.OldValue
                T_Anciennes_valeurs("Adherent") = Me.Adherent.OldValue
                T_Anciennes_valeurs("DateAdhesion") = Me.DateAdhesion.OldValue
                T_Anciennes_valeurs("TypeAdherent") = Me.TypeAdherent.OldValue
                T_Anciennes_valeurs("Fonction") = Me.Fonction.OldValue
                T_Anciennes_valeurs("Specialite") = Me.Spécialité.OldValue
                T_Anciennes_valeurs("Origine") = Me.NomOrigine.OldValue
                T_Anciennes_valeurs("DateOrigine") = Me.DateOrigine.OldValue
                T_Anciennes_valeurs("DateNaissance") = Me.DateNaissance.OldValue
                T_Anciennes_valeurs("DateRadiation") = Me.DateRadiation.OldValue
                T_Anciennes_valeurs("MotifRadiation") = Me.MotifRadiation.OldValue
                T_Anciennes_valeurs("DateDeces") = Me.DateDeces.OldValue
                T_Anciennes_valeurs("Adresse") = Me.Adresse.OldValue
                T_Anciennes_valeurs("Ville") = Me.NomVille.OldValue
                T_Anciennes_valeurs("CP") = Me.CP.OldValue
                T_Anciennes_valeurs("Region") = Me.Region.OldValue
                T_Anciennes_valeurs("Pays") = Me.Pays.OldValue
                T_Anciennes_valeurs("Telephone") = Me.Téléphone.OldValue
                T_Anciennes_valeurs("Mobile") = Me.Mobile.OldValue
                T_Anciennes_valeurs("Fax") = Me.Fax.OldValue
                T_Anciennes_valeurs("EMail") = Me.EMail.OldValue
                T_Anciennes_valeurs("Profession") = Me.Profession.OldValue
                T_Anciennes_valeurs("Retraite") = Me.Retraite.OldValue
                'T_Anciennes_valeurs("DerniereMAJ") = Me.DateMiseAJour.OldValue
                T_Anciennes_valeurs("Divers") = Me.Divers.OldValue
                T_Anciennes_valeurs("MiseAJour") = Now
     
                T_Anciennes_valeurs.Update
                T_Anciennes_valeurs.Close
     
        '
        'sauvegarde nouvelles valeurs
        '
        Dim T_Nouvelles_valeurs As Recordset
                Set T_Nouvelles_valeurs = CurrentDb.OpenRecordset("T_Nouvelles_valeurs", DB_OPEN_TABLE)
     
                T_Nouvelles_valeurs.AddNew
     
                T_Nouvelles_valeurs("N°Adherent") = Me.N°Adherent
                T_Nouvelles_valeurs("Titre") = Me.Titre
                T_Nouvelles_valeurs("NomAdherent") = Me.NomAdherent
                T_Nouvelles_valeurs("PrenomAdherent") = Me.Prénom
                T_Nouvelles_valeurs("Adherent") = Me.Adherent
                T_Nouvelles_valeurs("DateAdhesion") = Me.DateAdhesion
                T_Nouvelles_valeurs("TypeAdherent") = Me.TypeAdherent
                T_Nouvelles_valeurs("Fonction") = Me.Fonction
                T_Nouvelles_valeurs("Specialite") = Me.Spécialité
                T_Nouvelles_valeurs("Origine") = Me.NomOrigine
                T_Nouvelles_valeurs("DateOrigine") = Me.DateOrigine
                T_Nouvelles_valeurs("DateNaissance") = Me.DateNaissance
                T_Nouvelles_valeurs("DateRadiation") = Me.DateRadiation
                T_Nouvelles_valeurs("MotifRadiation") = Me.MotifRadiation
                T_Nouvelles_valeurs("DateDeces") = Me.DateDeces
                T_Nouvelles_valeurs("Adresse") = Me.Adresse
                T_Nouvelles_valeurs("Ville") = Me.NomVille
                T_Nouvelles_valeurs("CP") = Me.CP
                T_Nouvelles_valeurs("Region") = Me.Region
                T_Nouvelles_valeurs("Pays") = Me.Pays
                T_Nouvelles_valeurs("Telephone") = Me.Téléphone
                T_Nouvelles_valeurs("Mobile") = Me.Mobile
                T_Nouvelles_valeurs("Fax") = Me.Fax
                T_Nouvelles_valeurs("EMail") = Me.EMail
                T_Nouvelles_valeurs("Profession") = Me.Profession
                T_Nouvelles_valeurs("Retraite") = Me.Retraite
                T_Nouvelles_valeurs("MiseAjour") = Now
                T_Nouvelles_valeurs("Divers") = Me.Divers
                'T_Nouvelles_valeurs("DerniereMAJ") = Me.DateMiseAJour.OldValue
     
                T_Nouvelles_valeurs.Update
                T_Nouvelles_valeurs.Close
     
     
                Me.DateMiseAJour = Now
     
        Dim Ctl As Control
        For Each Ctl In Me.Détail.Controls
        If (Ctl.ControlType = acTextBox) Or (Ctl.ControlType = acComboBox) Or (Ctl.ControlType = acCheckBox) Then
        Ctl.Locked = True
        End If
        Next Ctl
     
     
       End If
     
    Exit_Sauvegarde_Click:
       Exit Sub
     
     
     
    Err_Sauvegarde_Click:
       MsgBox Err.Description
    '   Resume Exit_Sauvegarde_Click
     
    End Sub

    Merci de votre aide.

    A+
    C15

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Bonjour,

    Champs père/Champs fils ?

    Ces 2 propriétés sont-elles correctement réglées ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    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 : 383
    Par défaut
    Bonjour Loufab,

    Je confirme que les champs père et fils sont bien liés par N°adherent.

    J'ai trouvé !

    Ce que je voulais, c'est que le nom le prénom et la date d'adhésion saisis dans le formulaire principal soit reportés automatiquement dans le sous formulaire.

    Ce que j'ai fait, c'est que sur sortie du nom, du prénom et de la date d'adhésion, j'ai mis, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub NomAdherent_Exit(Cancel As Integer)
    Me.NomDeChemin = Me.Nom & " " & Me.Prénom & ".jpg"
    Forms![F Adhérents avec cotisations]![T Cotisations].Form!Nom.Value = Forms![F Adhérents avec cotisations].Nom.Value
    End Sub
    C'est ce que j'avais fait sur avant insertion pour le N°Adherent

    Ce n'est peut-être pas la meilleure méthode, mais a priori cela marche.

    Pour info, je joins une copie écran du formulaire

    Merci de ton aide

    C15
    Images attachées Images attachées  

  4. #4
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    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 : 383
    Par défaut
    Rebonjour,

    Désolé, j'ai parlé trop tôt

    En effet, si les contrôles nom, prénom et date d'adhésion sont renseignés dans mon sous formulaire, je ne peux y accéder pour saisir les cotisations d'un nouvel adhérent
    J'ai un message d'erreur
    "modifications non effectuées, risque de doublon..."

    J'ai modifié mon code avant insertion de mon formulaire principal, mais cela ne change rien.
    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 Form_BeforeInsert(Cancel As Integer)
     
    N°Adherent = DLast("[N°Adherent]", "[T Adhérents]") + 1
    Forms![F Adhérents avec cotisations]![T Cotisations].Form!N°Adherent.Value = Forms![F Adhérents avec cotisations].N°Adherent.Value
     
    Dim Ctl As Control
        For Each Ctl In Forms![F Adhérents avec cotisations]![T Cotisations].Form.Détail.Controls
        If (Ctl.ControlType = acTextBox) Or (Ctl.ControlType = acComboBox) Or (Ctl.ControlType = acCheckBox) Then
        Ctl.Locked = False
        End If
        Next Ctl
     
     
    End Sub
    Mon raisonnement n'est pas le bon, mais je n'arrive pas à voir la faille.
    Je confirme que mon processus fonctionne correctement pour un enregistrement existant.
    Cela veut dire que pour accéder à mon sous-formulaire, il faut que mon nouvel adhérent soit enregistré...mais je ne vois pas comment le faire.

    Si j'utilise, après la saisie des données du formulaire principal, le bouton [valider cette fiche], cela bloque sur (en rouge)
    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
    Private Sub Sauvegarde_Click()
      
     ' Dim stDocName As String
    
               ' On Error GoTo Err_Sauvegarde_Click
    
        If Me.Dirty And IsNull(Me.DateDeces) And Me.N°Adherent <= DLast("[N°Adherent]", "[T Adhérents]") Then          
         
        '
        'Sauvegarde anciennes valeurs
        '
        
        Dim T_Anciennes_valeurs As Recordset
                Set T_Anciennes_valeurs = CurrentDb.OpenRecordset("T_Anciennes_valeurs", DB_OPEN_TABLE)
    
    ...
    Il y a peut être aussi un problème au niveau du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.Dirty And IsNull(Me.DateDeces) And Me.N°Adherent <= DLast("[N°Adherent]", "[T Adhérents]") Then
    Cette procédure de sauvegarde des anciennes valeurs ne doit s'appliquer qu'aux enregistrements existants et pas au nouveau que je suis en train de saisir.

    Merci de votre aide.

    A+

    C15

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Bonsoir,
    Il y a un truc qui m'échappe dans l'ergonomie de ton application.

    Pourquoi cette redondance d'information ?
    Tu as tout dans le formulaire principal et bien visible. Ces informations (nom...) sont bien à titre informatif, elles n'existe pas dans ta table cotisation ?

    Laissons ce détail de côté, voici la cause du problème.

    Un formulaire lié à une source de données fonctionne de cette manière :

    Lorsque tu édites un enregistrement existant, les données sont placées dans la propriété Value de chaque contrôle de zone de texte.
    Par contre lorsque le formulaire est en mode saisie (curseur sur Newrec, testable en vba en utilisant la propriété éponyme me.newrecord où true = nouvel ernegistrement) ce que tu rentres à la mimine est stocké non pas dans Value mais dans Text. Et ce jusqu'à que tu sauvegardes (me.dirty=false - attention dirty à la différence de newrec est à la fois une propriété et une méthode)

    Voici le code qu'il te faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'nouvel enregistrement en cour d'édition
    if me.newrecord and me.dirty then
      'valeur en cours de saisie.
      me.sfCotisation.form.controls("nom").value = me.nomadherent.text
    else
      'valeur existe en table
      me.sfCotisation.form.controls("nom").value = me.nomadherent.value  
    endif
    En plaçant cela dans une sub de ton formulaire principal tu pourras y faire appel depuistes évènement Après_MAJ mais surtout et plus important depuis ton événement Form_Current, ainsi à chaque déplacement dans le rst les zones de texte vont se rafraichir.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    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 : 383
    Par défaut
    Bonjour Loufab,

    Merci de cette réponse.

    Pour ta 1ere interrogation (nom, prénom et date adhésion dans le sous formulaire), c'est parce que mon sous formulaire est en fait un autre formulaire que j'ai inséré dans mon formulaire principal.
    Ce formulaire (sous formulaire) SfCotisations est basée sur une requête elle -même basée sur les tables T adhérents, T cotisations, T cotisations dues et la requête R cotisdues.
    Ainsi, en cochant, par exemple, en cochant la case C18, la valeur Du18 passe de 25 (valeur par défaut) à 0.

    Mais je me pose la question suivante, lorsque je saisis un nouvel adhérent dans mon formulaire principal, comment est-il enregistré dans les tables T Cotisations et T cotisations dues ?

    Je ne suis pas sur d'avoir la bonne méthode.

    Enfin, pour être clair, ma base que j'ai créée tant bien que mal il y a près de 15 ans, et avec l'aide d'un grand nombre de contributeurs, est basée actuellement sur une table adhérents contenant toutes les coordonnées, les cotisations et les cotisations dues (base Excel comme on me l'a dit une fois). C'était plus facile pour moi à l'époque...et cela marche parfaitement bien.
    Depuis quelques temps, j'essaye de la restructurer de manière "plus Access" en répartissant le tout entre différentes tables ; et là, tu t'en aperçois, je galère pas mal.

    Merci de ton aide.

    A+

    C15

  7. #7
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 129
    Par défaut
    Citation Envoyé par C15nantes Voir le message
    Mais je me pose la question suivante, lorsque je saisis un nouvel adhérent dans mon formulaire principal, comment est-il enregistré dans les tables T Cotisations et T cotisations dues ?
    Et bien justement, il n'y est enregistré que lorsqu'on saisit une cotisation !

    Pour qu'il apparaisse à la création d'un nouvel adhérent il faut créer aussi une ligne "cotisation due" par une instruction du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "INSERT INTO cotis_due (adherent, annee) VALUES (" & num_adherent & ",year(date()))", dbFailOnError

  8. #8
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    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 : 383
    Par défaut
    Bonjour,

    Je vais essayer cela car effectivement, lorsque je crée un nouvel enregistrement dans ma table T Adhérent, je veux qu'il soit aussi créé dans mes autres tables (T cotisations et T Cotisations dues) afin que je mette à jour ces données ; mais où placer cette procédure ?

    Merci de ton aide.

    A+
    C15

  9. #9
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 129
    Par défaut
    Citation Envoyé par C15nantes Voir le message
    lorsque je crée un nouvel enregistrement dans ma table T Adhérent
    A ce moment là. Soit tu as un bouton de validation "créer adhérent ok", soit avec l'évènement access idoine (personnellement je n'utilise pas cette 2e méthode car il est difficile de garantir ainsi des données de qualité).

    Citation Envoyé par C15nantes Voir le message
    je veux qu'il soit aussi créé dans mes autres tables (T cotisations et T Cotisations dues)
    Je ne vois pas l'intérêt de 2 tables ici : s'il doit une cotisation il suffit de marquer dans la table quand est-ce qu'il la paie...

    Enfin des espaces dans les noms de table ou champ ça ne fait pas très pro

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Bonsoir,

    En effet si à chaque création d'un adhérent tu souhaites que les enregistrements connexes se crée automatiquement il te faut employer la méthode de Nico.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Bonjour,

    Je ne voudrais pas paraître désagréable mais ce modèle de données me semble un peu "moisi".

    L'id de l'adhérent est suffisant dans la table cotisation, tous le reste est superflu, inutile voire pénalisant.

    Exemple :
    L'utilisateur qui a l'id 10, change de nom, rajoute son conjoint... l'id adhérent sera toujours valide dans cotisation mais le reste sera à modifier.

    Une règle importante sinon la première : Pas de redondance d'information dans une base de données. (sauf contrainte).

    Ici il n'y a aucune contrainte qui l'y oblige.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  12. #12
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    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 : 383
    Par défaut
    Bonjour Loufab,

    Tu as raison, il faut que je revois ma copie.
    La seule chose qu je vais garder en plus de l'ID, c'est la date d'adhésion, car c'est par rapport à elle qu'est basée une lourde procédure me permettant de n'afficher les cotisations qu'à partir de l'année d'adhésion.

    Merci pour tes conseils, bon dimanche
    C15

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    En effet la date est essentielle et très bien placée dans cette table. (y)

    Je pense qu'une fois le MCD assainie tu auras moins de difficulté pour faire vivre ton application.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

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

Discussions similaires

  1. Lier un sous-formulaire à un sous-formulaire
    Par bobosh dans le forum IHM
    Réponses: 2
    Dernier message: 02/03/2021, 11h45
  2. Réponses: 5
    Dernier message: 06/05/2015, 12h24
  3. Réponses: 2
    Dernier message: 24/06/2013, 09h31
  4. Réponses: 2
    Dernier message: 23/06/2013, 21h07
  5. Accéder à un sous-formulaire de sous-formulaire
    Par touftouf57 dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/11/2008, 19h04

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