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