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 18/02/2011, 16h07   #1
Invité régulier
 
Mak Mik
Inscription : février 2010
Messages : 45
Détails du profil
Informations personnelles :
Nom : Mak Mik

Informations forums :
Inscription : février 2010
Messages : 45
Points : 7
Points : 7
Par défaut Macro pour agréger des requetes et enlever les avertissements

Bonjour les amis,
Je suis débutante en macro mais j'essaie la chose suivante.

J'ai créee 4 requêtes sur access qui fonctionnent bien.
J'ai ensuite créee une macro pour agréger ces requêtes

Je voudrais tout basculer sur du VBA afin de réduire le processus (créer une requête puis affecter à une macro) et éviter de surcharger ma base access.

J'ai donc ouvert le code généré et je trouve ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option Compare Database
 
'------------------------------------------------------------
' M_Delete_Weeks_Delete_Weeks
'
'------------------------------------------------------------
Function M_Delete_Weeks_Delete_Weeks()
On Error GoTo M_Delete_Weeks_Delete_Weeks_Err
 
    DoCmd.OpenQuery "Query1", acViewNormal, acEdit
    DoCmd.OpenQuery "Query2", acViewNormal, acEdit
    DoCmd.OpenQuery "Query3", acViewNormal, acEdit
    DoCmd.OpenQuery "Query4", acViewNormal, acEdit
 
 
M_Delete_Weeks_Delete_Weeks_Exit:
    Exit Function
 
M_Delete_Weeks_Delete_Weeks_Err:
    MsgBox Error$
    Resume M_Delete_Weeks_Delete_Weeks_Exit
 
End Function
J'aimerai faire la chose suivante:

1- Ajouter une ligne de code pour désactiver toutes les "avertissements" qu'Access fait apparaître lors de l'éxuction d'une requête.
(Je n'ai pas trouvé l'action "Avertissement" dans l'éditeur de macro assisté)

2-Enchaîner les requêtes mais au lieu de demander d'activer la requête, je voudrai si possible renseigner le code SQL associé (afin de ne plus être obligée de garder ces requêtes sur access)
Est-ce possible?

3- Les 4 requêtes reposent sur un même critère (une date) que je demande de renseigner à leur ouverture.
Plutôt que de le renseigner 4 fois j'aimerai bien le rentrer au début et qu'il soit utilisé pour toutes les requêtes.

Pour info je vous mets à quoi ressemble le code SQL d'une des requêtes, sachant que les autres requêtes sont exactement identique si ce n'est qu'elles le font sur des tables différentes.

Code :
1
2
3
DELETE [Table1].*, [Table1].WEEK
FROM [Table1]
WHERE ((([Table1].WEEK) Between [1st week of the quarter: aaaa/ww] And "max"));
Si une bonne âme a une solution

Merci, Julie

PS: précision, je suis sur une version d'access en anglais
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 16h56   #2
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 743
Points : 10 743
Envoyer un message via MSN à jpcheck
salut,

la repond a toutes ces questions
http://access.developpez.com/faq/?page=SQL#Warning
repond aux questions 1 et 2


http://access.developpez.com/faq/?pa...DefTypParamReq
et
http://access.developpez.com/faq/?page=SQL#ReqParamVar
pour la 3

la piste pour effectuer une approche plus globale serait les tables de parametres
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 18h28   #3
Invité régulier
 
Mak Mik
Inscription : février 2010
Messages : 45
Détails du profil
Informations personnelles :
Nom : Mak Mik

Informations forums :
Inscription : février 2010
Messages : 45
Points : 7
Points : 7
Merci jpcheck pour ta réponse.
Je vais investiguer tout ceci.

Ju
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 09h05   #4
Nouveau Membre du Club
 
Homme Sylvain Thibault
Administrateur de base de données
Inscription : mars 2004
Messages : 37
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Thibault
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mars 2004
Messages : 37
Points : 39
Points : 39
Bonjour,
quelques éléments de réponse :

- Pour désactiver les messages d'avertissement, utilises la syntaxe suivante pour désactiver :
Code :
DoCmd.SetWarnings False
et la suivante pour réactiver les messages d'alerte Access.
A utiliser avec parcimonie car tous les messages Access sont désactivés.

- Si tu souhaites exécuter du SQL en VB, utilises la syntaxe suivante
Code :
DoCmd.RunSQL "<ton code SQL>"
- Pour obtenir une boite de dialogue, utilises la fonction InputBox comme ci-dessous :
Code :
1
2
 
date_demandee = InputBox("Renseigner la date (jj/mm/aaaa"", "titre de la boite de dialogue")
Utilises ensuite cette variable dans ton code SQL :
Code :
1
2
3
DoCmd.RunSQL "DELETE [Table1].*, [Table1].WEEK
FROM [Table1]
WHERE ((([Table1].WEEK) Between " & date_demandee & " And "max"));"
Bonne chance
sylvain.thibault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h18   #5
Invité régulier
 
Mak Mik
Inscription : février 2010
Messages : 45
Détails du profil
Informations personnelles :
Nom : Mak Mik

Informations forums :
Inscription : février 2010
Messages : 45
Points : 7
Points : 7
Oh Merci Sylvain ça m'aide beaucoup j'étais pas partie comme ça du tout.

Juste une toute petite question, est-il possible de créer une liste déroulante dans l'Input box?
Je ne sais pas trop comment ça s'appelle mais comme je dois sélectionner entre une 10aine de date, je me dis qu'il serait plus opportun de faire apparaître une liste déroulante.

En cherchant j'ai cru comprendre qu'il fallait utiliser la ComboBox
Est-ce que les valeurs (parmi lesquelles choisir) doivent être sur une table access ou je peux les indiquer directement dans ma macro?
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h16   #6
Invité régulier
 
Mak Mik
Inscription : février 2010
Messages : 45
Détails du profil
Informations personnelles :
Nom : Mak Mik

Informations forums :
Inscription : février 2010
Messages : 45
Points : 7
Points : 7
Re moi,
J'ai commencé à "coder" en attendant de voir pour la liste déroulante (si on peut appeller ça du code lol)

Voici ce que j'ai, mais par contre ça ne marche pas trop, comme je le disais je suis novice, il doit avoir des erreurs de syntaxes en chaîne

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
Private Sub DeleteParameter()
DoCmd.SetWarnings False
 
date_demandee = InputBox("StartingWeek (jj/mm/aaaa)", "Starting Week")
 
End Sub
 
Sub Deletion()
 
DoCmd.RunSQL "DELETE [Table1].*, [Table1].WEEK"
From [Table1] WHERE ((([Table1].WEEK) Between " & date_demandee & " And "max"));"
 
"DELETE [Table2].*, [Table2].WEEK
From [Table2]
WHERE ((([Table2].WEEK) Between " & date_demandee & " And "max"));"
 
"DELETE [Table3].*, [Table3].CORP_Week
From [Table3]
WHERE ((([Table3].CORP_Week) Between " & date_demandee & " And "max"));"
 
"DELETE [Table4].*, [Table4].CORP_Week
From [Table4]
WHERE ((([Table4].CORP_Week) Between " & date_demandee & " And "max"));"
 
DoCmd.SetWarnings True
End Sub
Je crois que je n'ai pas trop réussi à enchaîner les commandes SQL non plus
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 14h34   #7
Nouveau Membre du Club
 
Homme Sylvain Thibault
Administrateur de base de données
Inscription : mars 2004
Messages : 37
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Thibault
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mars 2004
Messages : 37
Points : 39
Points : 39
Je pense qu'il y a une erreur dans ton code car je vois deux macros DeleteParameter et Deletion

je pense que ce code ci fonctionnera mieux :
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
Private Sub DeleteParameter()
DoCmd.SetWarnings False
 
date_demandee = InputBox("StartingWeek (jj/mm/aaaa)", "Starting Week")

DoCmd.RunSQL "DELETE [Table1].*, [Table1].WEEK"
From [Table1] WHERE ((([Table1].WEEK) Between " & date_demandee & " And "max"));"
 
"DELETE [Table2].*, [Table2].WEEK
From [Table2]
WHERE ((([Table2].WEEK) Between " & date_demandee & " And "max"));"
 
"DELETE [Table3].*, [Table3].CORP_Week
From [Table3]
WHERE ((([Table3].CORP_Week) Between " & date_demandee & " And "max"));"
 
"DELETE [Table4].*, [Table4].CORP_Week
From [Table4]
WHERE ((([Table4].CORP_Week) Between " & date_demandee & " And "max"));"
 
DoCmd.SetWarnings True
End Sub
 
Pour les combobox, je ne connais pas mais tu peux faire une zone de liste dans ton formulaire et tu obliges la saisie d'une date de la liste pour cliquer sur ton bouton qui lancait la macro ci-dessus.

Sylvain
sylvain.thibault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 14h49   #8
Invité régulier
 
Mak Mik
Inscription : février 2010
Messages : 45
Détails du profil
Informations personnelles :
Nom : Mak Mik

Informations forums :
Inscription : février 2010
Messages : 45
Points : 7
Points : 7
J'ai un "compile error: object required", comme précédemment.
Il y aurait-il un problème de déclaration ?
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h42   #9
Invité régulier
 
Mak Mik
Inscription : février 2010
Messages : 45
Détails du profil
Informations personnelles :
Nom : Mak Mik

Informations forums :
Inscription : février 2010
Messages : 45
Points : 7
Points : 7
Bonjour,
J'ai décidé d'y aller étape par étape, pour une débutante c'est pas plus mal

Pour mon 1er jet j'essaie donc de désactiver les avertissements, de supprimer certains éléments de ma table et de reactiver les avertissements

Quand j'execute le code ci-dessous j'ai un message d'erreur me disant : "syntaxe error" en surlignant la ligne "codesql = "Delete... and "max")

Pouvez-vous m'indiquer l'erreur que j'ai fait svp?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Deletion()
Dim codesql As String
 
DoCmd.SetWarnings False
 
date_demandee = InputBox("StartingWeek (jj/mm/aaaa)", "Starting Week")
 
codesql = "DELETE [Table1].*, [Table1].WEEK" & "From [Table1] WHERE (([Table1].WEEK) Between "& date_demandee &" And "max")"
 
DoCmd.RunSQL "codesql"
 
DoCmd.SetWarnings True
End Sub
Ju, qui galère :-)
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 12h49   #10
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 743
Points : 10 743
Envoyer un message via MSN à jpcheck
salut,
verifie tes espaces dans ta requete

il en manque un entre WEEK et From

Code :
codesql = "DELETE [Table1].*, [Table1].WEEK " & "From [Table1] WHERE (([Table1].WEEK) Between "& date_demandee &" And "max")"
de plus,tu cherches a executer codesql et non pas
"codesql"
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 10h54   #11
Invité régulier
 
Mak Mik
Inscription : février 2010
Messages : 45
Détails du profil
Informations personnelles :
Nom : Mak Mik

Informations forums :
Inscription : février 2010
Messages : 45
Points : 7
Points : 7
Merci Jpcheck.
Effectivement je n'ai plus de bug et en plus j'apprends!

J'ai tenté d'enchaîner le code sql avec une "&" mais je ne suis pas certaine que ça marche. Quel est l'opérateur adéquat?
Ci-dessous voici ce que j'ai fait mais qui n'a pas l'air de marcher:

Code :
codesql = "DELETE [Table1].*, [Table1].WEEK" & " From [Table1] WHERE (([Table1].WEEK) >= " & date_demandee & ")" & "DELETE [Table2].*, [Table2].WEEK" & " From [Table2] WHERE (([Table2].WEEK) >= " & date_demandee & ")" & "DELETE [Table3].*, [Table3].WEEK" & " From [Table3] WHERE (([Table3].WEEK) >= " & date_demandee & ")" & "DELETE [Table4].*, [Table4].WEEK" & " From [Table4] WHERE (([Table4].WEEK) >= " & date_demandee & ")"
Autre question, ma date à le format suivant "aaaa/ss", s, étant la semaine.
Du coup je suis amenée à taper ceci par exemple : "2011/06"
Dans access, aucun problème, il comprend que c'est une date et lorsque que je lui demande de supprimer toutes les cellules >= 2011/06, il le fait.

Dans le code VBA j'ai l'impression qu'il ne le comprend plus.
J'ai ajouté un:
Code :
Dim date_demandee As Date
Mais ça ne me fait rien.
Quelle dimension donner pour conserver la propriété de calcul (=, entre, > ou <>)

Désolé si je m'exprime pas avec les bons termes...

Ju
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h13.


 
 
 
 
Partenaires

Hébergement Web