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 :

Remplir un champs d'une table automatiquement via un autre champs de la même table [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut Remplir un champs d'une table automatiquement via un autre champs de la même table
    Bonjour la communauté,

    j'ai un code au sein de ma base qui me permets de me prévenir lorsque j'oubli de remplir un de mes champs lors de l'enregistrement d'un mouvement.
    Ce code est incorporé dans mon formulaire :
    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
    Option Compare Database
     
    Private Sub Form_AfterUpdate()
    If Not IsNull(Me.DateMvt) And IsNull(Me.LibelleMvt) Then
        MsgBox "Vous avez oublié de saisir un libellé !"
        Me.LibelleMvt.SetFocus
        Exit Sub
    End If
    If Not IsNull(Me.DateMvt) And IsNull(Me.MontantMvt) Then
        MsgBox "Vous avez oublié de saisir un montant !"
        Me.MontantMvt.SetFocus
        Exit Sub
    End If
    If Not IsNull(Me.DateMvt) And IsNull(Me.Paiement) Then
        MsgBox "Vous avez oublié de saisir un moyen de paiement !"
        Me.Paiement.SetFocus
        Exit Sub
    End If
    If Not IsNull(Me.DateMvt) And IsNull(Me.CodeJrnl) Then
        MsgBox "Vous avez oublié de saisir un code de journal!"
        Me.CodeJrnl.SetFocus
        Exit Sub
    End If
    If Not IsNull(Me.DateMvt) And IsNull(Me.CodeSsJrnl) Then
        MsgBox "Vous avez oublié de saisir un code de sous journal!"
        Me.CodeSsJrnl.SetFocus
        Exit Sub
    End If
    If (Me.Paiement) = "Chèque" And IsNull(Me.NumChq) Then
        MsgBox "Vous avez oublié de saisir le numéro de chéque correspondant!"
        Me.NumChq.SetFocus
        Exit Sub
    End If
    If (Me.Paiement) = "Chèque" Or (Me.Paiement) = "Espèces" Or (Me.Paiement) = "Espèces et chèque" Then
        Me.EnAttente = True
    End If
    If (Me.CodeJrnl) <> Left(Me.CodeSsJrnl, Len(Me.CodeJrnl)) Then
        MsgBox "Le code Journal ne correspond pas au code sous journal"
    End If
     
    End Sub
    Voici une ligne d'enregistrement pour voir un rendu :
    Nom : Capture x.PNG
