Liste combo box

Signaler
Messages postés
27
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
20 janvier 2008
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour,

En vb, je voudrais mettre un élément dans la liste de la combo, si ce dernier n'exite pas dans la liste. Et je voudrais qu'a chaque ouverture de mon programme, les nouveaux éléments mis dans les listes soient toujours présents.

Merci d'avance.

FRED

5 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut.
Pour verifier si un element est dans la list tu peux essayer ceci

Private Function IsInListe(Elem As String) As Boolean
Dim i As Integer
IsInListe = False
For i = 0 To cb.ListCount
If cb.List(i) = Elem Then
IsInListe = True
Exit For
End If
Next
End Function

Et dans le code tu fais: If Not IsInliste("TOTO") then Call cb.AddItem("TOTO")

Ensuite si tu veux memoriser les elements ajouter tu peux les sauvegarde dans un fichier txt du style:

Dim i As Integer


Open "C:\ListeItem.txt" For Output As #1
For i = 0 To cb.ListCount
Print #1, cb.List(i)
Next
Close #1

Ensuite pour les recuperer tu fais:

Private Sub Form_Load()
Dim It As String
Open "C:\ListeItem.txt" For Input As #1
While Not EOF(1)
Input #1, It
Call cb.AddItem(It)
Wend


Close #1



End Sub

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
ta fonction peut s'ecrire :

Private Const CB_FINDSTRINGEXACT As Long = &H158
Private
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef
lParam As Any) As Long

Private Function IsInListe(Elem As String) As Boolean
IsInListe = (SendMessage(cb.hwnd, CB_FINDSTRINGEXACT, -1, ByVal Text1.Text) <> -1)
End Function

attention a ta boucle d'écriture.....
For i = 0 To cb.ListCount - 1
Print #1, cb.List(i)
Next i

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
> Renfield: Merci pour l'info. (et pour la correction)

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Messages postés
3
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
31 mars 2008

voici mon code qui permet d'alimenter le combo1 par des donnees de champ nom du table id
et je veux qui le nom ne repete pas(combo sans doublans)
mais dans le form load il ya un erreur le compilateur il m'affiche
nombre d'arguments ou d'affectation de propriete incorrecte
svp aidez moi et 1000 merci 

Private Sub Form_Load()
Dim strTemp As String
Adodc1.RecordSource = " select  * from id"
Adodc1.CommandType = adCmdText

Adodc1.Refresh
Combo1.Clear
While Not Adodc1.Recordset.EOF
Combo1.AddItem Adodc1.Recordset.Fields(1) & ""
  If Not IsInListe(Combo1, strTemp) Then
            Combo1.AddItem strTemp
  End If
   Adodc1.Recordset.MoveNext
Wend

Adodc1.Recordset.Close
End Sub

Private Function IsInListe(strTemp As String) As Boolean

Dim i As Integer
IsInListe = False
For i = 0 To Combo1.ListCount
    If Combo1.List(i) = strTemp Then
        IsInListe = True
        Exit For
    End If
Next
End Function
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
tu n'a pas donné de valeur à strTemp lorsque tu fais :
Combo1.AddItem strTemp

pour tes doublons, demande a la requete de faire le tri :

Avec un : " select DISTINCT * from id"

Combo1.Clear
Do Until oRs.EOF
Combo1.AddItem oRs.Fields(1)
oRs.MoveNext
Loop
oRs.Close