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 avec requête suppression non-exécutée ?


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Par défaut Macro avec requête suppression non-exécutée ?
    Bonjour,

    Je travaille sur Access 2002-2003.

    Mon code met en jeu une requête de suppression afin de dédoublonner une table mais même si la requête est correcte, elle ne s'exécute pas.

    Dans un premier temps, je rencontre des problèmes avec les requêtes de suppression lorsqu'elles sont appellées dans une macro : la requête ne s'exécute pas.

    Je voudrais savoir s'il faut exécuter de manière spécifique les requêtes suppressions ? (Je n'ai rien trouvé qui indiquait une spécifité à ce sujet)


    Dans un deuxième temps, mon plus gros problème est de réussir à exécuter mon code ci-dessous :

    Ma requête enlève les doublons pour les enregistrement avec un Index (NUM) différent mais comprenant le même Nom et Prénom.

    StrTableNameCourrier est la variable qui récupère le nom de la table que je souhaite dédoublonnoner.

    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
     
    Public Function Dedoublonnage()
     
    '*******************************************************************************************
    '*                                   Dédoublonnage Courrier          *
    '*******************************************************************************************
     
    Dim SuppDoublons As String
     
    SuppDoublons = "DELETE *"
    SuppDoublons = SuppDoublons & " FROM [" & StrTableNameCourrier & "] AS T"
    SuppDoublons = SuppDoublons & " WHERE T.NUM < ANY (SELECT NUM"
    SuppDoublons = SuppDoublons & " FROM [" & StrTableNameCourrier & "] T2"
    SuppDoublons = SuppDoublons & " WHERE T.NUM <> T2.NUM"
    SuppDoublons = SuppDoublons & " AND  T.NOM = T2.NOM"
    SuppDoublons = SuppDoublons & " AND  T.PNOM = T2.PNOM);"
     
    Dedoublonnage = SuppDoublons
     
    End Function
    Dedoublonnage() est ensuite appellée dans une macro.


    J'ai essayé différentes méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "DELETE FROM [" & StrTableNameCourrier & "] AS T WHERE T.NUM < ANY (SELECT NUM FROM [" & StrTableNameCourrier & "] T2 WHERE T.NUM <> T2.NUM AND  T.NOM = T2.NOMAND  T.PNOM = T2.PNOM);"
    Voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "DELETE FROM [" & StrTableNameCourrier & "] AS T WHERE T.NUM < ANY (SELECT NUM FROM [" & StrTableNameCourrier & "] T2 WHERE T.NUM <> T2.NUM AND  T.NOM = T2.NOMAND  T.PNOM = T2.PNOM);"
    Merci pour votre aide.

    Cordialement,

  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 137
    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 137
    Par défaut
    Bonjour,

    De mémoire Any n'est pas reconnu par ACCESS. Si tu utilises une autre base de données que Jet tu dois utiliser ADO pour exécuter tes requêtes.

    Si tu executes avec la méthode Execute utilise dbfailonerror comme paramètre, sinon ACCESS ne lève aucune erreur.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Par défaut
    Bonjour loufab,

    Merci pour ta réponse !

    Le dédoublonnage ne s'opére toujours pas. Voici mon code :

    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
     
    Function Dédoublonnage() As String
    '*******************************************************************************************
    '*                                   Dédoublonnage Courrier          *
    '*******************************************************************************************
     
    Dim db As DAO.Database, mySQl As String
     
    Set db = CurrentDb
     
    mySQl = "DELETE * FROM [" & StrTableNameCourrier & "] AS T"
    mySQl = mySQl & " WHERE T.NUM < ANY ("
    mySQl = mySQl & "SELECT NUM  FROM [" & StrTableNameCourrier & "] T2"
    mySQl = mySQl & " WHERE T.NUM <> T2.NUM AND T.NOM = T2.NOM AND T.PNOM = T2.PNOM);"
     
    db.Execute mySQl, dbFailOnError
     
    End Function
    Je ne vois pas d'erreur dans mon code. Selon toi, est-il correct ?

    Le ANY ne pose pas de problème lorsque j'exécute avec une requête dans le QBE d'Access donc je pense que ça se généralise aussi lorsque je l'exécute avec VBA ?

    Je ne vois pas trop comment trouver une alternative au ANY.

    Merci pour le temps que tu consacres à m'aider !

    Cordialement,

  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 137
    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 137
    Par défaut
    J'ai repris ton code à l'indentique et il fonctionne correctement.

    Une piste : Nom et Pnom ne sont pas identiques, des espaces traines à la fin.

    Transforme ta requete en SELECT, en remplaçant le DELETE par SELECT et affecte-la à une requete, que tu auras pris soin de créer, pour vérifier s'il affiche bien le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db.QueryDefs("test").SQL = mySQl
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Par défaut
    Bonjour,


    J'ai suivis ta procédure.
    Qui est de changer le DELETE par SELECT (nécessitant une requête déjà existante créer vide au préalable), je récupère bien les doublons.

    En ce sens, je ne comprends donc pas pourquoi ma requête de suppression ne fonctionne pas.

    Je me doute bien que le problème vient de l'exécution avec VBA car dans le QBE d'Access, elle fonctionne bien. Le problème est que comme j'ai besoin de ma variable "StrTableNameCourrier" pour récupérer le nom de la table à dédoublonner (n'étant jamais contant), je ne peux que le faire avec VBA.

    J'ai fait déjà de très nombreuses tentatives avec des solutions différentes et je ne vois pas comment résoudre mon problème.

    Sais-tu comment je pourrais m'y prendre ?



    Merci pour ton aide et le temps consacré à m'aider !

    Cordialement,

  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 137
    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 137
    Par défaut
    Tu dois mettre un point d'arrêt sur ton execute et regarder la chaine SQL.

    C'est celle-ci que tu dois copier dans la requete pour l'exécuter.

    Eventuellement poste-là !
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. [AJAX] Requête AJAX non exécutée
    Par Invité dans le forum jQuery
    Réponses: 3
    Dernier message: 19/06/2013, 14h22
  2. [WD15] requête sql non exécutée ou incompléte
    Par yoonu dans le forum WinDev
    Réponses: 12
    Dernier message: 25/03/2013, 20h04
  3. File Upload en GWT : requête POST non exécutée
    Par 7awwet dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 28/07/2012, 22h20
  4. [MySQL] Requête non exécutée
    Par harlock59 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/05/2006, 15h42
  5. [VBA][Excel]Exécution macro avec fichiers source
    Par ouezon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/12/2005, 00h00

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