Instr : sélectionner un texte entre deux caractères [Résolu]

Signaler
Messages postés
88
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
13 juin 2013
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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


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.
Messages postés
88
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
13 juin 2013
1
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

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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.
Messages postés
88
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
13 juin 2013
1
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

pardon, le "Dim Tableau" n'a rien à faire la...

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
88
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
13 juin 2013
1
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

Attention la chute pour les grands est plus douloureuse car ils tombent de plus haut...


Cordialement


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

Malo
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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.