Propriétés AddItem d'un ComboBox [Résolu]

Signaler
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011
-
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011
-
Bonsoir tout le monde,

Je charge ma ComboBox via une base de données ACCESS avec les lignes de commandes suivantes :

Set rsCHOIX = New ADODB.Recordset
rsCHOIX.Open "select * from [ART_" & cmbRESULTAT.Text & "]", cn, 1, 2
                Do Until rsCHOIX.EOF
                cmbFILTRE.AddItem rsCHOIX.Fields(0)
                rsCHOIX.MoveNext
                Loop
rsCHOIX.Close
Set rsCHOIX = Nothing

Tout ce déroule comme prévu sauf que dans mes données il y des lignes vides ainsi que des doubles ce qui augmente d'autant ma ComboBox.

Est-il possible de ne pas Ajouter les Items vide et les Doublons dans ma ComboBox ?

Par avance je vous remercie de votre aide.
Bonne soirée.

13 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
les ` equivalent tes [ ]

étrange, ton message... tu as simplement remplacé ta requete dans le code que tu avais avant ?

parce qu'il fonctionnait...

pense bien a faire un rsCHOIX.Close
une fois que tu as finit de jouer avec ton Recordset
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
Bonsoir,

AddItem n'est pas une propriété, mais une méthode (et ce n'est pas du tout la même chose !)
C'est ta requête elle-même qu'il convient de modifier de préférence. Cela t'évitera d'assortir la méthode AddItem de deux expression conditionnelles (une pour les vides et l'autre pour les doublons ...)
Le mieux serait d'ailleurs de ne pas utiliser du tout AddItem, mais de lier ta combobox à ton recordset (construit, lui, avec les clauses écartant vides et doublons... mais cà, c'est surtout SQL avant VB).
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Bonsoir jmf0,

Désolé pour avoir mis propriété au lieu méthode, je ne savais point.

En faite c'est tout à fait normal que j'ai des doublons et des vides et je ne veux pas les bloquer pour mon programme, de ce fait je ne pense pas que lier ma combobox à mon recordset résoudra le problème cité.

Çomment est-il possible de modifier ma requête ?
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

J'ai trouvé pour les doublons, j'en transpire encore :)
Par contre j'ai toujours pas trouvé pour les lignes vides qui me font un blanc dans ma combo.

Pour les doublons :

Dim i As Integer
Dim Elements As New Collection

       For i = 0 To cmbFILTRE.ListCount - 1
           Call Elements.Add(cmbFILTRE.List(i), cmbFILTRE.List(i))
       Next
  
   Call cmbFILTRE.Clear
   For i = 1 To Elements.Count
       Call cmbFILTRE.AddItem(Elements(i))
   Next
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
non, non et non !

on ne rappatrie que le necessaire.
pas de SELECT *
mais tu cible les champs requis (vraisemblablement un seul)

et pour tes doublons, ajoutes simplement DISTINCT :

SELECT DISTINCT `monChamp` FROM `maTable`
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
ah oui, manque aussi le coup des lignes vides :

SELECT DISTINCT `monChamp` FROM `maTable` WHERE `monChamp`<>''


(a voir si c'est chaine vide, ou champ null)
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Bonjour Renfield,

J'ai bien essayer un select distinct ma ça ne marche pas chez moi (il prend quand même les doublons), voici ma ligne de commande :

rsCHOIX.Open "select distinct * from [ART_" & cmbRESULTAT.Text & "]", cn, 1, 2

select case cmbresultat.text

                Case DATE
                Do Until rsCHOIX.EOF
                cmbFILTRE.AddItem rsCHOIX.Fields(0)
                rsCHOIX.MoveNext
                Loop
               
                Case ...

Peut être est-ce du à cause de mon select case ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
cmFILTRE est bien vide, avant cette boucle ?

sinon, tu ajoutes les elements encore et encore ^^
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Affirmatif, je fais un petit
cmbFILTRE.Clear avant de lancer la boucle, mais ça ne change rien les doublons sont quand même ajoutés.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Gaffe a la définition de l'instruction DISTINCT.

il faut que tous les champs ramenés soient identiques d'un tuple a l'autre, pour qu'un doublon soit detecté...
et vu que tu fais un SELECT *
je pense que certains des autres champs de ton tuple ne sont pas identiques...

exemple:
Break - Renault - Laguna
Break - Renault - Megane
Berline - Renault - Clio
Berline - Renault - Megane
Berline - Renault - Laguna
Break - Citroen - C5
Break - Peugeot - 407
Break - Peugeot - 307
...

ici, avec un " SELECT DISTINCT * " on récupèrerai plein de doublon, si on voulais remplir un combo avec le type de carrosserie.

d'ou ma remarque t'invitant à "ne rappatrier que le necessaire" et de proscrire les SELECT *


cible donc ta requete SQL en un
SELECT DISTINCT `MONchamp` FROM ...
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Ok, j'ai bien compris ton explication et elle est tout fait correcte, par contre comment je fais pour insérer un champ dans ma ligne ?

rsCHOIX.Open "select distinct * from [ART_" & cmbRESULTAT.Text & "]", cn, 1, 2

Les signes que tu as mis sur le message du dessus s'obtiennent avec ALT GR + 7 mais je n'arrive pas à voir où les placer, à chaque coup j'ai un message d'erreur ou il me dit select distinct from non conforme. Merci pour ton aide.
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

En faite voilà ou j'en suis arriver :

 rsCHOIX.Open "select DISTINCT `Dates` from [ART_" & cmbRESULTAT.Text & "]", cn, 1, 2

et j'ai un run-time error '3705'
Cette opération n'est pas autorisée si l'objet est ouvert.
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Merci pour tout.