OVH Cloud OVH Cloud

menu deroulant

12 réponses
Avatar
FB
Bonjour,

j'aimerais avec VBA faire une liste déroulante avec une partie du contenu
d'un fichier TXT

Exemple
Fichier TXT:
[nom]
Potter
Smith
Dupond
Dupont
[/nom]

[prenom]
Lulu
Harry
Jone
Alfred
[/prenom]

fin du fichier TXT

je voudrais juste créer un menu déroulant (listbox) avec les prénom et une
avec les nom.....!!!!!!

Merci à toute les personnes qui s'interesse à mon problème

2 réponses

1 2
Avatar
Jacky
Bonjour

Ok, je les avais complètement oubliées.
Merci beaucoup
JJ

"anonymousA" a écrit dans le message de
news:43197973$0$21298$
bonjour

extrait de la bibliothèque des programmes du site de Frédéric Sigonneau

Function Split97(ByVal Chaine$, Optional Separateur$ = " ")
'renvoie un tableau de base 0
Dim Tablo(), pos%, S$

S = Trim(Chaine): ReDim Tablo(0)
Recurse:
pos = InStr(1, S, Separateur)
If pos = 0 Then
Tablo(UBound(Tablo)) = S
Split97 = Tablo()
Exit Function
Else
Tablo(UBound(Tablo)) = Left(S, pos - 1)
S = Right(S, Len(S) - (pos + Len(Separateur) - 1))
ReDim Preserve Tablo(UBound(Tablo) + 1)
GoTo Recurse
End If
End Function 'fs, mpfe

Function Split_97(Chaine As String, Separateur As String)
'Pierre Fauconnier, mpfe (renvoie un tableau de base 1)
Dim i As Integer, NbreTab As Integer
Dim DebutChaine As Integer, Tableau()

NbreTab = 0
DebutChaine = 1
For i = 1 To Len(Chaine)
If Mid(Chaine, i, 1) = Separateur Then
NbreTab = NbreTab + 1
ReDim Preserve Tableau(1 To NbreTab)
Tableau(NbreTab) = _
Mid(Chaine, DebutChaine, i - DebutChaine)
i = i + 1
DebutChaine = i
End If
Next i
If i > DebutChaine Then
NbreTab = NbreTab + 1
ReDim Preserve Tableau(1 To NbreTab)
Tableau(NbreTab) = _
Mid(Chaine, DebutChaine, i - DebutChaine)
End If
If NbreTab = 0 Then
ReDim Tableau(1)
Tableau(1) = Chaine
End If
Split_97 = Tableau()
End Function

A+


Bonjour Ange


Bon, j'esseplique entre les lignes :




Une question.......
Sur Xl 97, split provoque une erreur.
Par quoi pourrait-on remplacer??

Salutations
JJ

"Ange Ounis" a écrit dans le message de
news:

Bon, j'esseplique entre les lignes :

''''''''''''''''''''''''''''''
Function RecupLesNoms(LeFichier As String)
Dim S As String, Str As String
Dim tmp1 As String, tmp2 As String

'en cas d'erreur, branchement vers la fin de la procédure
'pour fermer le fichier texte (sinon il reste ouvert en
'mémoire et provoque une erreur si on relance la fonction)
On Error GoTo Fin

'ouvre le fichier texte en lecture
Open LeFichier For Input As #1

'boucle jusqu'à la fin du fichier (EOF) pour lire
'les lignes une par une
Do While Not EOF(1)

'récupère une ligne dans la variable S
Line Input #1, S

'crée une chaîne unique (Str) avec toutes les lignes
'concaténées avec le séparateur ";"
Str = Str & ";" & S
Loop

'découpe la chaîne Str avec le délimiteur "[nom]" et
'affecte à tmp1 le 2ème élément du tableau renvoyé par
'Split (en clair tmp1 contient tout ce qui se trouve
'après "[nom]" dans la chaine Str
tmp1 = Split(Str, "[nom]")(1)

'on fait la même manip pour récupérer ensuite
'tout ce qui se trouve avant "[/nom]" (tmp2 contient
'maintenant tous les noms, encadrés par des ";"
tmp2 = Split(tmp1, "[/nom]")(0)

'découpe tmp2 pour renvoyer un tableau des noms (pour
'éviter les ";" parasites, il faut éliminer les 1er et
'dernier caractères de la chaine tmp2 à l'aide de la
'fonction Mid). Le tableau renvoyé par Split est
'affecté à la fonction RecupLesNoms.
RecupLesNoms = Split(Mid(tmp2, 2, Len(tmp2) - 2), ";")

Fin:
'on ferme le fichier texte
Close #1
End Function
'''''''''''''''''''''''''''''''

Voili voila. Tu peux de la même manière récupérer un tableau des prénoms
:




seul

les délimiteurs fournis à la fonction Split pour trouver tmp1 puis tmp2


vont

changer.

peux tu me dire comment je peux apprendre à programmer de cette façon
peux tu me donner un nom de site ou ce genre de programmation est



expliqué

Le mpfe est un excellent endroit, AMA, pour faire des apprentissages


divers et

variés qui touchent de près ou de loin Excel, dont sa programmation. Tu
as




aussi

des bouquins (liste sur la FAQ : http://dj.joss.free.fr) et qq sites
dont



l'incontournable excelabo (http://www.excelabo.net/).

----------
Ange Ounis
----------











Avatar
FB
OK.... c 'est très simple en fait!!!!
il faut juste connaitre un peu (connaitre tout les propriété que je ne
connais pas)
je ne peux que te dire un grand merci pour le temps que tu m'as accordé et
merci aussi pour les référence .... je vais potasser un bon coup et dans
quelques mois je saurai peut-etre programmer comme ca ..... MERCI


Bon, j'esseplique entre les lignes :

''''''''''''''''''''''''''''''
Function RecupLesNoms(LeFichier As String)
Dim S As String, Str As String
Dim tmp1 As String, tmp2 As String

'en cas d'erreur, branchement vers la fin de la procédure
'pour fermer le fichier texte (sinon il reste ouvert en
'mémoire et provoque une erreur si on relance la fonction)
On Error GoTo Fin

'ouvre le fichier texte en lecture
Open LeFichier For Input As #1

'boucle jusqu'à la fin du fichier (EOF) pour lire
'les lignes une par une
Do While Not EOF(1)

'récupère une ligne dans la variable S
Line Input #1, S

'crée une chaîne unique (Str) avec toutes les lignes
'concaténées avec le séparateur ";"
Str = Str & ";" & S
Loop

'découpe la chaîne Str avec le délimiteur "[nom]" et
'affecte à tmp1 le 2ème élément du tableau renvoyé par
'Split (en clair tmp1 contient tout ce qui se trouve
'après "[nom]" dans la chaine Str
tmp1 = Split(Str, "[nom]")(1)

'on fait la même manip pour récupérer ensuite
'tout ce qui se trouve avant "[/nom]" (tmp2 contient
'maintenant tous les noms, encadrés par des ";"
tmp2 = Split(tmp1, "[/nom]")(0)

'découpe tmp2 pour renvoyer un tableau des noms (pour
'éviter les ";" parasites, il faut éliminer les 1er et
'dernier caractères de la chaine tmp2 à l'aide de la
'fonction Mid). Le tableau renvoyé par Split est
'affecté à la fonction RecupLesNoms.
RecupLesNoms = Split(Mid(tmp2, 2, Len(tmp2) - 2), ";")

Fin:
'on ferme le fichier texte
Close #1
End Function
'''''''''''''''''''''''''''''''

Voili voila. Tu peux de la même manière récupérer un tableau des prénoms : seul
les délimiteurs fournis à la fonction Split pour trouver tmp1 puis tmp2 vont
changer.

peux tu me dire comment je peux apprendre à programmer de cette façon
peux tu me donner un nom de site ou ce genre de programmation est expliqué


Le mpfe est un excellent endroit, AMA, pour faire des apprentissages divers et
variés qui touchent de près ou de loin Excel, dont sa programmation. Tu as aussi
des bouquins (liste sur la FAQ : http://dj.joss.free.fr) et qq sites dont
l'incontournable excelabo (http://www.excelabo.net/).

----------
Ange Ounis
----------

Bonjour ange ounis,

merci pour ton aide ..... mais je ne comprend rien a cette programmation (ca
marche mais je comprend pas)
pourrais tu m'expliquer ce que tu fais exactement
peux tu me dire comment je peux apprendre à programmer de cette façon
peux tu me donner un nom de site ou ce genre de programmation est expliqué

encore un grand merci




Une listbox ou une combobox, peuvent être "peuplées" en une seule passe avec un
tableau. Tu peux récupérer, à partir de ton fichier texte un tableau des noms
avec ce genre de fonction :

''''''''''''''''''''''''''''''
Function RecupLesNoms(LeFichier As String)
Dim S As String, Str As String
Dim tmp1 As String, tmp2 As String
On Error GoTo Fin
Open LeFichier For Input As #1
Do While Not EOF(1)
Line Input #1, S
Str = Str & ";" & S
Loop
tmp1 = Split(Str, "[nom]")(1)
tmp2 = Split(tmp1, "[/nom]")(0)
RecupLesNoms = Split(Mid(tmp2, 2, Len(tmp2) - 2), ";")
Fin:
Close #1
End Function
'''''''''''''''''''''''''''''''

A partir de là, en supposant une ListBox1 sur la feuille Feuil1 de ton classeur,
tu peux la "peupler" de cette manière :

'''''''''''''''''''''''''''''''
Sub essai()
Dim Arr, Fich As String
Fich = "d:donnees.txt" 'à adapter of course
Arr = RecupLesNoms(Fich)
With Sheets("Feuil1").ListBox1
.Clear
.List = Arr
End With
End Sub
'''''''''''''''''''''''''''''''

----------
Ange Ounis
----------


Bonjour,

j'aimerais avec VBA faire une liste déroulante avec une partie du contenu
d'un fichier TXT

Exemple
Fichier TXT:
[nom]
Potter
Smith
Dupond
Dupont
[/nom]

[prenom]
Lulu
Harry
Jone
Alfred
[/prenom]

fin du fichier TXT

je voudrais juste créer un menu déroulant (listbox) avec les prénom et une
avec les nom.....!!!!!!

Merci à toute les personnes qui s'interesse à mon problème










1 2