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

Requêtes et SQL. Discussion :

executer une requête en VBA : macro ou pas ?


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut executer une requête en VBA : macro ou pas ?
    Bonjour,

    je voudrai mettre a jour un champ lors de la saisie des différents paramètres dans un formulaire.

    j'ai une requête MAJ qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ((DescriptionPrelevement LEFT JOIN LocalisationPrelevement ON [DescriptionPrelevement].[]=[LocalisationPrelevement].[N° prelevement]) LEFT JOIN (Parcelle LEFT JOIN Communes ON [Parcelle].[Commune_ID]=[Communes].[Commune_ID]) ON [LocalisationPrelevement].[Cod_ParcelledeRéférence]=[Parcelle].[Cod_parcelle]) LEFT JOIN [PluieEfficace/Communes] ON [Communes].[NumINSEE]=[PluieEfficace/Communes].[Insee] SET DescriptionPrelevement.[Risque de lessivage] = ROUND([DescriptionPrelevement].[RU]/[PluieEfficace/Communes].[Pluie_effi],2)
    WHERE ((([DescriptionPrelevement].[])=Formulaires!F_SaisiePlanEpandage!Fille235.Formulaire![N° prelevement]));
    mais je ne sais pas comment l'intégrer au code VBA

    j'ai donc pensé passer par une macro "ouvrir requête" mais ma commande DoCmd.Runmacro (M_MAJ_risque_less) ne fonctionne pas : le paramètre "M_MAJ_risque_less" n'est pas définit !

    En fait, je m'apperçoit que cette macro n'apparait pas dans la liste :
    Dans VB, quand je fais Outils/macros il n'y en a aucune alors qu'elle est bien dans la liste des macros d'Access !?

    J'ai donc 2 questions :
    - pourquoi cette macro n'apparait pas dans la liste ?

    - Y a t'il une façon plus élégante d'executer ma requête directement dans VBA? (j'ai vu la FAQ, mais j'avoue ne pas avoir trop compris: ça ressemble pas à du SQL...)

    Merci de votre aide !

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour voisin.

    1) Lancer un macro via VBA, je ne vois pas trop l'intéret.
    2) s'agissant d'une requete action (update, delete, insert) tu peux passer soit par la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenQuery "marequete", acViewNormal, acEdit
    Soit par un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentdb.Execute "chaine sql"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.RunSQL "chaine sql"
    Dans ce cas il te faut stocker la chaine sql ta requete dans une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strSql = "Update....."
    strSql = strSql & "....;"
    Cordialement,

  3. #3
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    Merci de ton aide loufab !

    je tente

    DoCmd.OpenQuery (Req_MAJ_risque_less)

    mais j'ai toujours un message "variable non définie" avec "Req_MAJ_risque_less" surligné ??

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    pas de paranthése des double cote. comme dans mon exemple.

  5. #5
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    OK merci !

    peux-tu m'expliquer :

    docmd.RunSQL "chaine sql"

    et

    strSql = "Update....."
    strSql = strSql & "....;"

    ?

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    La chaine SQL c'est ce que tu as fourni dans ton premier message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strsql = "UPDATE ((DescriptionPrelevement LEFT JOIN LocalisationPrelevement ON [DescriptionPrelevement].[N°]=[LocalisationPrelevement].[N° prelevement]) LEFT JOIN (Parcelle LEFT JOIN Communes ON [Parcelle].[Commune_ID]=[Communes].[Commune_ID]) ON [LocalisationPrelevement].[Cod_ParcelledeRéférence]=[Parcelle].[Cod_parcelle]) LEFT JOIN [PluieEfficace/Communes] ON [Communes].[NumINSEE]=[PluieEfficace/Communes].[Insee] SET DescriptionPrelevement.[Risque de lessivage] = ROUND([DescriptionPrelevement].[RU]/[PluieEfficace/Communes].[Pluie_effi],2)
    WHERE ((([DescriptionPrelevement].[N°])=Formulaires!F_SaisiePlanEpandage!Fille235.Formulaire![N° prelevement]));"
    On peut remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Formulaires!F_SaisiePlanEpandage!Fille235.Formulaire![N° prelevement]
    par son équivalent VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strsql = "Update.... Where ((([DescriptionPrelevement].[N°])=" & Forms!F_SaisiePlanEpandage!Fille235.Forms![N° prelevement] & "));"
    La commande sera alors :


  7. #7
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    Merci pour les infos !

    Il me restera a trouver pourquoi je ne trouve pas la liste des macros : je n'ai plus a les utiliser dans cette appli, mais ça m'embête quand même !...

  8. #8
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Je vais avoir besoin de la fameuse requête ci-dessus à plusieurs endroits. Je pense donc la mettre dans une fonction pour l'appeller dès que nécessaire.

    J'ai donc essayé les instrutions suivantes, mais ça coince avec un message "propriété ou méthode non gérée par cet objet"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Function Calcul_risque_less()
    Dim strSql As String
    strSql = "UPDATE ((DescriptionPrelevement LEFT JOIN LocalisationPrelevement ON [DescriptionPrelevement].[N°]=[LocalisationPrelevement].[N° prelevement]) LEFT JOIN (Parcelle LEFT JOIN Communes ON [Parcelle].[Commune_ID]=[Communes].[Commune_ID]) ON [LocalisationPrelevement].[Cod_ParcelledeRéférence]=[Parcelle].[Cod_parcelle]) LEFT JOIN [PluieEfficace/Communes] ON [Communes].[NumINSEE]=[PluieEfficace/Communes].[Insee] SET DescriptionPrelevement.[Risque de lessivage] = ROUND([DescriptionPrelevement].[RU]/[PluieEfficace/Communes].[Pluie_effi],2)Where ((([DescriptionPrelevement].[N°])=" & Forms!F_SaisiePlanEpandage!Fille235.Forms![N° prelevement] & "));"
    strSql = strSql & "UPDATE ((DescriptionPrelevement LEFT JOIN LocalisationPrelevement ON [DescriptionPrelevement].[N°]=[LocalisationPrelevement].[N° prelevement]) LEFT JOIN (Parcelle LEFT JOIN Communes ON [Parcelle].[Commune_ID]=[Communes].[Commune_ID]) ON [LocalisationPrelevement].[Cod_ParcelledeRéférence]=[Parcelle].[Cod_parcelle]) LEFT JOIN [PluieEfficace/Communes] ON [Communes].[NumINSEE]=[PluieEfficace/Communes].[Insee] SET DescriptionPrelevement.[Risque de lessivage] = ROUND([DescriptionPrelevement].[RU]/[PluieEfficace/Communes].[Pluie_effi],2)Where ((([DescriptionPrelevement].[N°])=" & Forms!F_SaisiePlanEpandage!Fille235.Forms![N° prelevement] & "));"
     
    DoCmd.RunSQL (strSql)
     
    End Function
    Une nouvelle fois, j'en appelle à votre expertise

    Merci

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Cantalou
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Function Calcul_risque_less()
    Dim strSql As String
    strSql = "UPDATE ((DescriptionPrelevement LEFT JOIN LocalisationPrelevement ON [DescriptionPrelevement].[N°]=[LocalisationPrelevement].[N° prelevement]) LEFT JOIN (Parcelle LEFT JOIN Communes ON [Parcelle].[Commune_ID]=[Communes].[Commune_ID]) ON [LocalisationPrelevement].[Cod_ParcelledeRéférence]=[Parcelle].[Cod_parcelle]) LEFT JOIN [PluieEfficace/Communes] ON [Communes].[NumINSEE]=[PluieEfficace/Communes].[Insee] SET DescriptionPrelevement.[Risque de lessivage] = ROUND([DescriptionPrelevement].[RU]/[PluieEfficace/Communes].[Pluie_effi],2)Where ((([DescriptionPrelevement].[N°])=" & Forms!F_SaisiePlanEpandage!Fille235.Forms![N° prelevement] & "));"
    strSql = strSql & "UPDATE ((DescriptionPrelevement LEFT JOIN LocalisationPrelevement ON [DescriptionPrelevement].[N°]=[LocalisationPrelevement].[N° prelevement]) LEFT JOIN (Parcelle LEFT JOIN Communes ON [Parcelle].[Commune_ID]=[Communes].[Commune_ID]) ON [LocalisationPrelevement].[Cod_ParcelledeRéférence]=[Parcelle].[Cod_parcelle]) LEFT JOIN [PluieEfficace/Communes] ON [Communes].[NumINSEE]=[PluieEfficace/Communes].[Insee] SET DescriptionPrelevement.[Risque de lessivage] = ROUND([DescriptionPrelevement].[RU]/[PluieEfficace/Communes].[Pluie_effi],2)Where ((([DescriptionPrelevement].[N°])=" & Forms!F_SaisiePlanEpandage!Fille235.Forms![N° prelevement] & "));"
     
    DoCmd.RunSQL (strSql)
     
    End Function
    Je crois que tu devrais donner à ta fonction un parametre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public Function Calcul_risque_less(NParam)
    Dim strSql As String
    Ensuite tu remplace Forms!F_SaisiePlanEpandage!Fille235.Forms![N° prelevement] par le parametre (NParam).

    Maintenant à l'appel de ta fonction tu lui donne le champs de ton formulaire (Forms!F_SaisiePlanEpandage!Fille235.Forms![N° prelevement]) par exemple.

  10. #10
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    Maintenant, c'est sur l'appel de la fonction qu'apparait l'erreur (toujours le même message)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub A_Click()
    Calcul_risque_less (Forms!F_SaisiePlanEpandage!Fille235.Forms![N° prelevement])
    End Sub

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Regarde ta saisie.

    Forms!.....Forms! Deux fois Forms. L'un des deux doit être Form sans s

  12. #12
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par DMboup
    Regarde ta saisie.

    Forms!.....Forms! Deux fois Forms. L'un des deux doit être Form sans s
    Ca m'apprendra à faire du copier-coller de ce que je trouve sur Internet, même dans les très bons forums ...

    Bon OK pour l'appel de la fonction, mais cette fois c'est la dite fonction qui m'envoie le message "caractères trouvés à la fin de l'instruction SQL" avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.RunSQL (strSql)
    surligné ...

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Si c'est ca que tu utilise
    strSql = "UPDATE ... ;"
    strSql = strSql & "UPDATE ((DescriptionPrelevement
    Il ya vraiment problème. Tu ne peux pas avoir deux fois (encore) UPDATE dans ton sql.

    Pour en avoir le coeur net tu peux mettre juste après le strSql un
    Debug.Print (strSql)

    Ensuite après exécution tu affiche la fenêtre espion (je crois) pour voir la valeur de la variable.

  14. #14
    Membre du Club
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Points : 62
    Points
    62
    Par défaut
    Alors, voilà finalement ce qui fonctionne:

    la sub qui appelle la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub A_Click()
    Calcul_risque_less (Forms!F_SaisiePlanEpandage!Fille235.Form![N° prelevement])
    End Sub
    la fonction elle-même (avec les mises en formes nécessaires pour ne pas avoir d'avertissement, et pour afficher le champ après la maj):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Function Calcul_risque_less(No_prelevement As Integer) As Double
    Dim strSql As String
    strSql = "UPDATE ((DescriptionPrelevement LEFT JOIN LocalisationPrelevement ON [DescriptionPrelevement].[N°]=[LocalisationPrelevement].[N° prelevement]) LEFT JOIN (Parcelle LEFT JOIN Communes ON [Parcelle].[Commune_ID]=[Communes].[Commune_ID]) ON [LocalisationPrelevement].[Cod_ParcelledeRéférence]=[Parcelle].[Cod_parcelle]) LEFT JOIN [PluieEfficace/Communes] ON [Communes].[NumINSEE]=[PluieEfficace/Communes].[Insee] SET DescriptionPrelevement.Risque_de_lessivage = ROUND([DescriptionPrelevement].[RU]/[PluieEfficace/Communes].[Pluie_effi],2)WHERE ((([DescriptionPrelevement].[N°])=Formulaires!F_SaisiePlanEpandage!Fille235.Formulaire![N° prelevement]));"
     
    DoCmd.SetWarnings False
     
    DoCmd.RunSQL (strSql)
     
    DoCmd.SetWarnings True
     
    Risque_de_lessivage.Visible = True
     
    End Function
    selon moi, il y a un paramètre qui ne sert à rien, mais ça marche comme ça !

    Chaleureusement : MERCI !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] [5.1.8] Créer une requête BO (via Macro depuis Excel)
    Par Bretonnie dans le forum SDK
    Réponses: 6
    Dernier message: 08/04/2015, 18h20
  2. Réponses: 1
    Dernier message: 27/03/2008, 18h42
  3. Comment executer une requête ?
    Par uloaccess dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 09/11/2005, 17h26
  4. Savoir si une requête retourne un résultat ou pas
    Par zut94 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/09/2005, 15h48
  5. [MySQL] Afficher le temps mis pour executer une requête SQL
    Par micatmidog dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/09/2005, 11h23

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