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 26/07/2011, 10h24   #1
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 63
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 63
Points : 27
Points : 27
Par défaut Fonction de suppression de requête non fonctionnelle

Bonjour,

Je reviens vers vous car il m'arrive un petit soucis avec une fonction de suppression de requête. Je me sers de cette fonction à la suite d'un export vers excel d'un résultat de requête contenu dans ma listbox "lstResults".
L'export est fonctionnel comme je le souhaite mais pas la suppression de la requête qui me renvoie le message d'erreur: "La requête n'existe pas"

Fonction d'export:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub btnExport_Click()
    Dim SQL As String
    Dim NomQDF As String
 
    SQL = Me.lstResults.RowSource
 
    'Faites ici tous vos tests pour vous assurer d'un nom valide pour la requête à créer :
    NomQDF = InputBox("Entrer un nom pour la recherche en cours:")
    If NomQDF = "" Then
    MsgBox "Vous n'avez pas indiqué de nom valide pour la requête."
    Exit Sub
    End If
 
    'Création de la requête
    CurrentDb.CreateQueryDef NomQDF, SQL
 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, NomQDF, "C:\TMP\toto.xls"
 
    Call suppRequete
End Sub
Fonction de suppression:
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
Public Function suppRequete()
'Gestion d'erreur
On Error GoTo err
 
    Dim NomQDF As String
    Dim oDb As DAO.Database
    Dim oQdf  As DAO.QueryDef
    Dim strReqName As String 'Nom de la requête à supprimer
 
 
    'Accède à la base de données courante
    Set oDb = CurrentDb
 
    strReqName = "& NomQDF"
 
    'Tente la suppression
    oDb.QueryDefs.Delete strReqName
    'Affiche un message
    MsgBox "La requête " & strReqName & " a été supprimée"
 
 
fin:
    'Libère l'objet oDb
    Set oDb = Nothing
    Exit Function
 
err:
    'Affiche un message suivant l'erreur
    Select Case err.Number
        Case 3265: MsgBox "La requête n'existe pas"
        Case Else: MsgBox "Erreur critique inconnue"
    End Select
    'Termine le programme
    Resume fin
 
End Function
Je ne vois absolument pas ce qui peut poser soucis

Merci par avance pour votre aide
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 10h36   #2
Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 46
Points : 46
Par ma culture, c'est sensé faire quoi ça ?

Code :
strReqName = "& NomQDF"
Nitsuja est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/07/2011, 10h44   #3
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 63
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 63
Points : 27
Points : 27
Citation:
Envoyé par Nitsuja Voir le message
Par ma culture, c'est sensé faire quoi ça ?

Code :
strReqName = "& NomQDF"
Je récupère le nom de ma requête précédemment créée (NomQDF)
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 10h47   #4
Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 46
Points : 46
Ok je savait pas que l'on pouvait faire ça !
Et ça marche ? ^^

Personnellement j'aurais passé NomQDF en argument à la fonction.
Nitsuja est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/07/2011, 11h06   #5
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 63
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 63
Points : 27
Points : 27
Non, avec ou sans cette ligne ça me renvoie toujours la même erreur

Call suppRequete(NomQDF) me renvoie la même erreur suivie d'une incompatibilité de type
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 11h15   #6
Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 46
Points : 46
Oui mais si ta ligne de code marche (test avec Debug.Print) et renvoie bien le nom de ta requête le problème n'est pas la.
Je ne vois pas pourquoi il y aurait une incompatibilité de type cependant.

Par contre je crois qu'en DAO la requête n'est pas dans la base tant que tu n'as pas fait cela :

Code :
oDb.Querydefs.append oQdf
Ce qui expliquerait pourquoi la suppression ne trouve pas ta requête.
Nitsuja est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 11h26   #7
Membre régulier
 
Homme Michaël
Développeur .NET
Inscription : avril 2008
Messages : 80
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : avril 2008
Messages : 80
Points : 84
Points : 84
C'est normal en faisant ca:

Code :
strReqName = "& NomQDF"
tu essayes de supprimer une requête don le nom est "& NomQDF", qui a peu de chance d'être le nom rentré dans l'InputBox par l'utilisateur.

ce que tu dois faire c'est assigner le contenu de la variable comme ceci:

Mais il y a un second problème, c'est que tu as déclaré NomQDF dans btnExport_Click() et une fois en dehors, NomQDF n'existe plus. Tu la redéclares dans suppRequete() mais elle n'est pas assignée.

Donc la solution est bien de la passer en paramètre tu dois donc déclarer ta fonction:
Code :
Private Sub suppRequete(NomQDF As String)
et ne plus déclarer NomQDF dans la fonction.
mkl238 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 11h30   #8
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 63
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 63
Points : 27
Points : 27
Lorsque je fais
strReqName = "Test125"

Avec un requête se nommant Test125 déjà créée, la suppression est OK
Mes requêtes se crées bien par contre le debug.print me renvoi: & NomQDF
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 11h35   #9
Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 47
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 47
Points : 46
Points : 46
Forcément car tu affectes "& NomQDF" au lieu du nom de la requête de l'utilisateur. Comme je ne suis pas un as en VBA j'ai pensé que c'était une nouvelle forme de passage de paramètre ^^

Il faut donc procéder comme mkl238 l'explique.
Nitsuja est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 11h49   #10
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 63
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 63
Points : 27
Points : 27
Un grand merci à mkl238 et Nitsuja tout fonctionne impeccablement bien
Je ne sais pas pourquoi je n'ai pas pensé à passer NomQDF en paramètre

Je colle mon code au cas ou:

Export:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub btnExport_Click()
    Dim SQL As String
    Dim NomQDF As String
 
    SQL = Me.lstResults.RowSource
 
    'Faites ici tous vos tests pour vous assurer d'un nom valide pour la requête à créer :
    NomQDF = InputBox("Entrer un nom pour la recherche en cours:")
    If NomQDF = "" Then
    MsgBox "Vous n'avez pas indiqué de nom valide pour la requête."
    Exit Sub
    End If
 
    'Création de la requête
    CurrentDb.CreateQueryDef NomQDF, SQL
 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, NomQDF, "C:\TMP\toto.xls"
 
    Call suppRequete(NomQDF)
End Sub
Fonction de suppression de requête:
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
Public Function suppRequete(NomQDF As String)
'Gestion d'erreur
On Error GoTo err
 
    Dim oDb As DAO.Database
    Dim oQdf  As DAO.QueryDef
    Dim strReqName As String 'Nom de la requête à supprimer
 
 
    'Accède à la base de données courante
    Set oDb = CurrentDb
 
    strReqName = NomQDF
 
    'Tente la suppression
    oDb.QueryDefs.Delete strReqName
    'Affiche un message
    MsgBox "La requête " & strReqName & " a été supprimée"
 
 
fin:
    'Libère l'objet oDb
    Set oDb = Nothing
    Exit Function
 
err:
    'Affiche un message suivant l'erreur
    Select Case err.Number
        Case 3265: MsgBox "La requête n'existe pas"
        Case Else: MsgBox "Erreur critique inconnue"
    End Select
    'Termine le programme
    Resume fin
 
End Function
Merci encore
facedeharicot 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 07h35.


 
 
 
 
Partenaires

Hébergement Web