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 :

Erreur 2105 / interception d'un DoCmd.GoToRecord , , acNewRec par un BeforeUpdate()


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Par défaut Erreur 2105 / interception d'un DoCmd.GoToRecord , , acNewRec par un BeforeUpdate()
    Bonjour,

    J'aun soucis d'erreur 2105 sur mon formulaire.

    Quand l'utilisateur clique sur le bouton "nouvel enregistrement", VBA se positionne sur la ligne nouvel enregistrement grâce au code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.GoToRecord , , acNewRec
    Se faisant il déclenche l’événement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub Form_BeforeUpdate(Cancel As Integer)
    qui vise à vérifier que l'utilisateur a bien rempli le formulaire.
    Si le formulaire n'est pas bien rempli, l'utilisateur peut choisir d'annuler sa saisie.
    C'est exactement ce que je veux.

    Problème, si l'utilisateur choisit "annuler", cela génère une erreur d’exécution 2105 au niveau de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.GoToRecord , , acNewRec
    qui j'imagine est court-circuitée.

    Comment résoudre le problème ?

    Je récapitule :
    - l'utilisateur créé un nouvel enregistrement. S'il sort d'Access (ou change d'enregistrement), Form_BeforeUpdate(Cancel As Integer) l’intercepte et lui laisse la possibilité de refaire sa saisie. Là, tout fonctionne.
    - si en revanche l'utilisateur décide de créer un 2eme enregistrement après le 1er, il clique sur nouvel enregistrement. DoCmd.GoToRecord , , acNewRec déclenche le Form_BeforeUpdate(Cancel As Integer) - ce qui est normal et bien, car cela permet de vérifier ce qui a été saisis. Sauf que si l'utilisateur choisit d'annuler sa saisie, j'ai le message d'erreur 2105.

    Je n'ai pas trouvé de solution...

    Merci par avance...


    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
     
    Option Compare Database
     
     
    Private Sub bouton_nouveau_Click()
     
        Me.AllowAdditions = True
        DoCmd.GoToRecord , , acNewRec
        MsgBox "AJOUT D'UN NOUVEL ENREGISTREMENT :" & vbCrLf & vbCrLf & "S'il s'agit d'un logement :" & vbCrLf & "- Indiquez le nom du programme/lotissement et le numéro du lot" _
        & vbCrLf & "- Indiquez le type de logements (individuel, collectif...) et le nombre de logements" & vbCrLf & "- Choisir ""Pas dans le RIL"" à la fin." _
        & vbCrLf & vbCrLf & "S'il s'agit d'un commerce :" & vbCrLf & "- Indiquer l'enseigne dans ""Complément""", vbInformation, "Saisie d'un nouvel enregistrement"
        Application.TempVars.Add "ActiverModeVerif", 1
     
    End Sub
     
    Public Sub Form_BeforeUpdate(Cancel As Integer)
     
    If Application.TempVars("ActiverModeVerif").Value = 1 Then
    Application.TempVars.Add "verif_count", 0
     
    If Not IsNull(Type_de_logements) Then
        If Nombre_de_logements.Value = 0 Then
        Application.TempVars.Add "verif_count", 1
        Application.TempVars.Add "verif_1", "- Vous avez saisi 0 logement;"
        End If
     
        If IsNull(Statut_RIL) Then
        Application.TempVars.Add "verif_count", 2
        Application.TempVars.Add "verif_2", "- Vous n'avez pas défini le statut du RIL (par défaut il faut indiquer ""Pas dans le RIL"");"
        End If
     
        If IsNull(Programme) Then
        Application.TempVars.Add "verif_count", 3
        Application.TempVars.Add "verif_3", "- Vous n'avez pas indiqué de lotissements ou de programme;"
        End If
    End If
     
        If Application.TempVars("verif_count").Value > 0 Then
     
            If MsgBox("Vous avez indiqué saisir un logement. Toutefois :" & vbCrLf & vbCrLf & Application.TempVars("verif_1").Value & vbCrLf & Application.TempVars("verif_3").Value _
            & vbCrLf & Application.TempVars("verif_2").Value & vbCrLf & vbCrLf _
            & "Choisir ""Annuler"" pour modifier l'enregistrement, ou ""OK"" pour le valider en l'état.", vbQuestion + vbOKCancel, "Vérification de votre enregistrement") = vbCancel Then
            Application.TempVars.RemoveAll
            Application.TempVars.Add "ActiverModeVerif", 1
            Cancel = True
            Else
            Application.TempVars.RemoveAll
            End If
     
        Else
     
            If MsgBox("Avez-vous terminé votre enregistrement ?" & vbCrLf & "Choisir ""Annuler"" pour le modifier.", _
            vbQuestion + vbOKCancel, "Validation requise") = vbCancel Then
            Application.TempVars.RemoveAll
            Application.TempVars.Add "ActiverModeVerif", 1
            Cancel = True
            Else
            Application.TempVars.RemoveAll
            End If
     
        End If
     
    End If
     
    End Sub

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2003
    Messages : 129
    Par défaut
    Bonjour,

    Pour éviter ça, je partirais plutôt sur l'option d'ajouter un nouvel enregistrement via un formulaire :
    • Ouverture d'un formulaire (style boite de dialogue) dédié à la création
    • Saisie dans le formulaire par l'utilisateur des champs indispensables
    • Si bouton Annuler : on sort sans rien faire
    • Si bouton Enregistrer : vérification de la bonne saisie et puis ouverture d'une msgbox "Etes-vous sûr ?" avec boutons oui/non
    • si choix "non" on ferme sans rien faire
  3. si choix "oui", on insère dans la table avec la commande docmd.runsql
  • Actualisation du formulaire

  • Une fois l'enregistrement créé, l'utilisateur aura tout loisir pour renseigner les champs "non indispensables"

    Voilà msieur

    + Répondre à la discussion
    ActualitésF.A.Q AccessF.A.Q VBATutoriels AccessSourcesOutilsLivresAccess TVOffice 2010

    Discussions similaires

    1. ou mettre le DoCmd.GoToRecord , , acNewRec ??
      Par decour dans le forum Access
      Réponses: 2
      Dernier message: 14/07/2017, 16h26
    2. Terminer un" DoCmd.GoToRecord , , acNewRec"
      Par xeron33 dans le forum VBA Access
      Réponses: 1
      Dernier message: 23/04/2017, 13h04
    3. DoCmd.GoToRecord et détection des erreurs de saisie
      Par aba_tarn dans le forum VBA Access
      Réponses: 12
      Dernier message: 26/07/2007, 09h44
    4. erreur 2493 docmd.GoToRecord
      Par aba_tarn dans le forum VBA Access
      Réponses: 6
      Dernier message: 14/06/2007, 16h05
    5. [Formulaire] Docmd.GotoRecord, erreur 2489
      Par timoth dans le forum IHM
      Réponses: 4
      Dernier message: 26/10/2006, 16h07

    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