Lire une ligne précise dans un textbox [Résolu]

Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010
- - Dernière réponse : cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
- 8 févr. 2007 à 11:46
bonsoir,
depuis tout à lheure je recherche en vaint un module pour lire une ligne précise dans un fichier text donc maintenant j'aimerai savoir comment faire pour lire par exemple la ligne 4 d'un textbox sachant qu'il est bien sur multiligne

merci d'avance

123
Afficher la suite 

16 réponses

Meilleure réponse
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
3
Merci
salut,
et sans split on a aussi la bonne vieille solution des API

Option Explicit

Private Const EM_GETLINE             As Long
= &HC4
Private Const EM_LINEINDEX           As Long
= &HBB
Private Const EM_LINELENGTH          As Long
= &HC1
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As
Long
Private Declare Function SendMessageStr Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As String) As Long

Private Sub Command1_Click()
    MsgBox GetItem(Text1, 3)
End Sub

Private Function GetItem(ByRef TB As TextBox, lRow As Long) As
String
        Dim lLineIndex&, lLength&

'       index, taille
        lLineIndex = SendMessage(TB.hwnd, EM_LINEINDEX, lRow -
1, ByVal 0&)
        lLength = SendMessage(TB.hwnd, EM_LINELENGTH, lLineIndex,
ByVal 0&)
   
'       buffer ,
chaîne
        GetItem = Space$(lLength)
        Call SendMessageStr(TB.hwnd, EM_GETLINE, lRow - 1, ByVal
GetItem)
End Function

<small>Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT  [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 215 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Ligne réelle ou ligne virtuelle ?

Les lignes réelles sont séparées par de vrais sauts de lignes
Les lignes "virtuelles" sont le résultat d'un affichage et diffèrent selon la largeur (dimensions données à l'affichage) de la textbox

Le traitement n'est évidemment pas le même dans un cas et dans l'autre .
Commenter la réponse de jmfmarques
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010
0
Merci
je pense ligne réel vu qu'elles sont tirées d'un fichier text de la sorte

ligne1
ligne2
ligne3
...

merci de prendre en compte ma demande ;)

123
Commenter la réponse de maxsecurite2
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Ces lignes sont alors en effet séparées par un saut de ligne.
Sous VB, ce saut de ligne corresponf à la constante VBCrLf
Il te faut dans ce cas utiliser la fonction Split (aide en ligne sou F1 sur ce mot) pour éclater le texte en te servant de VBCrLf comme séparateyr.
Dans le tableau généré par ce Split, il te suffira de lire la valeur correspondant à ton numéro de ligne.
Un rappel toutefois : ton tableau va commencer à l'index 0 et non 1. Dans ce cas, pour extraire ce qui se trouve à la ligne n il faut lire le contenu de l'index n-1 du tableau obtenu.
Il est très important que tu ouvres ron aide en ligne sur le mot Split et que tu t'imprègnes bien des mécanismes qu'il induit. Des exemples accompagnent la rurique que tu ouvriras ainsi.
Fait également une recherche sur ce forum avec le mot Split ... Tu trouveras de très nombreux exemples d'utilisation.
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
Commenter la réponse de jmfmarques
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010
0
Merci
avec la fonction split on peut extraire une ligne précise je savais pas merci je vais essayer si par hasard tupeut fournir un petit code c'est pas de refu ;)

123
Commenter la réponse de maxsecurite2
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Déjà) fait juste au dessus .
Commenter la réponse de jmfmarques
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010
0
Merci
j'ai du mal m'expliquer parce que je vois pas du tout l'interet d'un split
je fais ouvrir le contenu du fichier text dans un textbox de la sorte

ligne1
ligne2
ligne3
...

il faut juste par exemple que quand la personne clic sur bouton1 un message box affiche le contenu de la ligne 2 et que la ligne2 donc et que si c'est soit extrait du fichier txt ou du textbox  sa m'est égal du moment que je puisse savoir ce qu'il y à d'écrit à cette ligne 2

es tu sur que faire un split est obligatoire ?

123
Commenter la réponse de maxsecurite2
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
"es tu sur que faire un split est obligatoire ?"


Ma réponse va être très courte et très nette :

Je ne me sers personnellement jamais de cette fonction, lui préférant l'utilisation de Instr conjuguée à Mid et/ou à Left et Right et, quelquefois, Len

Je t'ai signalé Split car c'est pour toi ce qu'il y a de plus facile à mettre en oeuvre. Rien maintenant ne t'empêche de faire comme moi, mais alors : bonne étude de toutes les fonctions que je t'ai signalées.

Il n'existe auucune autre solution que Split ou ce que je fais, pour faire ce que tu cherches à faire.
Commenter la réponse de jmfmarques
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010
0
Merci
d'accord et peut te me montrer un exemple concret stp car la honnetement je bug :) j'essaye de comprendre mais sa passe pas donc si tu peut me montrer en un code assez simple sa serait super

merci d'avance

123
Commenter la réponse de maxsecurite2
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Il n'existe rien de plus simple que le code qui se trouve dans le lien que je t'ai déjà donné plus haut !
Je vois mal ce qui pourrait être encore plus simple que cet exemple !
revoilà le lien; donc...
http://www.vbfrance.com/infomsg_FONCTION-SPLIT_16418.aspx
Désolé, mais, là...
Bonne nuit.
Commenter la réponse de jmfmarques
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
Au cas où ce ne serait pas assez clair avec un Array...

ton texbox Text1 contient 3 lignes, disons
Ligne1
Ligne2
Ligne3

Dim Tablo() as string
tablo = Split(Text1, vbCrLf)
 et c'est tout:  1 déclaration de tableau, 1 ligne de code

Maintenant, Tablo sera constitué ainsi
Tablo(0) = Ligne1
Tablo(1) = Ligne2
Tablo(2) = Ligne3

MPi
Commenter la réponse de cs_MPi
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
19
0
Merci
Salut,
si tu veux pas passer par Split, il existe une autre solution

MsgBox AfficherLigneTextBox(Text1, 1)

Private Function AfficherLigneTextBox(TxtBox As TextBox, Numero As Integer) As String
    Dim i As Integer
    TxtBox.SelStart = 0
    TxtBox.SetFocus
    For i = 1 To Numero - 1
        SendKeys ("{DOWN}"): DoEvents
        Next
    SendKeys ("+{END}"): DoEvents
    AfficherLigneTextBox = TxtBox.SelText
End Function

Daniel
Commenter la réponse de Gobillot
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010
0
Merci
merci je sais maintenant comment faire pour lire une ligne précise

par ailleur j'utilise ce petit code source

Dim SearchString, SearchChar, MyPos
SearchString = "Ma phrase est ici"
SearchChar = "est"
MyPos = InStr(4, SearchString, SearchChar, 1)
MyPos = InStr(1, SearchString, SearchChar, 0)
MyPos = InStr(SearchString, SearchChar)
MyPos = InStr(1, SearchString, SearchChar)
MsgBox InStr(1, SearchString, SearchChar)

donc ce code me renvoi directement le nombre de fois que searchchar est dans searchstring mais comment faire pour connaitre à quelle ligne est searchchar ?

123
Commenter la réponse de maxsecurite2
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010
0
Merci
je dis à quelle ligne est searchchar car en vérité searchstring est égal a un textbox multilignes...

123
Commenter la réponse de maxsecurite2
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
Avec Split, ce serait simple pourtant...

Un Split sur vbCrLf te donne chaque ligne dans un tableau.
Une boucle de ce tableau avec Instr pour rechercher le texte
et tu as ta réponse rapido-presto...

MPi
Commenter la réponse de cs_MPi