Fichier->Tableau->ComboBox

Signaler
Messages postés
629
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
9 octobre 2006
-
Messages postés
32
Date d'inscription
vendredi 23 août 2002
Statut
Membre
Dernière intervention
7 mars 2003
-
Bonjour @ tous !
Voilà g 1 truc à faire que je sais bien faire en Access (base de données+formulaire+VBA) mais pas en VB pur.

J'ai dans un fichier .txt la structure suivante :
nom:machine
(nom d'une personne et nom de son ordi sur le réseau).

1. Je veux lire ce fichier et le balancer dans 2 tableaux "nom" et "machine". Comment faire :question)

2. Ensuite je veux faire apparaître les noms dans une liste déroulante (j'ai posé une combobox sur ma form). Comment faire pour mettre les éléments de la liste nom(1), nom(2).... :question)

3. Enfin, je veux récupérer le rang sélectionné. Si rang=1 alors la machine de la personne sélectionnée est machine(1). J'espère que ch'uis clair :). Comment faire :question)

Merci très très beaucoup ;)

9 réponses

Messages postés
124
Date d'inscription
mardi 19 février 2002
Statut
Membre
Dernière intervention
7 mars 2004
1
Je t'ai développé ce qui suit, ca te permet de faire ce que tu veux :

Dim tabNom() As String, tabMachine() As String
Dim nbr As Integer

Private Sub Combo1_Change()
i = ComboBox1.ListIndex
MsgBox (tabNom(i))
End Sub

Private Sub Form_Load()
Call insertionTableau
For i = 0 To nbr - 1
Combo1.AddItem tabNom(i)
Combo2.AddItem tabMachine(i)
Next i
End Sub

Private Sub UserForm_Click()

End Sub

Sub insertionTableau()
Dim TextLine As String

nbr = 0
Open "c:\stage\prout.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, TextLine
tt1 = spliter(TextLine, 0)
tt2 = spliter(TextLine, 1)
ReDim Preserve tabNom(nbr)
ReDim Preserve tabMachine(nbr)
tabNom(nbr) = tt1
tabMachine(nbr) = tt2
nbr = nbr + 1
Loop
Close #1
End Sub
'permet de récupérer l'élément 0 ou 1 dans la chaine délimitée par ':'
Function spliter(s As String, elem As Integer) As String
Dim count As Integer
Dim idx As Integer
Dim deb As Integer, fin As Integer
count = 0
idx = 0
deb = -1
fin = -1
If s = "" Then
spliter = ""
Exit Function
End IfIf elem 0 Then deb 0
Do
If Mid$(s, idx + 1, 1) = ":" Then
count = count + 1
If deb = -1 Then
deb = idx + 1
Else
fin = idx
End If
End If
idx = idx + 1
Loop While fin = -1 And idx < Len(s)
If fin -1 Then fin idx
spliter = Mid$(s, deb + 1, fin - deb)
End Function
0
Messages postés
100
Date d'inscription
mercredi 29 mai 2002
Statut
Membre
Dernière intervention
27 juillet 2004

Salut,

voici une suggestion

1- Les éléments que j'ai utilisés

--> un fichier test.txt sous C comprenant les lignes

nom1:poste1
nom2:poste2
nom3:poste3

-->une feuille Vb avec 2 ComboBox et 2 TextBox

-->ds les références, cocher "Microsoft Scripting Runtime"

Et le code ds la section code de la feuille vb

*************** DEBUT CODE ***************
Option Explicit

Dim fso As New FileSystemObject
Dim intPosition As Integer
Dim intResultat1 As String
Dim intResultat2 As String

Dim cpt_1 As Integer
Dim cpt_2 As Integer

Dim tab_1() As String
Dim tab_2() As String


Private Sub Combo1_Click()
If Combo1.ListIndex <> -1 Then
Combo2.ListIndex = Combo1.ListIndex
Text1.Text = Combo1.List(Combo1.ListIndex)
Text2.Text = Combo2.List(Combo1.ListIndex)
End If
End Sub

Private Sub Combo2_Click()
If Combo2.ListIndex <> -1 Then
Combo1.ListIndex = Combo2.ListIndex
Text1.Text = Combo1.List(Combo2.ListIndex)
Text2.Text = Combo2.List(Combo2.ListIndex)
End If
End Sub

