Résultat requete vba fausse dans LISTBOX

cs_miron69 Messages postés 2 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 5 juillet 2011 - 4 juil. 2011 à 15:45
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 14 juil. 2011 à 00:50
Bonjour,

Dans mon code vba sous Access ma Listbox (appelée SELECTION) ne renvoie pas le nombre d'enregistrements escompté :

Voici un bout de mon code peut être cela vous aidera à solutionner mon problème:

Private Sub AJOUTER_Click()
Dim resultatReq As Recordset 'Résultat Requête
Dim TYPE_ECHELLE As String 'champs qui renseigne le type de l'enregistrement (exp: REG, DEP ...)

Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")


'Ajout des résultats dans la liste
resultatReq.MoveFirst

While Not resultatReq.EOF
SELECTION.AddItem resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE
resultatReq.MoveNext
Wend

MsgBox SELECTION.ListCount

Le msgbox me retourne la valeur "1066" alors que je devrais avoir 1341 enregistrements

J'ai testé la requête en mode SQL et celle-ci renvoie bien mes 1341 enregistrements

Mon code comporte-t-il un problème a votre avis?

Merci pour vos réponses

4 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
4 juil. 2011 à 21:34
Bonjour,

Comment as-tu testé ?
Tu as récupéré ce que génère ta requête :
"SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'"
en espionnant sa valeur puis tu l'as testé ?
ou tu as juste fais le remplacement à la main ?

Sinon, le champ DEP est un numérique ou une chaine ?

Mon site
0
cs_miron69 Messages postés 2 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 5 juillet 2011
5 juil. 2011 à 10:11
Salut NHenry,

Je vais essayé dêtre plus explicit :

Je suis en train de reprendre le code VBA d'une base de données recensant plusieurs info INSEE concernant des communes iris région, dept etc.

Je désiré renvoyé dans une listbox par exemple tous les IRIS du département « Nord » qui comporte 1347 enregistrements or je n’ai que 1066 enregistrements renvoyé dans ma zone de liste quand je clique sur mon bouton ajouter.

J'ai donc généré en mode création de requête SQL :

SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP="Nord"' OR DEP="Nord"

J'ai procédé de cette manière car quand je test avec la méthode pas à pas détaillé sous VB les champs LibelDEP et Dep prennent bien la valeur "Nord"

Pour info : Le champ Dep est un champ texte

Le problème est le suivant : la Listbox (appelée SELECTION) ne contient pas le nombre d'enregistrements escompté quand le nombre d’enregistrements demandé est conséquent or la requête utilisée testé sous SQL fonctionne correctement.

Le problème vient assurement du code mais je n'arrive pas à determiner à quel niveau:

Voici le code en question cela t'aidera plus a comprendre sur quoi je travaille


Option Explicit
 
Dim REGION As String
Dim DEPARTEMENT As String
Dim CANTON As String
Dim EPCI As String
Dim AGGLO As String
Dim ARR As String
Dim COMMUNE As String
Dim IRIS As String
 
 
 
'*******************************************************
' Procédure appelée lors d'un double clic sur SELECTION
'*******************************************************
Private Sub AJOUTER_DblClick(Cancel As Integer)
    AJOUTER
End Sub
 
 
 
 
'*******************************************************
' Procédure appelée lors d'un clic sur le bouton "ajouter"
' Cette procédure va, suivant le type de l'échelle sélectionner et
' effectuer une requete pour rassembler les informations
' sur cette dernière
'
' Une erreur est levée en cas de violation des contraintes d'utilisation
' (exemple : pluseurs cases cochées en même temps)
'*******************************************************
 
