Fichier->Tableau->ComboBox

cs_iubito Messages postés 629 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 9 octobre 2006 - 22 août 2002 à 16:00
MysTiK74 Messages postés 32 Date d'inscription vendredi 23 août 2002 Statut Membre Dernière intervention 7 mars 2003 - 24 août 2002 à 16:36
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

cs_thitoune Messages postés 124 Date d'inscription mardi 19 février 2002 Statut Membre Dernière intervention 7 mars 2004 2
22 août 2002 à 18:07
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
cs_NuNu Messages postés 100 Date d'inscription mercredi 29 mai 2002 Statut Membre Dernière intervention 27 juillet 2004
22 août 2002 à 18:09
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
cs_iubito Messages postés 629 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 9 octobre 2006
22 août 2002 à 21:26
Yes merci ! ça va m'aider à fond !!! :big)
Je teste ça demain et je te tiens au courant.

merci!
0
cs_iubito Messages postés 629 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 9 octobre 2006
22 août 2002 à 21:30
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 août 2002 à 09:28
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
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 août 2002 à 09:28
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
MysTiK74 Messages postés 32 Date d'inscription vendredi 23 août 2002 Statut Membre Dernière intervention 7 mars 2003
23 août 2002 à 22:50
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
cs_iubito Messages postés 629 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 9 octobre 2006
24 août 2002 à 15:03
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
MysTiK74 Messages postés 32 Date d'inscription vendredi 23 août 2002 Statut Membre Dernière intervention 7 mars 2003
24 août 2002 à 16:36
Adieu p'tit

Super...
n'hesites pas si besion

A r'vi pa...

Mystifie ton esprit .... et le reste
0
Rejoignez-nous