Affichages : 179
Taille : 14,2 Ko


    Pour information, le code de contrôle ci-dessus fonctionne à merveille, grâce à la communauté du forum.

    Mais je me suis poser diverses réflexions sur ce formulaire afin de l'automatiser pour éviter tout risque d'erreur lors de la saisie d'un mouvement.
    Donc, je me suis dit pourquoi faire un code de contrôle au lieu d'exécuter cette tâche automatiquement, au lieu de l'exécuter manuellement.
    Car lorsque je change mon CodeSsJrnl de ma ligne de saisie je dois également changer le CodeJrnl.
    Donc via une automatisation, j'aimerai que le CodeJrnl se remplit automatiquement via le CodeSsJrnl.
    C'est-à-dire si le CodeSsJrnl est ADEPXX alors il indique ADEP en CodeJrnl, de même pour AREVXX, il indique directement AREV.

    Un code journal se compose de trois ou quatre lettres, et un code sous-journal reprend les lettres du code journal suivi de deux chiffres.
    Par exemple pour le code journal " ADEP " on a comme sous journal ADEP01; ADEP02, pour le code journal "LOG" on a comme sous journal LOG01, LOG02...

    Donc pour essayer de réussir à intégrer cette automatisation je pars sur un code qui commence par la droite, à partir du troisième caractère il débute l'extraction des caractères afin d'éliminer les deux chiffres.

    J'aurais fait ceci en code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (Me.CodeJrnl) = Right(Me.CodeSsJrnl, 3)
    Mais peut-on mettre ceci dans la même procédure de contrôle aussi ? Car il faut peut-être déclarer les variables des champs, vu que l'on ne fait plus un contrôle mais une automatisation ?

    Je remercie la communauté pour son aide.

    Bonne journée à vous,

    Bien cordialement,
    Benjamin.

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 640
    Points : 14 615
    Points
    14 615
    Par défaut
    Bonsoir
    En supposant que les journaux sont créés en amont de la création des sous-journaux, je ferai comme cela :
    - inverser les 2 champs dans le sous-formulaire (en mode création dans le ruban, bouton "Ordre de tabulation")
    - mettre la propriété activé du code journal à Non pour le rendre non modifiable
    - sur l'évènement Click du code sous-journal mettre ce code qui mettra automatiquement à jour le code journal :
    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
     
    Private Sub CodeSsJrnl_Click()
    Dim oRst As Recordset
    Dim oDb As Database
    Dim stSql As String
    Set oDb = CurrentDb
     
    stSql = "SELECT DISTINCT Journal.CodeJrnl FROM SousJournal, Journal" & _
            " WHERE Journal.CodeJrnl=Left([SousJournal].[CodeSsJrnl],Len([Journal].[CodeJrnl])) AND [SousJournal].[CodeSsJrnl]='" & Me.CodeSsJrnl & "';"
    Set oRst = oDb.OpenRecordset(stSql)
     
    oRst.MoveLast
    If oRst.RecordCount <> 0 Then Me.CodeJrnl = oRst.Fields("CodeJrnl")
    oRst.Close
    oDb.Close
    Set oRst = Nothing
    Set oDb = Nothing
     
    End Sub
    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 régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonsoir tee_grandbois,

    j'ai respecté les instructions, et le code ne fonctionne pas par contre.

    Je n'ai aucun message d'instruction qui s'affiche.

    Bien cordialement,
    Benjamin.

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 640
    Points : 14 615
    Points
    14 615
    Par défaut
    Bizarre, j'ai testé le code. Peux-tu poster la base ?
    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 régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bizarre, j'ai testé le code. Peux-tu poster la base ?
    Le problème doit venir de la base d’essai, car je viens de l'implanter dans ma vrai base de données, et effectivement, le code fonctionne correctement.

    Excuse-moi pour ce désagrément.

    Merci pour ton aide et les explications.

    Bien cordialement,
    Benjamin.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour tee,

    je viens de voir un petit désagrément dans le code effectué quand je viens d'enregistrer des lignes de mouvements.

    Pour que le code journal se met automatique, il faut obligatoirement effectuer un clique dans la case CodeSsJrnl, serait-il possible que le code journal se met automatiquement sans à avoir faire un clique sur le champ CodeSsJrnl ?

    Voici un rendu d'une ligne d'enregistrement :
    Nom : ligne.JPG
Affichages : 167
Taille : 15,1 Ko

    Dans l'attente de te lire, bonne soirée.

    Bien cordialement,
    Benjamin.

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 640
    Points : 14 615
    Points
    14 615
    Par défaut
    Bonjour,
    tu te fiches de moi ? il ne s'agit pas du même sous-formulaire, il te faut juste reporter le même code dans le sous-formulaire en question.
    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 ?

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bonjour,
    tu te fiches de moi ? il ne s'agit pas du même sous-formulaire, il te faut juste reporter le même code dans le sous-formulaire en question.
    Bonjour,

    le code était bien placé.

    Mais j'ai retrouvé comment régler le problème, je l'ai placé lorsque je clique sur la date pour éviter de toujours effectuer un clique sur le CodeSsJrnl.

    Je suis désolé si tu as mal comprit ma question.

    Bien cordialement,
    Benjamin.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/01/2013, 11h22
  2. Réponses: 4
    Dernier message: 02/05/2012, 15h02
  3. Remplir un champ texte automatiquement via un autre champ texte
    Par Maxime50 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/08/2009, 12h54
  4. Réponses: 1
    Dernier message: 15/06/2007, 00h00
  5. UPDATE d'une table avec test d'un champ d'une autre table
    Par delphim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2004, 12h30

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