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,