IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Macro pour agréger des requetes et enlever les avertissements


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 70
    Points : 34
    Points
    34
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 663
    Points : 34 368
    Points
    34 368
    Par défaut
    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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    Merci jpcheck pour ta réponse.
    Je vais investiguer tout ceci.

    Ju

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    quelques éléments de réponse :

    - Pour désactiver les messages d'avertissement, utilises la syntaxe suivante pour désactiver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "<ton code SQL>"
    - Pour obtenir une boite de dialogue, utilises la fonction InputBox comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.RunSQL "DELETE [Table1].*, [Table1].WEEK
    FROM [Table1]
    WHERE ((([Table1].WEEK) Between " & date_demandee & " And "max"));"
    Bonne chance

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    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?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Points : 43
    Points
    43
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    J'ai un "compile error: object required", comme précédemment.
    Il y aurait-il un problème de déclaration ?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :-)

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 663
    Points : 34 368
    Points
    34 368
    Par défaut
    salut,
    verifie tes espaces dans ta requete

    il en manque un entre WEEK et From

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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"

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/03/2013, 14h21
  2. [XL-2010] Macro pour inserer des ligne avec les formules de la ligne au dessus
    Par Argonan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/02/2012, 13h58
  3. Réponses: 0
    Dernier message: 11/11/2010, 09h30
  4. [VBA-E] Probleme Macro pour gérer des cases à cocher
    Par bibiche2184 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/06/2006, 19h03
  5. macro pour créer des graphiques
    Par Sebastien_INR59 dans le forum Access
    Réponses: 1
    Dernier message: 07/06/2006, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo