Instr : sélectionner un texte entre deux caractères

Résolu
malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 - 28 avril 2013 à 20:11
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 29 avril 2013 à 20:54
Bonsoir,

j'ai fais ce code, qui me permet de sélectionner un texte (crochet compris) compris entre deux crochets :

'trouver les crochets
    pos1 = InStr(Text1.Text, "[")
    pos2 = InStr(Text1.text, "]")
'trouver la pos du curseur dans le texte
    poscur = Text1.SelStart

'si le curseur est entre les crochets, sélectionner le textes et les crochets
    If pos1 < poscur Then
        If poscur < pos2 Then
            Text1.SelStart = pos1 - 1
            Text1.SelLength = pos2 - pos1 + 1
        
        Else
        
            Text1.SelStart = poscur
        End If
    End If


Mais cela ne marche que pour le premier endroit ou il y à des crochets.
Par exemple si mon texte est :

salut [balise1], text texte text [balise2]


Le code va marcher pour balise1, mais pas pour balise 2...


Comment faire pour que le code cherche en partant du curseur vers la gauche pour chercher le "[" et vers la droite pour le "]", svp?
Ce qui me permettrait d'appliquer le code à tout les 'balise' présentent dans le texte.

merci

Malo

11 réponses

Utilisateur anonyme
28 avril 2013 à 20:54
Bonjour,

Instr() a un paramètre pour désigner le numéro du caractère à partir duquel la recherche doit commencer. Il est à zéro ou un par défaut.
3
malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 1
28 avril 2013 à 21:08
Je viens de trouver InstrRev qui m'a permit de localiser le 1° crochet à tout les coups :

poscur = Text1.SelStart
    
'trouver la position des deux crochets
pos1 = InStrRev(Text1.Text, "[", poscur)


Puis je viens de comprendre pour pos2 :

code complet :


    poscur = Text1.SelStart
    
    'trouver la position des deux crochets
    pos1 = InStrRev(Text1.Text, "[", poscur)
    pos2 = InStr(pos1, Text1.Text, "]")
    
    'trouver la position du curseur dans le texte
    If pos1 < pos2 Then 's'assurer que le premier crochet et avant le deuxième ;-)
        If pos1 <= poscur Then
            If poscur <= pos2 Then
                'Sélectionner la partie entre les crochets (y compris les crochets)
                Text1.SelStart = pos1 - 1
                Text1.SelLength = pos2 - pos1 + 1
        
            Else
                'sinon mettre le curseur à sa position
                'Text1.SelStart = poscur
            End If
        End If
    End If




merci à vous deux


Malo
3
Utilisateur anonyme
28 avril 2013 à 22:26
Bonjour,
Oui... ou tout simplement:
Dim Str, StrA, StrB, Result As String
Str = "abcd<tefgh>ijlmn"
Dim Tableau() As String

StrA = "<"
StrB = ">"

Result = Split(Split(Str, StrA, 2)(1), StrB)(0)
MsgBox Result



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 avril 2013 à 22:41
Et on peut s'amuser en apprenant, par exemple ainsi :
toto = "salut [balise1], text texte text [balise2]blabla[balise3]atchoum [balise4] a tes souhaits"
  titi = toto
  pos1 = InStr(titi, "[")
  pos2 = InStr(titi, "]")
  Do While pos1 And pos2
    MsgBox Mid(titi, pos1, pos2 - pos1 + 1)
    titi = Mid(titi, pos2 + 1)
    pos1 = InStr(titi, "[")
    pos2 = InStr(titi, "]")
  Loop

et on pourrait avoir des quantité de [.....], toujours avec ce code

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 avril 2013 à 20:17
Bonjour, instr (lis ton aide VB6 à ce sujet) te permet de déterminer une position de départ, à utiliser, donc (d'autant que tu as déjà pos2 !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 1
28 avril 2013 à 20:33
Merci de ta réponse ucfoutu,

Je penses avoir compris la fonction Instr en l'utilisant, mais je ne peux pas choisir le sens de recherche.
Il faudrait que je parte de pos2 vers la gauche pour la recherche.

Je ne vois pas ou tu veux en venir.

Malo
0
Utilisateur anonyme
28 avril 2013 à 22:27
pardon, le "Dim Tableau" n'a rien à faire la...

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 1
29 avril 2013 à 19:47
Super. Merci beaucoup pour ces deux autres solutions.
C'est comme ça qu'on avance... avec des Grands
qui apprennent aux petits
(je mesure 1m92 ;-)).

[Merci çà vous deux]


Malo
0
Utilisateur anonyme
29 avril 2013 à 20:05
Attention la chute pour les grands est plus douloureuse car ils tombent de plus haut...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 1
29 avril 2013 à 20:46
Mais l’ascension plus facile...
(sans prétention, humour)

Malo
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 avril 2013 à 20:54
Moi, depuis que ma canne à pêche a été victime du pied d'un badaud curieux et maladroit, je suis devenu un véritable as sans scion (et je ne mesure pourtant que 1,77 m).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous