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 19/12/2011, 13h28   #1
Futur Membre du Club
 
Homme
Technicien maintenance
Inscription : août 2008
Messages : 67
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance

Informations forums :
Inscription : août 2008
Messages : 67
Points : 18
Points : 18
Par défaut Problèmes sur lancement d'une requete creation de table depuis VBE

Bonjour
J'essais de lancer un requete creation de table afin de renseigner une table de recherche TRechercheTypeVariateur cette requete va "piocher" des données dans 3 tables de bases differentes. Cette requete fonctionne bien en la lancant manuellement elle met à jour la dite table, mais avec VBE et le code suivant :
Code :
1
2
3
 Set ReqFind = CurrentDb.QueryDefs("RRechercheVariateur")  ' lancement requete creation table de recherche
  ReqFind.Execute
  Set ReqFind = Nothing
J'ai une erreur d'execution sur la ligne ReqFind.Execute " La table TRechercheTypeVariateur existe déja" Il est ou dit le problème ? Merci d'avance pour les tuyaux
Jeanpierre71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 13h48   #2
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 076
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 076
Points : 4 399
Points : 4 399
Envoyer un message via Skype™ à GAYOT
Bonjour
Tu as utilisé une méthode qui interrompt la procédure si la requête existe.
Pour retrouver ce que tu fais tu peux faire:
Code :
DoCmd.RunSQL "RRechercheVariateur"
Tu auras les messages habituels.
Si tu veux les enlever:
Code :
1
2
3
DoCmd.setWarnings False
DoCmd.RunSQL "RRechercheVariateur"
DoCmd.SetWarnings True
Si tu veux garder le même type de procédure, il faut gérer les erreurs, par exemple comme ceci
Code :
1
2
3
4
 Set ReqFind = CurrentDb.QueryDefs("RRechercheVariateur")  ' lancement requete creation table de recherche
 On Error Resume Next
 ReqFind.Execute
  Set ReqFind = Nothing
Dans ce cas la procédure va se poursuivre malgré l'erreur. Ce n'est pas à utiliser dans tous les cas.
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 21h29   #3
Futur Membre du Club
 
Homme
Technicien maintenance
Inscription : août 2008
Messages : 67
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance

Informations forums :
Inscription : août 2008
Messages : 67
Points : 18
Points : 18
Ca ne marche pas, ta proposition avec fonctionne, il n'y a plus d'erreur d’exécution le programme passe bien sur la ligne sans claquer d'erreur, mais j'ai fait des tests la table n'est pas modifiée donc la requête n'est pas exécutée
Tes autres solutions ne fonctionnent pas et génère des erreurs d'execution. Désolé
Jeanpierre71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 06h14   #4
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 076
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 076
Points : 4 399
Points : 4 399
Envoyer un message via Skype™ à GAYOT
Bonjour
Code :
1
2
3
4
5
6
7
 
On Error Resume Next
Dim oDb As Database
    Set oDb = CurrentDb
    oDb.Execute "RRechercheVariateur", dbFailOnError
    oDb.Close
    Set oDb = Nothing
Quand il y message d'erreur quel est il?

D'autre part grosse erreur de ma part: On ne doit pas utiliser RunSql comme je l'ai fait.
Cela marchera mieux comme ça
Code :
1
2
3
DoCmd.SetWarnings False
DoCmd.OpenQuery "RRechercheVariateur"
DoCmd.SetWarnings True
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 18h21   #5
Futur Membre du Club
 
Homme
Technicien maintenance
Inscription : août 2008
Messages : 67
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance

Informations forums :
Inscription : août 2008
Messages : 67
Points : 18
Points : 18
Bonjour
Je te remercie pour tes suggestions J'ai pris le problème dans l'autre sens. J'ai effacé la table TRechercheTypeVariateur
Quand j'ouvre le formulaire menu de recherches j'effectue le code suivant :
Code :
1
2
3
4
5
6
7
8
Dim ReqFind As DAO.QueryDef
    Dim stDocName As String
    Dim stLinkCriteria As String
    Set ReqFind = CurrentDb.QueryDefs("RRechercheVariateur")  ' lancement requete creation table de recherche
    ReqFind.Execute
    Set ReqFind = Nothing
    stDocName = "FRechercheAvanceesVariateurs"
    DoCmd.OpenForm stDocName, , , stLinkCriteria    ' Ouverture formulaire de recherches
Et alléluia ça marche pas de défaut et création de la table en partant du principe mis en œuvre ci-dessus il faut effacer cette table après utilisation car à l’accès suivant j'aurais le message " la table ......existe déjà" . Cette opération se fait quand on quitte le menu recherche. Et là c'est de nouveau le casse tête pour effacer cette satanée table
J'ai cherché et essaye 2 ou 3 solutions trouvés dans des FAQ et Forum pas une ne marche. Dans le meilleur des cas ça passe mais la table est toujours là dans le pire sa plante, je te mets la dernière version essayé qui ne marche pas non plus sa passe mais la table est toujours là
Code :
1
2
3
On Error Resume Next
 DoCmd.RunSQL ("DROP TABLE TRechercheTypeVariateur")
 Err.Clear
Ca gonfle un peu pour seulement effacer une table je fais quoi, je prends la corde ou le 12 ?
Jeanpierre71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 09h27   #6
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 257
Points : 2 980
Points : 2 980
Bonjour,

pour effacer une table, j'utilise cette technique (trouvée un jour je ne sais plus où ):


Code :
1
2
3
4
5
6
7
8
 
Dim res_bool As Boolean
Dim objname As String
 
'Supprime Table Si existe
If ExisteTable(objname) Then
   res_bool = SupprimerTable(objname)
End If
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
Function ExisteTable(NomTable As String) As Boolean
'Pour fonctionner ce code nécessite la référence
'   - Microsoft DAO X Object Library
On Error GoTo err
    Dim oDb As DAO.Database
    Dim oQdf  As DAO.TableDef
 
    'Accède à la base de données courante
    Set oDb = CurrentDb
    Set oQdf = oDb.TableDefs(NomTable)
    'Retourne Vrai
    ExisteTable = True
 
fin:
    'Libère les objets
    Set oDb = Nothing
    Set oQdf = Nothing
    Exit Function
err:
    'Remonte toutes les erreurs différents de l'erreur 3265
    '(la requête n'existe pas)
 
    If err.Number <> 3265 Then
        err.Raise err.Number, err.Source, err.Description
    End If
    Resume fin
End Function
 
Function SupprimerTable(NomTable As String) As Boolean
On Error GoTo err
CurrentDb.TableDefs.Delete (NomTable)
SupprimerTable = True
err:
End Function
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 18h39   #7
Futur Membre du Club
 
Homme
Technicien maintenance
Inscription : août 2008
Messages : 67
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance

Informations forums :
Inscription : août 2008
Messages : 67
Points : 18
Points : 18
Bonjour Godzestla

Je doit avoir la cerise car ce que tu me propose qui est fort intéressant passe mais la table ne s’efface pas
voici le code que j'ai mis dans un module pour que je puisse l'utiliser pour d'autres tables que j'ai a créer et a supprimer :

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
Public Sub LanceRequeteCreation(NameReq As String)   ' lance les requetes creation de table pour les recherches
  Dim ReqFind As DAO.QueryDef
     Set ReqFind = CurrentDb.QueryDefs(NameReq)  ' lancement requete creation table de recherche
     ReqFind.Execute                             ' execution requete
     Set ReqFind = Nothing                       ' fermeture
End Sub
 
Public Function ExisteTable(NomTable As String) As Boolean   ' Fonction de test existance table
'Pour fonctionner ce code nécessite la référence
'   - Microsoft DAO X Object Library
On Error GoTo err
    Dim oDb As DAO.Database
    Dim oQdf  As DAO.TableDef
    'Accède à la base de données courante
    Set oDb = CurrentDb
    Set oQdf = oDb.TableDefs(NomTable)
    'Retourne Vrai
    ExisteTable = True
fin:
    'Libère les objets
    Set oDb = Nothing
    Set oQdf = Nothing
    Exit Function
err:
    'Remonte toutes les erreurs différents de l'erreur 3265
    '(la requête n'existe pas)
    If err.Number <> 3265 Then
        err.Raise err.Number, err.Source, err.Description
    End If
    Resume fin
End Function
 
