Événement Form.BeforeUpdate (Access)
L’événement BeforeUpdate se produit avant que les données modifiées d’un contrôle ou d’un enregistrement soient mises à jour.
Syntaxe
expression. BeforeUpdate (Annuler)
expressionVariable qui représente un objetForm.
Parameters
Nom | Requis/Facultatif | Type de données | Description |
---|---|---|---|
Cancel | Obligatoire | Entier | Le paramètre détermine si l'événement BeforeUpdate se produit. La définition de l’argument Cancel sur True (1) annule l’événement BeforeUpdate . |
Remarques
Modification des données dans un contrôle à l'aide de Visual Basic ou une macro contenant l'action DéfinirValeur ne déclenche pas ces événements pour le contrôle. Toutefois, si vous déplacez vers un autre enregistrement ou enregistrez l'enregistrement, l'événement BeforeUpdate du formulaire se produit.
Pour exécuter une macro ou une procédure événementielle lorsque cet événement se produit, définissez la propriété BeforeUpdate sur le nom de la macro ou sur [Procédure événementielle].
Cet événement ne s'applique pas aux boutons d'options, cases à cocher, boutons bascule d'un groupe d'options. Il s'applique uniquement au groupe d'options lui-même.
L'événement BeforeUpdate est déclenché lorsqu'un contrôle ou un enregistrement est mis à jour. Dans un enregistrement, les données modifiées dans chaque contrôle sont mises à jour lorsque le contrôle perd le focus ou lorsque l’utilisateur appuie sur Entrée ou Tab. Lorsque le focus quitte l’enregistrement ou si l’utilisateur clique sur Enregistrer l’enregistrement dans le menu Enregistrements , l’enregistrement entier est mis à jour et les données sont enregistrées dans la base de données.
Lorsque vous entrez des données nouvelles ou modifiées dans un contrôle sur un formulaire, puis que vous passez à un autre enregistrement ou que vous enregistrez l’enregistrement en cliquant sur Enregistrer l’enregistrement dans le menu Enregistrements , l’événement AfterUpdate du formulaire se produit immédiatement après l’événement AfterUpdate pour le contrôle.
Lorsque vous passez à un autre enregistrement, les événements Exit et LostFocus du contrôle se produisent, suivis de l’événement Current pour l’enregistrement vers lequel vous avez déplacé et des événements Enter et GotFocus pour le premier contrôle de cet enregistrement. Pour exécuter la macro ou la procédure événementielle AfterUpdate sans exécuter les macros ou procédures événementielles Exit et LostFocus, sauvegardez l'enregistrement avec la commande Sauvegarder enregistrement du menu Enregistrements.
Les macros et les procédures événementielles BeforeUpdate s'exécutent uniquement si vous modifiez les données d'un contrôle. Cet événement ne se produit pas lorsqu'une valeur change dans un contrôle calculé. Les macros et procédures d'événement BeforeUpdate d'un formulaire sont exécutées uniquement si vous modifiez les données d'un ou plusieurs contrôles de l'enregistrement.
Pour les formulaires, vous pouvez utiliser l'événement BeforeUpdate pour annuler la mise à jour d'un enregistrement avant de passer à un autre enregistrement.
Si l'utilisateur entre une nouvelle valeur dans le contrôle, le paramètre de propriété OldValue n'est pas modifié tant que les données n'ont pas été enregistrées (et que l'enregistrement n'a pas été mis à jour). Si vous annulez une mise à jour, la valeur de la propriété OldValue remplace la valeur existante du contrôle.
Vous utilisez souvent l'événement BeforeUpdate pour valider des données, notamment lors de validations complexes, telles que :
- Celles qui sont liées à des conditions qui dépendent de plusieurs valeurs dans le formulaire.
- Celles qui affichent des messages d'erreur différents en fonction des données entrées.
- Celles que l'utilisateur peut supplanter.
- Celles qui contiennent des références à des contrôles d'autres formulaires ou des fonctions définies par l'utilisateur.
Remarque
[!REMARQUE] Pour effectuer des validations simples ou des validations plus complexes exigeant la valeur d'un champ ou validant plusieurs contrôles sur un formulaire, vous pouvez utiliser la propriété ValidationRule pour les contrôles et les propriétés ValidationRule et requis pour les champs et les enregistrements de tables.
Une erreur d’exécution se produit si vous tentez de modifier les données contenues dans le contrôle qui a déclenché l’événement BeforeUpdate dans la procédure de l’événement.
Exemple
L’exemple suivant montre comment vous pouvez utiliser une procédure événementielle BeforeUpdate pour vérifier si un nom de produit a déjà été entré dans la base de données. Une fois que l’utilisateur a tapé un nom de produit dans la zone ProductName, la valeur est comparée au champ ProductName de la table Products. Si une valeur correspondante existe dans la table Products, un message informe l’utilisateur que le produit a déjà été entré.
Pour tester l’exemple, ajoutez la procédure événementielle suivante à un formulaire nommé Products contenant une zone de texte appelée ProductName.
Private Sub ProductName_BeforeUpdate(Cancel As Integer)
If(Not IsNull(DLookup("[ProductName]", _
"Products", "[ProductName] ='" _
& Me!ProductName & "'"))) Then
MsgBox "Product has already been entered in the database."
Cancel = True
Me!ProductName.Undo
End If
End Sub
L’exemple suivant permet d’afficher un message quand un contrôle est vide dans un formulaire continu lorsqu’un utilisateur passe à un autre enregistrement.
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim oContr As Control
For Each oContr In Me.Detail.Controls
If IsNull(oContr) = True Then
If MsgBox(oContr.Name & " is empty", vbOKCancel) = vbCancel Then
Cancel = True: oContr.SetFocus: Exit Sub
End If
End If
Next oContr
End Sub
L’exemple suivant montre comment utiliser l’événement BeforeUpdate d’un formulaire pour demander à ce qu’une valeur soit entrée dans un des contrôles quand un autre contrôle inclut également des données.
Private Sub Form_BeforeUpdate(Cancel As Integer)
If (IsNull(Me.FieldOne)) Or (Me.FieldOne.Value = "") Then
' No action required
Else
If (IsNull(Me.FieldTwo)) or (Me.FieldTwo.Value = "") Then
MsgBox "You must provide data for field 'FieldTwo', " & _
"if a value is entered in FieldOne", _
vbOKOnly, "Required Field"
Me.FieldTwo.SetFocus
Cancel = True
Exit Sub
End If
End If
End Sub
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.