Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2012, 23h13   #1
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 131
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 131
Points : 38
Points : 38
Par défaut Erreur d'exécution 3021

Bonjour à vous

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

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

Code :
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.
titi57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 07h50   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
Bonjour,

Code :
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.
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 07h56   #3
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


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 :
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., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 13h11   #4
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 131
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 131
Points : 38
Points : 38
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
titi57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h32.


 
 
 
 
Partenaires

Hébergement Web