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 d'exécution 3021 [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2009
    Messages : 169
    Points : 80
    Points
    80
    Par défaut Erreur d'exécution 3021
    Bonjour à vous

    J'ai une erreur d’exécution quand j'ouvre mon formulaire de recherche.

    Erreur d’exécutions '3021':
    aucun enregistrement en cours
    Quand je clique sur débogage il me donne :

    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
    Option Compare Database
    Option Explicit
     
    Function OuvrirQuoi(MonFormulaire)
    ' Cette fonction est appelée quand on clique sur un bouton.
    ' intBtn indique quand on clique sur un bouton.
     
    ' Constantes pour les commandes ne pouvant être exécutées.
        Const conCmdGotoSwitchboard = 1
        Const conCmdOpenFormAdd = 2
        Const conCmdOpenFormBrowse = 3
        Const conCmdOpenReport = 4
        Const conCmdCustomizeSwitchboard = 5
        Const conCmdExitApplication = 6
        Const conCmdRunMacro = 7
        Const conCmdRunCode = 8
     ' Erreur de case.
        Const conErrDoCmdCancelled = 2501
     
    Dim remarque, NomFormulaire
    Dim a As Long
     
    remarque = Forms(MonFormulaire)!ListeOption.Column(3) 'Argument
    NomFormulaire = Forms(MonFormulaire)!ListeOption.Column(2)
     
    Select Case Forms(MonFormulaire)!ListeOption.Column(1)
     Case "Form"
            Select Case Val(Forms(MonFormulaire)!ListeOption.Column(3))
            ' Ouvre un formulaire en mode ajout.
                Case conCmdOpenFormAdd
                    DoCmd.OpenForm Forms(MonFormulaire)!ListeOption.Column(2), , , , acAdd, , "A"
            ' Ouvre un formulaire en mode normal.
                Case conCmdOpenFormBrowse
                    DoCmd.OpenForm Forms(MonFormulaire)!ListeOption.Column(2)
            End Select
        Forms(NomFormulaire).Tag = remarque
        Forms(NomFormulaire).Caption = Forms(MonFormulaire)!ListeOption.Column(0)
     
     Case "Report"
       DoCmd.OpenReport Forms(MonFormulaire)!ListeOption.Column(2), acPreview
     Case "Function"
       DoCmd.RunMacro Forms(MonFormulaire)!ListeOption.Column(2)
     End Select
     
    End Function
     
    Function RassembleDisciplinesParPersonnes(v_clefpersonne) As String
    Dim rst As Recordset
    Dim MonSQL As String
    Dim i
    Dim temp As String
     
    MonSQL = "SELECT SousDiscipline FROM SousDisciplines INNER JOIN T_Lien_DisciplinePersonne "
    MonSQL = MonSQL & "ON SousDisciplines.ClefSousDiscipline = T_Lien_DisciplinePersonne.ClefSousDiscipline WHERE (ClefPersonne=" & v_clefpersonne & ")"
    Set rst = CurrentDb.OpenRecordset(MonSQL)
    rst.MoveLast
    rst.MoveFirst
        For i = 0 To rst.RecordCount - 1
            temp = temp & rst!SousDiscipline
            temp = temp & ","
            rst.MoveNext
        Next
    rst.Close
    If Right(temp, 1) = "," Then temp = Left(temp, Len(temp) - 1)
    RassembleDisciplinesParPersonnes = temp
    End Function
    rst.MoveLast (ligne 56) est souligné en jaune.

    Comment régler mon problème ?

    Bonne soirée.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set rst = CurrentDb.OpenRecordset(MonSQL)
    if Not rst.EOF then
     rst.MoveLast
     rst.MoveFirst
        For i = 0 To rst.RecordCount - 1
            temp = temp & rst!SousDiscipline
            temp = temp & ","
            rst.MoveNext
        Next
    End If
    rst.Close
    Vérifier que la requête retourne bien quelque chose.

  3. #3
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    D'où vient la valeur de v_clefPersonne ?
    As-tu vérifié que v_clefPersonne contient une valeur ?

    Il faudrait gérer le cas où le jeu d'enregistrements est vide plutôt que de faire un MoveLast en direct.

    Le MoveLast suivi d'un MoveFirst te permet de connaitre le nombre d'enregistrements récupérés dans ton RecordSet. Il te suffit de faire un test sur le RecordCount par rapport à 0 :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MonSQL = "SELECT SousDiscipline FROM SousDisciplines INNER JOIN T_Lien_DisciplinePersonne "
    MonSQL = MonSQL & "ON SousDisciplines.ClefSousDiscipline = T_Lien_DisciplinePersonne.ClefSousDiscipline WHERE (ClefPersonne=" & v_clefpersonne & ")"
    Set rst = CurrentDb.OpenRecordset(MonSQL)
    If rst.recordCount >0 then
        rst.MoveFirst
            For i = 0 To rst.RecordCount - 1
                temp = temp & rst!SousDiscipline
                temp = temp & ","
                rst.MoveNext
            Next
    End If
    rst.Close

    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  4. #4
    Membre régulier
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2009
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    bonjour

    j'ai trouvé mon problème

    quand le chant discipline été pas remplie cela me donne une erreurs

    merci a tous

    bonne week end

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

Discussions similaires

  1. Erreur d'exécution 3021
    Par edelweisseric dans le forum VBA Access
    Réponses: 0
    Dernier message: 18/11/2013, 15h32
  2. Erreur d'exécution '3021'
    Par Dryzik dans le forum VBA Access
    Réponses: 5
    Dernier message: 15/03/2009, 00h00
  3. Erreur d'exécution '3021'
    Par Angelo91 dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/08/2008, 19h12
  4. Erreurs d'exécution sous delphi 5
    Par nkd dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2004, 17h25
  5. [Apache Perl] Erreur à l'exécution de mes cgi
    Par GLDavid dans le forum Apache
    Réponses: 4
    Dernier message: 28/08/2004, 20h23

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