Zone de liste limitée

Zone de liste limitée - VB/VBA/VBS - Programmation

Marsh Posté le 23-06-2011 à 10:55:16    

Bonjour,
 
J'ai un petit problème sur Access, peut-être pourriez-vous m'aider.
 
J'ai créé une base de donnée permettant de renvoyer diverses informations sur des communes françaises (pop etc).
 
Ma zone de liste est basée sur une requête SQL codée en VBA, jusque là tout va bien.  
 
Seulement lorsque la requête renvoie beaucoup d'enregistrements (ex: toutes les communes d'une région), la zone de liste ne les affiche pas tous. Ce qui pose problème. Ce problème ne se pose pas quand on choisi des filtres plus fins qui renvoient moins d'enregistrements (toutes les communes d'un département par exemple).
 
Pour donner un ordre d'idée, la zone n'affiche que les 1020 premiers enregistrements environ (le nombre est variable donc c'est encore + étonnant) alors que le résultat devrait être de 3500 et plus.
 
Donc ma question :
- Une zone de liste est-elle limitée?
- Si oui, y-a-t-il une propriété / code qui permette de modifier cette limite?
- Si oui, quelle est-elle / il?
 
Merci de votre aide.  
 
 

Reply

Marsh Posté le 23-06-2011 à 10:55:16   

Reply

Marsh Posté le 23-06-2011 à 15:57:03    

Quelle version d'Access ?
 
Je viens de faire l'essai d'un formulaire à la con, pointant sur une table Communes contenant plus de 36000 enregistrements, aucun souci sous : Access97, Access2003 et Access2007
 
Idem, avec d'autres tables où les tables Communes et Départements sont liées.
 
 
Je pense plus à ta requête VBA perso... Enfin, tes WHERE plutot...
 
Si tu fais ta requete directement dans les proprietes de la zone de liste ?
Dans la propriété "Contenu" genre :
SELECT DISTINCTROW [Commune].[N°Commune], [Commune].[NomCom] FROM [Commune];


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-06-2011 à 16:27:42    

La version est enregistrée au format accdb. Je viens de remarquer sur une base similaire programmé sur une version antérieure de access (.mdb). Le problème ne pose pas. Peut etre est-ce une cause mais d'après tes remarques ce n'est pas le cas.
 
Je vais donc revérifier mon code en prenant note de tes remarques. Je reviens vers toi si le problème persiste.
 
Merci pour tes réponses dje69r

Reply

Marsh Posté le 04-07-2011 à 11:43:11    

Malheureusement le problème persiste malgré les solutions proposées. C'est vraiment galère. La requête VBA est bonne pourtant . Auriez-vous d'autres solutions a me proposer svp.
 
Merci par avance

Reply

Marsh Posté le 04-07-2011 à 12:08:00    

Je persiste pour la requete.
 
Si je créé une requete sans code, contenant 40000 communes, aucun souci. Ma Combo, ou ma ListBox affiche bien tout.
 
Si tu comptes le nombre d'enregistrement de ta requete vba, tu as le bon nombre ?
 
Edit : et sur une base .accdb


Message édité par SuppotDeSaTante le 04-07-2011 à 12:08:56

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 04-07-2011 à 16:06:04    

J'ai testé la requête en mode SQL et celle-ci renvoie bien mes 1341 enregistrements dans ma zone de liste. Comme tu le dis à juste titre ce n'est pas un problème de "limite" de du nombre d'enregistrements mais un problème dans mon code. Mais je n'arrive pas a voir à quel niveau le problème situe
 
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 & "'" )             <= Cette requête renvoie bien le bon nombre d'enregistrement sous sql
 
 
'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
 

Reply

Marsh Posté le 04-07-2011 à 16:06:36    

Merci pour ton aide dje

Reply

Marsh Posté le 05-07-2011 à 14:43:56    

Re,
 
Alors plusieurs idées. Tu fais un Select Distinct, donc si tu as des doublons, forcément il les omet. Avec un Select (tout court) le nombre est toujours le meme ?
 
Ensuite, essaie cette procédure :

