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 16/03/2011, 19h00   #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 Agregation requete SQL dans VBA avec combobox

Bonjour à tous,
J'aimerais exécuter 4 requêtes suppressions toutes basées sur un même paramètre, une Date.

Voici le bout de code:
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 (aaaa/ww)", "Starting Week")
 
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 & ")"
 
DoCmd.RunSQL codesql
 
DoCmd.SetWarnings True
End Sub
J'ai les interrogations suivantes:

1- Quel est l'opérateur adéquat pour enchaîner les requêtes Delete?
J'ai mis un "&" mais ça n'a pas l'air de fonctionner

2- Comment faire apparaître une boite de dialogue dans laquelle je pourrais choisir une date que j'aurai au préalable renseignée dans une liste?

3-Ma date à le format suivant "aaaa/ww", w, é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.

Merci,
Julie
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 05h39   #2
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Je ne suis pas sûr que l'on puisse lancer une seule instruction SQL qui permette de supprimer des données sur plusieurs tables différentes.

Pour ma part, j'utiliserai une boucle, en passant comme paramètre le nom de la table, le nom du champ critère, et la date, valeur du critère.

Pour la boite de dialogue, il faut ruser.
En fait il faut ouvrir un formulaire que l'on crée pour l'occasion, dans lequel il y a la liste des dates à prendre en compte.

Pour la valeur du critère date, si j'ai bien compris il s'agit d'une période (une semaine étant une période commençant tel jour et finissant 7 jours plus tard).
On peut soit transformer votre date access (2011/06) en un intervalle.
Soit trouver dans VBA si on ne peut pas comparer des semaine. Mais là je ne sais pas.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 14h19   #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 bien pour ta réponse Pier.Antoine

Bon j'ai essayé de ruser comme tu me le conseilles mais je bute sur quelques points.

Voici mon nouveau code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Function Deletion()
Dim codesql As String
Dim date_demandee As String
 
DoCmd.SetWarnings False
 
date_demandee = InputBox("StartingWeek (aaaa/ww)", "Starting Week")
 
codesql1 = macommande1
codesql2 = macommande2
codesql3 = macommande3
codesql4 = macommande4
 
DoCmd.RunSQL codesql1
DoCmd.RunSQL codesql2
DoCmd.RunSQL codesql3
DoCmd.RunSQL codesql4
 
DoCmd.SetWarnings True
End Function
Bon apparemment il ne comprends pas ce language à partir de DoCmd.RunSQL codesql2
Je ne peux pas enchaîner les "DoCmd.RunSQL"?

J'ai créee une formulaire avec la combobx et les dates que je voulais y faire figurer, saurais-tu me dire ce que dois-je en faire maintenant?

Merci à toi,
Ju
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 03h52   #4
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Votre code comporte une erreur. Je ne sais si c'est à cause de cela que cela ne marche pas.

En effet, vous utilisez une fonction. Or une fonction doit renvoyer un résultat.

Or en l'occurence, ce dont vous avez besoin c'est de faire faire quelque chose, donc une procédure.

Autrement dit, essayez votre code dans une procédure.

Ceci dit, je pense que passer par une boucle serait plus efficace

Code :
1
2
3
4
For z = 1 to 4
codesql = macommande(z)
DoCmd.RunSQL codesql
NExt
Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 15h01   #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
Merci pour cette réponse Pierre, c'est très gentil à vous.
toutefois vous sur-estimez mes compétences en VBA, je suis toute débutante :-)

Voici le nouveau code, avec la boucle.
Par contre je ne vois plus où se trouve l'erreur :s

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Deletion()
Dim codesql As String
Dim suppression As String
Dim date_demandee As String
 
DoCmd.SetWarnings False
 
 date_demandee = InputBox("StartingWeek (aaaa/ww)", "Starting Week")
 
 
suppression1 = blablabla
suppression2 = blablabla
suppression3 = blablabla
suppression4 = blablabla
 
For i = 1 To 4
codesql = suppression(i)
DoCmd.RunSQL codesql
Next
 
DoCmd.SetWarnings True
End Sub
PS: j'ai mis "blablabla" car je sais que mon code sql est ok et pour éviter d'alourdir la page

Ju
kimai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 04h23   #6
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour


Je crois que je tenterais cela :

Code :
1
2
3
4
5
6

For i = 1 To 4
codesql = suppression & i
DoCmd.RunSQL codesql
Next
Bonne journée

Pierre
pier.antoine 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 19h14.


 
 
 
 
Partenaires

Hébergement Web