Private Sub AJOUTER_Click()
    Dim resultatReq As Recordset 'Résultat Requête
    Dim TYPE_ECHELLE As String 'champs qui renseigne le type de l'enregistrement (exp: REG, DEP ...)
 
     'Vérifier conditions
    If VERIFIER_CONDITIONS = False Then
        MsgBox ("Veuillez vérifier que vous avez sélectionné ou coché une seule echelle")
        Exit Sub
    End If
 
    'récupérer les valeurs des LISTE_
    VALEUR_LISTES
 
    If coche_R Then 'Ajouter toutes les regions
        TYPE_ECHELLE = "REG"
        If REGION <> "" Or DEPARTEMENT <> "" Or CANTON <> "" Or EPCI <> "" Or AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
            MsgBox ("Impossible d'executer")
            Exit Sub
        End If
        Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT REG as CODE,LIBELREG as LIBEL FROM COMMUNE")
 
    ElseIf coche_D Then
         TYPE_ECHELLE = "DEP"
        If DEPARTEMENT <> "" Or CANTON <> "" Or EPCI <> "" Or AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
            MsgBox ("Impossible d'executer")
            Exit Sub
        End If
        If REGION <> "" Then 'si une région est selectionnée
            Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT DEP as CODE,LIBELDEP as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
        Else 'ajouter toutes les dep
            Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT DEP as CODE,LIBELDEP as LIBEL FROM COMMUNE")
        End If
    ElseIf COCHE_C Then
 
    TYPE_ECHELLE = "CANTON"
            If CANTON <> "" Or EPCI <> "" Or AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
                MsgBox ("Impossible d'executer")
            Exit Sub
            End If
            If DEPARTEMENT <> "" Then 'Ajouter tous les cantons de DEPARTEMENT
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CV as CODE,LIBELCV as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
            ElseIf REGION <> "" Then 'Ajouter tous les cantons de REGION
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CV as CODE,LIBELCV as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
            Else 'DEPARTEMENT et REGION sont vides, alors on ajoute TOUS les cantons
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CV as CODE,LIBELCV as LIBEL FROM COMMUNE")
            End If
    ElseIf COCHE_EPCI Then
 
    TYPE_ECHELLE = "EPCI"
            If EPCI <> "" Or AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
                MsgBox ("Impossible d'executer")
            Exit Sub
            End If
            If CANTON <> "" Then 'Ajouter tous les EPCI de Canton
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
            ElseIf DEPARTEMENT <> "" Then 'Ajouter tous les EPCI de DEPARTEMENT
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
            ElseIf REGION <> "" Then 'Ajouter tous les EPCI de REGION
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
            Else 'CANTON,DEPARTEMENT,REGION sont vides, alors on ajoute TOUS les EPCI
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE")
            End If
 
    ElseIf COCHE_AG Then
 
    TYPE_ECHELLE = "AGGLO"
            If AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
                MsgBox ("Impossible d'executer")
            Exit Sub
            End If
            If EPCI <> "" Then 'Ajouter toutes les AGG de EPCI
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELEPCI='" & EPCI & "' OR EPCI='" & EPCI & "'")
            ElseIf CANTON <> "" Then 'Ajouter toutes les AGG de Canton
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
            ElseIf DEPARTEMENT <> "" Then 'Ajouter tous les AGG de DEPARTEMENT
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
            ElseIf REGION <> "" Then 'Ajouter toutes les AGG de REGION
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
            Else 'EPCI,CANTON,DEPARTEMENT,REGION sont vides, alors on ajoute TOUTES les AGG
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE")
            End If
 
    ElseIf COCHE_AR Then
 
    TYPE_ECHELLE = "ARR"
           If REGION "Provence-Alpes-Côte d'Azur" Or REGION "93" Or REGION = "Rhône-Alpes" Or REGION = "83" Or REGION = "Ile-de-France" Or REGION = "11" Then
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBELREG='" & COMMUNE & "' OR REG='" & COMMUNE & "'")
           ElseIf DEPARTEMENT "Bouche-du-Rhône" Or DEPARTEMENT "13" Or DEPARTEMENT = "Rhône" Or DEPARTEMENT = "69" Or DEPARTEMENT = "Paris" Or DEPARTEMENT = "75" Then
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBELDEP='" & COMMUNE & "' OR DEP='" & COMMUNE & "'")
           ElseIf CANTON "Marseille" Or CANTON "1399" Or CANTON = "LYON" Or CANTON = "6999" Or CANTON = "Paris" Or CANTON = "7599" Then
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBELCV='" & ARR & "' OR LIBELCV='" & COMMUNE & "'")
           ElseIf ARR "Marseille" Or ARR "Lyon" Or ARR = "Paris" Then
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBELCV='" & ARR & "'")
           ElseIf AGGLO "" And EPCI "" And CANTON = "" And DEPARTEMENT = "" And REGION = "" And ARR = "" Then
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT")
 
 
            '///////////////////////////////////////////////////////////////////////////////////////////////
            'SI ON CREE UNE NOUVEL ARRONDISSEMENT, IL FAUT ALORS AJOUTER UN "ELSE IF"
             '///////////////////////////////////////////////////////////////////////////////////////////////
 
             Else
                MsgBox ("Impossible d'executer")
            Exit Sub
            End If
 
    ElseIf COCHE_COM Then
 
 
 
    TYPE_ECHELLE = "COM"
 
            If COMMUNE <> "" Or IRIS <> "" Then
                MsgBox ("Impossible d'executer")
            Exit Sub
            End If
 
            If ARR <> "" Then 'Ajouter toutes les COM de ARR
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBGEO='" & ARR & "' OR CODEGEO='" & ARR & "'")
            ElseIf AGGLO <> "" Then 'Ajouter toutes les COM de AGG
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELUU1999='" & AGGLO & "' OR UU1999='" & AGGLO & "'")
            ElseIf EPCI <> "" Then 'Ajouter toutes les COM de EPCI
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELEPCI='" & EPCI & "' OR EPCI='" & EPCI & "'")
            ElseIf CANTON <> "" Then 'Ajouter toutes les COM de Canton
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
            ElseIf DEPARTEMENT <> "" Then 'Ajouter toutes les COM de DEPARTEMENT
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
            ElseIf REGION <> "" Then 'Ajouter toutes les COM de REGION
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
            Else 'ARR,AGG,EPCI,CANTON,DEPARTEMENT,REGION sont vides, alors on ajoute TOUTES les COMMUNE
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE")
            End If
 
    ElseIf COCHE_IRIS Then
    TYPE_ECHELLE = "IRIS"
            If IRIS <> "" Then
                MsgBox ("Impossible d'executer")
            Exit Sub
            End If
            If COMMUNE <> "" Then 'Ajouter tous les IRIS de COM
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBGEO='" & COMMUNE & "' OR CODGEO='" & COMMUNE & "'")
            ElseIf ARR <> "" Then 'Ajouter tous les IRIS de ARR
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBGEO='" & ARR & "' OR CODGEO='" & ARR & "'")
            ElseIf AGGLO <> "" Then 'Ajouter tous les IRIS de AGG
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM COMMUNE WHERE LIBELUU1999='" & AGGLO & "' OR UU1999='" & AGGLO & "'")
            ElseIf EPCI <> "" Then 'Ajouter tous les IRIS de EPCI
                'Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELEPCI='" & EPCI & "' OR EPCI='" & EPCI & "'")
                MsgBox ("Vous ne pouvez pas faire de filtre à partir d'un EPCI")
            ElseIf CANTON <> "" Then 'Ajouter tous les IRIS de Canton
                'Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
                MsgBox ("Vous ne pouvez pas faire de filtre à partir d'un CANTON")
            ElseIf DEPARTEMENT <> "" Then 'Ajouter tous les IRIS de DEPARTEMENT
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
            ElseIf REGION <> "" Then 'Ajouter tous les IRIS de REGION
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELREG='" & REGION & "'")
            Else 'COMMUNE,ARR,AGG,EPCI,CANTON,DEPARTEMENT,REGION sont vides, alors on ajoute TOUS les IRIS
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS")
            End If
 
 
    Else
        'Aucune case cochée
        'alors on recherche dans les champs LISTE_**
            If REGION <> "" Then 'ajouter la region souhaitée
            TYPE_ECHELLE = "REG"
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT REG as CODE,LIBELREG as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
            ElseIf DEPARTEMENT <> "" Then 'ajouter le département souhaité
            TYPE_ECHELLE = "DEP"
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT DEP as CODE,LIBELDEP as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
            ElseIf CANTON <> "" Then 'ajouter le canton souhaité
            TYPE_ECHELLE = "CANTON"
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CV as CODE,LIBELCV as LIBEL FROM COMMUNE WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
            ElseIf EPCI <> "" Then 'ajouter l'EPCI souhaité
            TYPE_ECHELLE = "EPCI"
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE WHERE LIBELEPCI='" & EPCI & "' OR EPCI='" & EPCI & "'")
            ElseIf AGGLO <> "" Then 'ajouter l'Agglo souhaitée
            TYPE_ECHELLE = "AGGLO"
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELUU1999='" & AGGLO & "' OR UU1999='" & AGGLO & "'")
            ElseIf ARR <> "" Then 'ajouter l'arr souhaitée
            TYPE_ECHELLE = "ARR"
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBGEO='" & ARR & "' OR CODGEO='" & ARR & "'")
            ElseIf COMMUNE <> "" Then 'ajouter la commune souhaitée
            TYPE_ECHELLE = "COM"
                Set resultatReq = CurrentDb.OpenRecordset("SELECT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBGEO='" & COMMUNE & "' OR CODGEO='" & COMMUNE & "'")
            ElseIf IRIS <> "" Then
            TYPE_ECHELLE = "IRIS"
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELIRIS='" & IRIS & "' OR IRIS='" & IRIS & "'")
            End If
 
    End If
 
 
 
 
    'Ajout des résultats dans la liste
    resultatReq.MoveFirst
 
    While Not resultatReq.EOF
        SELECTION.AddItem resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE 'ajout de la région
        resultatReq.MoveNext
    Wend
 
    VIDER_ECHELLES
