Vos recrutements informatiques

700 000 développeurs, chefs de projets, ingénieurs, informaticiens...

Contactez notre équipe spécialiste en recrutement

FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireFormulairesDonnéesModification et ajout de données

Comment interdire les :

Modifications :

 
Sélectionnez
Me.AllowEdits = False 

Ajouts :

 
Sélectionnez
Me.AllowAdditions = False

Suppressions :

 
Sélectionnez
Me.AllowDeletions = False

Une autre possibilité est définir la propriété du Recordset du formulaire à Instantané.

Créé le 3 septembre 2004  par Demco, Tofalu
 
Sélectionnez
Me.sF_SousForm.Form.AllowEdits = False
Créé le 3 septembre 2004  par Demco

Il ne faut pas faire un formulaire lié.
Méthode

  • Créer formulaire déconnecté
  • Créer un Recordset
  • Afficher les données du Recordset dans le formulaire
  • Faire autant de boutons que d'actions dans votre formulaire (Validation, Suppression, Suivant, Précédent...). À chaque bouton correspond bien sûr une action (Requête de suppression, d'ajout...).
Créé le 29 décembre 2003  par Team Access

Lien : Comment créer un jeu de données (Recordset) ?

Pour qu'Access n'enregistre pas les modifications faites dans un formulaire, il faut utiliser l'événement BeforeUpdate et y placer la ligne suivante :

 
Sélectionnez
Cancel = True
Créé le 29 décembre 2003  par Team Access

Il faut mettre le message de confirmation sur l'événement "BeforeUpdate" du formulaire :

 
Sélectionnez

Private Sub Form_BeforeUpdate(Cancel As Integer)
  If MsgBox("Voulez-vous confirmer la modification", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
    Me.undo
    Cancel = true
  End if
End Sub
Créé le 20 novembre 2005  par BrunoM45

Voici le code généré par Access à l'aide de l'assistant de création de bouton.

 
Sélectionnez

Private Sub btnSuppr_Click()
On Error GoTo Err_btnSuppr_Click


    DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
    DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

Exit_btnSuppr_Click:
    Exit Sub

Err_btnSuppr_Click:
    MsgBox Err.Description
    Resume Exit_btnSuppr_Click
    
End Sub

Vous devinerez donc que ce sont les lignes suivantes qui suppriment l'enregistrement :

 
Sélectionnez

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
Créé le 20 novembre 2005  par Demco

Access n'enregistre les modifications ou les nouvelles données qu'après changement d'enregistrement.

Voici le code permettant d'obliger Access à sauvegarder les modifications portées à l'enregistrement actuel :

 
Sélectionnez
DoCmd.RunCommand acCmdSaveRecord
Créé le 1er avril 2004  par Arkham46

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

L'événement Form_Error (Sur erreur) est levé à chaque erreur du formulaire. C'est donc dans cet événement que va se dérouler le traitement de correction.

Étape 1 : vérifier l'erreur qui est levée. Celle qui nous concerne est 3022, risque de doublons. Étape 2 : on récupère le jeu de données du formulaire (puisque c'est ici que figure la quantité déjà validée). Étape 3 : on se positionne sur le bon enregistrement (en fonction de numCommande et NumProduit). Étape 4 : si l'enregistrement existe (normalement il existe sinon l'erreur n'aurait pas eu lieu, mais on n'est jamais assez prudent), dans ce cas on met à jour sa quantité. C'est à dire : quantité avant + nouvelle quantité. Étape 5 : on annule la saisie de l'utilisateur, on recharge le formulaire et enfin, on dit à VBA que l'erreur a été corrigée (acDataErrContinue).

 
Sélectionnez
Private Sub Form_Error(DataErr As Integer, Response As Integer)
 
Dim oRst As DAO.Recordset
If DataErr = 3022 Then
    Set oRst = Me.RecordsetClone
    With oRst
        .FindFirst "NumProduit=" & Me.NumProduit & " AND NumCommande=" & Me.NumCommande
        If Not .NoMatch Then
            .Edit
            .Fields("Qte").Value = .Fields("Qte") + Me.Qte
            .Update
            Me.Undo
            Me.Requery
            Response = acDataErrContinue
        End If
    End With
    Set oRst = Nothing
    
End If
End Sub


Ici la structure de ma table était : NumCommande,NumProduit,Qte.
Les champs du formulaire étaient nommés pareil.

Créé le 14 octobre 2007  par Tofalu

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.