Private Sub Form_Load()

On Error GoTo traite_erreur

'Lecture fichier ini
If fso.FileExists("C:\test.txt") = True Then
Call LectureFicIni
Call MettreDsCombo
End If

Exit Sub

traite_erreur:
'MsgBox Err.Number
If Err.Number <> 0 Then
MsgBox Err.Number & " : " & Err.Description, vbOKOnly, "Erreur"
Exit Sub
End If

End Sub

Private Sub LectureFicIni()
Dim ficini As TextStream
Dim strTrame As String

Set ficini = fso.OpenTextFile("C:\test.txt", ForReading)

Do Until ficini.AtEndOfStream
strTrame = ficini.ReadLine
intPosition = InStr(strTrame, ":")
If intPosition <> 0 Then
intResultat1 = Left(strTrame, intPosition - 1)
intResultat2 = Right(strTrame, (Len(strTrame) - intPosition))

'tableau 1
cpt_1 = cpt_1 + 1
ReDim Preserve tab_1(cpt_1)
tab_1(cpt_1) = intResultat1

'tableau 2
cpt_2 = cpt_2 + 1
ReDim Preserve tab_2(cpt_2)
tab_2(cpt_2) = intResultat2
End If
Loop
ficini.Close
End Sub

Private Sub MettreDsCombo()
Dim i As Integer

For i = 1 To cpt_1
Combo1.AddItem tab_1(i)
Next

For i = 1 To cpt_2
Combo2.AddItem tab_2(i)
Next
End Sub

*************** FIN CODE ***************

je ne sais pas si ça correspond exactement à tes attentes...

Bon courage et "Donne des nouvelles".

NuNu.
0
Messages postés
629
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
9 octobre 2006

Yes merci ! ça va m'aider à fond !!! :big)
Je teste ça demain et je te tiens au courant.

merci!
0
Messages postés
629
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
9 octobre 2006

Merci thitoune ! :big)
Une autre méthode que NuNu... ça va m'aider beaucoup !
J'essaye ça demain et j'te tiens au courant!
0
Messages postés
2670
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Salut,
Si tu veux envoie moi ton fichier txt comportant ta structure a candynman@aol.com, et je te ferais un ptit bout de code qui je pense sera beaucoup plus simple et beaucoup plus court que ceux proposé par NuNu et thitoune...

Voili voilou...
A++ et bonne prog

DeAtH_-_CrAsH
0
Messages postés
2670
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Salut,
Si tu veux envoie moi ton fichier txt comportant ta structure a candynman@aol.com, et je te ferais un ptit bout de code qui je pense sera beaucoup plus simple et beaucoup plus court que ceux proposé par NuNu et thitoune...

Voili voilou...
A++ et bonne prog

DeAtH_-_CrAsH
0
Messages postés
32
Date d'inscription
vendredi 23 août 2002
Statut
Membre
Dernière intervention
7 mars 2003

Adieu p'tit
Y plus sur mais c'est moins long
utilise les fonctions d'acces aux fichiers

Open "nomdufichier.txt" For Binary Access Read As #1
l = LOF(1) ' taille du fichier
For c = 1 To l
ca = Input(1, #1) ' recuperation 1 caractere
st = st & ca
Next
Close 1

tu peux utiliser des options d'acces differente et recuperer une ligne a la fois

ensuite les fonctions mid et compagnie te permettent de formater ton texte (cool si t'as un séparateur de champ dans ton fichier texte)

ensuite utilise
combobox.additem "chaine de caracteres"
pour ajouter tes champs dans ton combo

voila bon courage et reponds moi si pbs
0
Messages postés
629
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
9 octobre 2006

Bein là kom c pas un fichier binaire j'préfère utilise un accès séquentiel car c + facile pour avoir une ligne mais qd c du binaire ouais ta fonction est bien :)
Sinon pour tout le monde : j'vais déposer une source avec ce script là :) merci !
0
Messages postés
32
Date d'inscription
vendredi 23 août 2002
Statut
Membre
Dernière intervention
7 mars 2003

Adieu p'tit

Super...
n'hesites pas si besion

A r'vi pa...

Mystifie ton esprit .... et le reste
0