MsgBox SELECTION.ListCount
End Sub



Merci pour tes réponses

Miron
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
5 juil. 2011 à 22:20
Bonjour,

Désolé, mais je n'ai pas le temps de faire une réponse étendue ce soir, j'essayerais demain ou au plus tot, mais le travail (sujet chaud en cours) me prend beaucoup de temps cette semaine.
Evite de mettre "Réponse acceptée" si ton pb n'est pas résolu, sinon, tu aura moins de participants.

Mon site
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 juil. 2011 à 00:50
Bonjour,

Désolé pour le délai de réponse.

Je ne comprend pas d'où peut venir le pb.
Hormis que tu fais un SELECT DISTINCT (ce qui peut causer une différence si tu l'oublie durant ton test manuel), rien ne justifierais une telle différence de résultat.

Sinon, dans les conseils d'usage habituel :
On évite de construire la requête SQL directement dans la fonction l'utilisant comme :
..=CurrentDB.OpenRecordSet("SELECT ...")
On préfère utiliser une variable intermédiaire :
lReqSQL="SELECT ..."
..=CurrentDB.OpenRecordSet(lReqSQL)

C'est pratique surtout quand tu debug, comme ça tu peux aisément vérifier la valeur de la requête avant son exécution.
Vérifie que la requête obtenue soit bien celle attendu.

Mon site
0
Rejoignez-nous