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 :

Fonction de contrôle de champs plante Access 2010


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut Fonction de contrôle de champs plante Access 2010
    bonjour à tous,

    Voici le code qui provoque un plantage d'access message en boucle "Access ne peut pas ouvrir plus de bases" ...

    Je pense que ça doit venir d'un manque de libération du recordset ou arrêt du compteur, mais je ne suis pas assez expert pour savoir "finir" ce code... Merci d'avance pour votre dévouement et expertise !

    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
    Public Function ControleChampsObligatoires()
     
        Dim recX As Recordset, FormX As Form, ctrlX As Control, fieldx As Field, NewLabel As Control
        Dim objAccess As AccessObject, blError_ChampInconnu As Boolean
        Dim blSuppr As Boolean
        Dim strMsg1 As String
        Dim strMsg2 As String
        Dim i As Integer
     
        i = 0
     
        Set FormX = Screen.ActiveForm     'Affectation du formulaire à la variable formX
     
            'Vérifions d'abord si le formulaire est lié à une source de données !
            If FormX.RecordSource <> "" Then
                Set recX = CurrentDb.OpenRecordset(FormX.RecordSource)
     
     
            For Each ctrlX In FormX.Controls    'balaye tous les contôles du formulaire
     
                If TypeName(ctrlX) = "Textbox" Or TypeName(ctrlX) = "Combobox" Then
     
                    If ctrlX.ControlSource <> "" Then    'le contrôle est lié à un champ
                        blError_ChampInconnu = False
                        On Error GoTo Err_ChampInconnu
                        Set fieldx = recX.Fields(ctrlX.ControlSource)    'Affectation du champ à la variable fieldX
                        On Error GoTo Err_Gest
                        If (Not fieldx.AllowZeroLength Or fieldx.Required) And blError_ChampInconnu = False Then  'Le champ doit être différent de Null ou la chaine ne peut être vide
     
                            If IsNull(ctrlX) = True Then
                    'Incrémente le compteur
                    i = i + 1
                    'Ajoute le nom du contrôle au message
                    strMsg1 = strMsg1 & vbCrLf & "    - " & ctrlX.Name
                    strMsg2 = ctrlX.Name
                    'Positionne le curseur sur le champs
                    ctrlX.SetFocus
                    'La fonction doit retourner faux
                    ControleChampsObligatoires() = False
                        End If
     
                    End If
     
                    End If
                End If
     
            Next
     
            If i > 1 Then
            'Display the error message
                MsgBox ("Les champs suivants sont obligatoires : " & strMsg1)
            ElseIf i = 1 Then
                MsgBox ("Le champ '" & strMsg2 & "' est obligatoire.")
    End If
     
            End If
     
     
    Exit Function
     
    Err_ChampInconnu:
    If Err.Number = 3265 Then
        blError_ChampInconnu = True 'Le champ est inconnu par exemple si ControlSource est une formule de calcul
        Resume Next
    End If
     
    Err_Gest:
        MsgBox Err.Description
     
     
    End Function

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 090
    Points : 5 207
    Points
    5 207
    Par défaut
    Bonsoir,

    Je pense qu'à la ligne 39 la présence de parenthèses fait que "ControleChampsObligatoires" est exécuté au lieu d'être valorisé, le code devient donc infini

    Il manque aussi des set xxx = nothing mais ce n'est pas bloquant
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Merci beaucoup pour ta réponse, c' était effectivement cela, ça marche impec !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 30/04/2015, 16h43
  2. Réponses: 2
    Dernier message: 30/11/2011, 21h13
  3. Réponses: 5
    Dernier message: 23/11/2010, 12h36
  4. [AC-2010] Fonctions de domaines Access 2010
    Par bremmo76 dans le forum Access
    Réponses: 0
    Dernier message: 26/04/2010, 22h31
  5. Office 2010 : vidéo sur les champs calculés Access 2010
    Par Maxence HUBICHE dans le forum Access
    Réponses: 18
    Dernier message: 11/01/2010, 03h27

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