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

IHM Discussion :

Comment exécuter du code en changeant d'enregistrement...


Sujet :

IHM

  1. #1
    Zet
    Zet est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Comment exécuter du code en changeant d'enregistrement...
    Allô !
    Je m'explique. Est-ce que c'est possible d'exécuter une fonction ou qqchose quand on clique sur le sélecteur d'enregistrements...? Ou bien je dois absoluement créer un bouton pour naviguer entre les enregistrements et faire mon code à partir de ce bouton ?

  2. #2
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Tout dépend de tes besoins.
    Normalement, l'événement Sur Activation devrait te suffir.

    Sinon tu peux créer tes propres boutons de navigation : http://www.developpez.net/forums/vie...527859#1527859

  3. #3
    Zet
    Zet est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    En fait, je suis dans un formulaire, sur un enregistrement donné. Avant d'aller à l'autre enregistrement, je veux valider les champs du formulaire (il ne faut pas qu'ils soient vides). On m'a demandé d'utiliser les boutons existants, i.e., le sélecteur d'enregistrements. Donc, à quel moment dois-je faire éxécuter mon code. Si je le fais Sur Activation, il vérifie l'enregistrement suivant. Moi je veux qu'il valide l'enregistrement actuel, quand je passe à un autre enregistrement...

    Merci

  4. #4
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Lorsque tu cliques sur le sélecteur d'enregistrement ou sur un des boutons de navigation prédéfinis, Access tente de mettre à jour les données affichées dans l'enregistrement courant.

    La solution la plus simple pour contrôler la saisie est de définir directement dans ta table la propriété Null Interdit à Oui pour chaque champ qui ne doit pas être vide.

    Ainsi ton formulaire générera automatiquement une erreur récupérable dans son événement OnError (sur erreur) si un champ nécessitant une valeur est vide alors que tu essaies de mettre à jour l'enregistrement dans la base.

    Voici un exemple de code permettant de gérer cette erreur (t d'autres liées au contrôle de la saisie ) en avertissant l'utilisateur et en plaçant le focus sur le champ incriminé :

    Dans le form :
    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
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
      Response = acDataErrContinue
      Select Case DataErr
        Case 2107, 2116 'Non respect des règles de validation
          FormattedMsgBox "Données non valides.@" & _
          Me.ActiveControl.ValidationText & "@" & _
          "Vous pouvez appuyez sur ÉCHAP pour annuler vos modifications.@", vbCritical, TA
          Me.ActiveControl.Undo
        Case 2113, 2279   'saisie / format incorrect
          FormattedMsgBox "Données non valides.@" & _
          Me.ActiveControl.ValidationText & "@" & _
          "Vous pouvez appuyez sur ÉCHAP pour annuler vos modifications.@", vbCritical, TA
          Me.ActiveControl.Undo
        Case 3101, 3314 'intégrité réf / champ null
          fNomContrôleNull Me
        Case 2237 'Absence dans liste
          FormattedMsgBox "Le texte entré n'est pas un élément de la liste.@" & _
          "Sélectionnez un élément de la liste ou entrez un texte qui correspond à un des éléments de la liste ou appuyez sur ÉCHAP pour annuler vos modifications.@", vbCritical, TA
          Me.ActiveControl.Dropdown
        Case 3162 'Absence dans liste mais saisie nulle
          FormattedMsgBox "Vous n'avez saisi aucune valeur.@" & _
          "Sélectionnez un élément de la liste ou entrez un texte qui correspond à un des éléments de la liste ou appuyez sur ÉCHAP pour annuler vos modifications.@", vbCritical, TA
          Me.ActiveControl.Dropdown
        Case Else
          MsgBox DataErr & ". " & vbCrLf & Application.AccessError(DataErr), vbCritical
      End Select
    End Sub
    Dans un module :
    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
    Function fNomContrôleNull(frm As Form) As String
    'Renvoie le nom d'un contrôle dont la valeur est null mais requise.
    'Par FRED.G _ developpez.com
    Dim ctl As Control
     
    On Error Resume Next
     
      If Not fCtlNullàMaj(frm, frm.ActiveControl, True) Then
        For Each ctl In frm.Controls
          If fCtlNullàMaj(frm, ctl) Then
            With ctl
              FormattedMsgBox "Impossible d'exécuter l'opération demandée.@" & _
                "Une valeur est requise pour le champ """"" & _
                .StatusBarText & """""." & vbCrLf & _
                "Vous devez saisir une valeur ou annuler vos modifications en appuyant sur ÉCHAP.@", vbCritical, TA
                .SetFocus
                If .ControlType = acComboBox Then .Dropdown
              fNomContrôleNull = .Name
            End With
            Exit Function
          End If
        Next ctl
      Else
        With frm.ActiveControl
          FormattedMsgBox "Impossible d'exécuter l'opération demandée.@" & _
            "Une valeur est requise pour le champ """"" & _
            .StatusBarText & """""." & vbCrLf & _
            "Vous devez saisir une valeur ou annuler vos modifications en appuyant sur ÉCHAP.@", vbCritical, TA
          If .ControlType = acComboBox Then .Dropdown
          fNomContrôleNull = .Name
        End With
      End If
     
    Exit Function
     
    ' Bloc de gestion d'erreurs ajouté par le complément Commentaire de code et Gestionnaire d'erreurs VBA. NE MODIFIEZ PAS ce bloc de code.
    GestionErr:
      Select Case Err.Number
        '2474 : L'expression entrée requiert que le contrôle se trouve dans la fenêtre active.
        '438  : Propriété ou méthode non gérée par cet objet.
        Case 2474, 438
          Set frm = Nothing
        Case Else
          MsgBox "Erreur " & Err.Number & " : " & Err.Description, vbCritical, "mdu.fRenvoieContrôleNull"
          Set frm = Nothing
      End Select
    ' Fin du bloc de gestion d'erreurs.
     
    End Function
     
     
     
    Function fCtlNullàMaj(frm As Form, ctl As Control, Optional Actif As Boolean) As Boolean
    'Par FRED.G _ developpez.com
    On Error Resume Next
      If Actif Then
        fCtlNullàMaj = (Len(ctl.Text) = 0) And frm.Recordset.Fields(ctl.ControlSource).Required
      Else
        fCtlNullàMaj = IsNull(ctl.Value) And frm.Recordset.Fields(ctl.ControlSource).Required
      End If
     
    End Function
     
     
    Function FormattedMsgBox(Prompt As String, _
                            Optional Buttons As VbMsgBoxStyle = vbOKOnly, _
                            Optional Title As String = vbNullString, _
                            Optional HelpFile As Variant, _
                            Optional Context As Variant) As VbMsgBoxResult
     
    On Error GoTo GestionErr
     
      If IsMissing(HelpFile) Or IsMissing(Context) Then
        FormattedMsgBox = Eval("MsgBox(""" & Prompt & """, " & Buttons & ", """ & Title & """)")
      Else
        FormattedMsgBox = Eval("MsgBox(""" & Prompt & """, " & Buttons & ", """ & Title & """, """ & _
                                HelpFile & """, " & Context & ")")
      End If
     
    Exit Function
     
    ' Bloc de gestion d'erreurs ajouté par le complément Commentaire de code et Gestionnaire d'erreurs VBA. NE MODIFIEZ PAS ce bloc de code.
    GestionErr:
      Select Case Err.Number
        Case Else
           MsgBox "Erreur " & Err.Number & " : " & Err.Description, vbCritical, "mdu.FormattedMsgBox"
      End Select
    ' Fin du bloc de gestion d'erreurs.
     
    End Function

  5. #5
    Zet
    Zet est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Je te remercie. J'essaie ça et je redonne des nouvelles !

  6. #6
    120
    120 est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Points : 62
    Points
    62
    Par défaut
    sinon chaque champ lié a un évennement avantMAJ (beforeUpdate) qui se déclenche automatiquement avant l'enregistrement...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    oui, j'aurais dit ça aussi: beforeUpdate

  8. #8
    Zet
    Zet est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Je vous remercie !!Bonne journée ou bonne fin de journée, où que vous soyiez !!
    :D

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

Discussions similaires

  1. [Animation] Comment exécuter du code à la fin d'une animation ?
    Par Finality dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 12/10/2008, 11h44
  2. Comment exécuter du code VBA
    Par Alexandre` dans le forum VB.NET
    Réponses: 12
    Dernier message: 04/12/2007, 14h13
  3. Réponses: 44
    Dernier message: 02/08/2006, 16h12
  4. VBA-E comment exécuter un code sur un classeur complet?
    Par djulegnome dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/06/2006, 12h29
  5. Réponses: 7
    Dernier message: 30/03/2006, 15h43

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