Public Function SupprimerTable(NomTable As String) As Boolean    ' suppression des tables de recherches
On Error GoTo err
  CurrentDb.TableDefs.Delete (NomTable)
  SupprimerTable = True
err:
End Function
 
Public Function LibereTable(NameTable As String)
 Dim res_bool As Boolean
 Dim objname As String
 'Supprime Table Si existe
   If ExisteTable(NameTable) Then
     res_bool = SupprimerTable(NameTable)
End If
End Function
La 1er sub est le lancement de la requete creation de table CA CA MARCHE
Ensuite c'est le code que tu m'a fourni adapté à mon appli. Avec le debugeur en suivant ligne à ligne tout se passe bien SAUF dans la fonction suppression table :
Code :
1
2
3
4
5
On Error GoTo err
  CurrentDb.TableDefs.Delete (NomTable)
  SupprimerTable = True
err:
End Function
Le debugeur passe sur la ligne CurrentDb.Tabl............... mais saute directement à end function au pas suivant ? L'appel du formulaire est fait à Function LibereTable(NameTable As String) pour info ensuite tout ce petit monde se débrouille.
Comment tu explique cela ? Je te rappelle que je travaille avec Access 2003. Et à la sortie ma table n'est toujours pas supprimée
Jeanpierre71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 19h03   #8
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 076
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 076
Points : 4 399
Points : 4 399
Envoyer un message via Skype™ à GAYOT
Bonsoir
Peut être un peu plus simple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Sub Delete_Tbl(ByVal NomTbl As String)
'---------------------------------------------------------------------------------------
'Fonction de suppression d'une table
'---------------------------------------------------------------------------------------
    Dim oDb As DAO.Database
    On Error GoTo Err
 
    Set oDb = CurrentDb
    oDb.TableDefs.Delete NomTbl
 
Exit_Delete_Tbl:
    oDb.Close
    Set oDb = Nothing
    Exit Sub
Err:
    If Err.Number <> 3265 Then
        MsgBox "Erreur " & Err.Number & "   "  &  Err.Description
        Resume Exit_Delete_Tbl
    End If
End Sub
On pourrait même se passer de la gestion d'erreur en mettant en tête de procédure
Puisque à priori la seule erreur qui puisse se passer c'est que la table à supprimer n'existe pas et donc que le travail soit déjà fait.

Il suffit d'appeler après la procédure
Code :
Call Delete_Tbl ("NomDeLaTable")
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 21h12   #9
Futur Membre du Club
 
Homme
Technicien maintenance
Inscription : août 2008
Messages : 67
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Technicien maintenance

Informations forums :
Inscription : août 2008
Messages : 67
Points : 18
Points : 18
Bonjour et merci à Godzestla et a GAYOT

On dit souvent l'union fait la force (et l'oignon fait la soupe ) avec un mixe de vos propositions j'ai atteins le nirvana
Concernant la dernière proposition de GAYOT cela marche mais il ne faut pas être dans le formulaire qui utilise la table sinon CRAC ! défaut.
Donc j'ai tout regroupé dans la procédure événementielle sur click du bouton de recherche dans le menu précédent :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub BtMenuRecherche_Click()                  ' appel menu recherches Variateurs
On Error GoTo Err_BtMenuRecherche_Click
    Dim stDocName As String
    Dim stLinkCriteria As String
    If ExisteTable("TRechercheTypeVariateur") Then   ' Si la table recherche existe
        Call Delete_Tbl("TRechercheTypeVariateur")   ' on la supprime
    End If
    LanceRequeteCreation ("RRechercheVariateur")     ' lancement requete creation de la nouvelle table de recherches
    stDocName = "FRechercheAvanceesVariateurs"
    DoCmd.OpenForm stDocName, , , stLinkCriteria     ' Ouverture du formulaire de recherche
 
Exit_BtMenuRecherche_Click:
    Exit Sub
 
Err_BtMenuRecherche_Click:
    MsgBox Err.Description
    Resume Exit_BtMenuRecherche_Click
End Sub

Et cela fonctionne ! alors merci à GAYOT pour Delete_Tbl() et merci à Godzestla pour la fonction existetable() le mixe des
2 dans la subroutine ci-dessus fonctionne bien. 1000 fois merci à vous deux
Jeanpierre71 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 20h11.


 
 
 
 
Partenaires

Hébergement Web