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 08/02/2011, 11h09   #1
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Par défaut Erreur 3048 Aide pour modif code

Bonjour le forum

En recherchant sur le forum, j' ai trouvé un code qui peut m' être utile, ce code permet de générer une alerte.
Si cette date est a moins de 6 jours de la date du jours et que le champs « EtatRdv est en attente » je veux avoir une boite de dialogue,
a l’ouverture de la base m’indiquent les RDV en attente.
J' ai fait une petite transformation pour ma table. Le champ EtatRdv prendra 4 valeurs (Liste de valeur), un champ Date
Voici le code

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
Private Function ExaminerValeurCdes() As Boolean
Const CLOTURE As String = "Clôturé"
Const ATTENTE As String = "En attente"
Const ANNULE As String = "Annulé"
Const REPORTE As String = "Reporté"
 
Dim oRS As DAO.Recordset
Dim strSQLExamenCdes As String
Dim dtmDate As Date
 
  strSQLExamenCdes = "SELECT Date, EtatRdv FROM RDV"
 
  Set oRS = CurrentDb.OpenRecordset(strSQLExamenCdes, dbOpenDynaset)
 
    With oRS
      Do While Not .EOF
         Select Case .Fields("EtatRdv")
            Case CLOTURE, ATTENTE
              AfficherAlerte = True
              Exit Do
         End Select
         If .Fields("EtatRdv") + 6 >= Now Then
            AfficherAlerte = True
            Exit Do
         End If
        .MoveNext
      Loop
    End With
  Set oRS = Nothing
End Function
Je me pose une question, Les select case ont il un rapport avec des cases à Option ? (Pour continuer la transformation du code)
Moi j' ai mis une liste de valeur
mais je ne suis pas encore arrivé jusque la, car au lancement d'un premier test , j'ai un méssage d' erreur 3048
impoosible d' ouvrir plus de bases de données.
Merci d' avance pour toute aide
Aladin
Aladin_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 11h45   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour Aladin_23,

Non, le SELECT CASE Exécute un des blocs d'instructions indiqués, selon la valeur d'une expression. Il permet de structurer plus facilement qu'une suite de IF... THEN ... ELSE

Concernant le code 3048, est-ce que ta base est issue d'une conversion d'une version antérieure de Access ?
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 11h55   #3
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
En regardant plus attentivement ta fonction, je me deamande si l'origine de ton erreur ne viendrait pas dans le fait qu'à chaque fois tu ouvre un recordset complet dans le refermer (instruction rs.close absente, et je ne pense pas que d'instancier le oRS à nothing referme effectivement de recordset).

De plus, je n'arrive pas à comprendre coment cela marchera.
En effet, ta fonction ouvre à chaque fois un recordset basé sur ta table RV, et non sur un enegistrement particulier (pas de clause WHERE), alors que, justement, tu recherches une valeur pariculière sur un enregistrement précis.

Telle qu'elle est codée, ta fonction lira toujours le 1er enregistrement, et sortira avant le .movenext (exit do), qui, lui, ne sert à rien ...
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 18h25   #4
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Bonsoir dumas.blr et le forum
Merci pour tes conseils, je vais essayé de corriger mon code
Aladin
Aladin_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 18h24   #5
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Je suis parvenu à une solution mais qui n' est pas très élégante
J' ai crée un forulaire d' alerte avec comme source une requete du type
Code :
1
2
3
4
SELECT Nz([Date]) AS [Date Evenement], RDV.EtatRdv, RDV.RDV, RDV.Type_Visite
FROM RDV
WHERE (((Nz([Date]))>=Date()+30))
ORDER BY Nz([Date]);
Le test est correcte il affiche les données, mais si il n' y a pas de données,
le formulaire plante.
Quel solution dois je appliqué, ou n' y a t il pas moyen de modifié la fonction précédente
avec la modif du select que j' ai faite
Merci d' avance pour toute aide
Aladin
Aladin_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 20h49   #6
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonsoir à tous
Essayons comme ça pour voir:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Function ExaminerValeurCdes()
Dim oRS As DAO.Recordset
Dim strSQLExamenCdes As String
Dim Message As String
Dim n As byte
strSQLExamenCdes = "SELECT Date, EtatRdv, RDV, Type_Visite FROM RDV WHERE Date >= Date()+30 ORDER BY Date;"
If oRS.RecordCount > 0 Then
    Message = ""
    n=0
    oRS.MoveFirst
    Do While Not oRS.EOF
         Message = Message & oRS!DATE & " *** " & oRS!EtatRdv & " *** " & oRS!RDV & " *** " & oRS!Type_Visite & vbcrlf 
        oRS.MoveNext
        n = n + 1
        If n > 4 Then Exit Do
    Loop
    MsgBox Message, vbExclamation, "Mon appli"
    Else
        MsgBox "Aucune donnée renvoyée par votre requête.", vbInformation, "Mon appli"
End If
oRS.Close
Set oRS = Nothing
End Function
Si ça marchait, le mieux serait de créer un sous formulaire dans lequel tu enverais le resultat de ta requête.
J'ai dû limiter à 4 le message affiché (If n > 4 Then Exit Do) sinon avec 10 enregistrements ou plus, je crains que le msbox ne couvre tout l'écran.

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 23h22   #7
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
autre solution

dans l'évènement form_open, tu testes avec ta requête le nombre d'enregistrements retournés (avec un COUNT par ex.)

si ne nb est = à 0 alors tu mets le cancel à true et l'ouverture du formulaire est annulée.
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h37   #8
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Bonjour dumas.blr, keita et le forum
En fin de compte j' ai abandonné l' idée dur formulaire
et adopté la solution du msgbox , j' ai rajouté cette ligne dans le code
Code :
Set oRS = CurrentDb.OpenRecordset(strSQLExamenCdes4, dbOpenDynaset)
car il manquait la définition de la variable
tout est ok
un grand Merci a vous deux pour vos conseils
Aladin
Aladin_23 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 07h51.


 
 
 
 
Partenaires

Hébergement Web