Code :
  1. Private Sub AJOUTER_Click()
  2. Dim resultatReq As Recordset 'Résultat Requête
  3. Dim TYPE_ECHELLE As String 'champs qui renseigne le type de l'enregistrement (exp: REG, DEP ...)
  4. Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'" )
  5. 'Ajout des résultats dans la liste
  6. MsgBox resultatReq.RecordCount 'ici il va afficher le nombre d'enregistrement de la requete.
  7. resultatReq.MoveFirst
  8. For x = 1 To resultatReq.RecordCount
  9.     SELECTION.AddItem resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE
  10.     resultatReq.MoveNext
  11. Next x
  12. MsgBox SELECTION.ListCount
  13. End Sub


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2011 à 14:52:53    

Ceci te retourne quoi ?
 

Code :
  1. Sub Toto()
  2. Set resultatReq = CurrentDb.OpenRecordset("SELECT First(LIBELIRIS) as LIBEL, Count(LIBELIRIS) as LIBEL FROM IRIS GROUP BY LIBELIRIS HAVING (Count(LIBELIRIS (Count() >1)))"
  3. MsgBox resultatReq.RecordCount
  4. End Sub


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2011 à 19:30:41    

Salut Djé alors voila je vais me pendre ... ;)
 
Le distinct n'influe en rien la sur le resultat car il n'y a pas de doublons
 
Je pense sincèrement que le problème ne vient pas de ma requête mais du addItem
 
Le problème est que si je prend des valeurs à insérer dans ma 1ere colonne de ma zone de liste je n'ai pas de problème (que ce soit les libéllés) dès que j'insère les données dans la colonnes 2 et 3 là ça part en vrille et je n'ai pas tout mes enregistrements. (1066 / 1347)
Je dois écrire quelque chose de faux dans mon code mais quoi ?
 
    While Not resultatReq.EOF = True
        SELECTION.AddItem resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE '
        resultatReq.MoveNext
    Wend
 
 
Merci de ton aide
 

Reply

Marsh Posté le 05-07-2011 à 19:30:41   

Reply

Marsh Posté le 05-07-2011 à 19:49:14    

Le fait de passer par le For x=1 to recordcount... j'ai eu la même idée que toi mais d'une autre manière (cf ci dessous) j'ai même mis essayé des compteurs pour voir si le fichier était parcouru entierment. Et le pire est que tout fonctionnait correctement .
 
 
 
Voila ce que j'avais essayé :
 
     

Code :
  1. Set resultatReq = CurrentDb.OpenRecordset("SELECT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'" )
  2.      Set resultatReqBIS = CurrentDb.OpenRecordset("SELECT COUNT(IRIS) as NB FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'" )
  3.      MsgBox resultatReqBIS!NB & "    aaaaa" 'ici il va afficher le nombre d'enregistrement de la requete
  4.     'Ajout des résultats dans la liste
  5.     resultatReq.MoveFirst
  6.  
  7.     For x = 1 To resultatReqBIS!NB
  8.     SELECTION.AddItem resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE
  9.     resultatReq.MoveNext
  10.     Next x
  11. 'remi=0
  12.     'While Not remi = resultatReqBIS!NB
  13.     '    SELECTION.AddItem (resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE) 'ajout de la région
  14.      '   resultatReq.MoveNext
  15.      '   remi = remi + 1
  16.     'Wend
  17.    
  18.     'While Not resultatReq.EOF = True
  19.      '   SELECTION.AddItem (resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE) 'ajout de la région
  20.      '   resultatReq.MoveNext
  21.     'Wend
  22.        
  23.         'SELECTION.RowSource = szSQL
  24.         'SELECTION.Requery 'met à jour la liste
  25.    
  26.     VIDER_ECHELLES
  27.    
  28.     MsgBox SELECTION.ListCount
  29. End Sub


 
 
 
A mon avis c'est au niveau de déclaration des colonnes que je dois merder puisque avec  1 colonne ca marche
 
 

Code :
  1. 'While Not resultatReq.EOF = True
  2.      '   SELECTION.AddItem (resultatReq!CODE ) <= LA J'AI TOUT MES ENREGISTREMENTS   
  3.      '   resultatReq.MoveNext
  4.     'Wend


 
 :pt1cable: JE VAIS BIEN TOUT VA BIEN

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed