Position d'une chaine de caractère avec caractère de remplacement ?#

Amis du soir bonsoir,

Je me pose un problème simple... à première vue

Comment trouver la(les) position(s) d'une sous-chaine de caractères dans un texte, en utilisant les caractères de remplacement (? # *) ?

Exemple barbare :

txt = "blablabli" & vbLf & vbLf & "2024.S36 tralala"
chaineCherchée = "20##.S##"

pos = 1
Do While pos > 0
    pos = InStr(pos, txt, chaineCherchée)
    If pos > 0 Then
        MsgBox pos
        pos = pos + Len(chaineCherchée)
    End If
Loop

Merci d'avance pour votre aide toujours précieuse

Bonjour,

Si ta chaine cherchée est toujours de la même longueur, tu peux essayer ca :

Sub ch()
    txt = "blablabli" & vbLf & vbLf & "2024.S36 tralala"
    chaineCherchée1 = "20"
    chainecherchée2 = ".S"

    pos1 = InStr(1, txt, chaineCherchée1)
    If pos1 > 0 Then
        pos2 = InStr(pos1 + 4, txt, chainecherchée2)
        If pos2 > 0 Then
            pos1 = pos1 + 8
        Else
            MsgBox ("chaine non trouvée")
        End If
    Else
        MsgBox ("chaine non trouvée")
    End If

End Sub

Bonjour ann3, à tous ,

En supposant que # représente un chiffre :

Sub rechMultiple()
Dim Texte$, Quoi$, i&, pos1&, pos2&, res$
   Texte = "blablabli" & vbLf & vbLf & "2024.S36 tralala " & vbLf & vbLf & "2024.S36 tralala "
   Texte = Texte & Texte
   Quoi = "20##.S##"
   For i = 1 To Len(Texte) - Len(Quoi) + 1
      If Mid(Texte, i, Len(Quoi)) Like Quoi Then
         res = res & "-" & i
         i = i + Len(Quoi) - 1
      End If
   Next i
   MsgBox Quoi & "   =>   " & IIf(res = "", "Pas trouvé !", "positions : " & Mid(res, 2)), vbInformation
End Sub

Bonjour à tous,

ci-jointe une solution en utilisant l'objet Regexp

Sub récup_position_chaîne()
    Dim txt As String, txt_trouvé As String
    Dim pos As Integer, pos_début As Integer
    Dim Rgex As Object, matches As Object, match_chaîne

    txt = "blablabli" & vbLf & vbLf & "2024.S36 tralala" & vbLf & vbLf & "2024.S36 tralala"

    Set Rgex = CreateObject("vbscript.regexp")
    With Rgex
        .Global = True         ' Définit le champ d'application.
        .IgnoreCase = True     ' Ignore la casse.
        .Pattern = "20..\.S.." ' "." représente n'importe que caractère unique, \. représente le caractère "."
        Set matches = .Execute(txt)
        pos_début = 1
        For Each match_chaîne In matches
            txt_trouvé = match_chaîne.Value
            pos = InStr(pos_début, txt, txt_trouvé): MsgBox pos
            pos_début = pos + 1
        Next match_chaîne
    End With
    Set Rgex = Nothing

End Sub

Merci et bravo à tous les 3,

J'aime ta méthode mafraise, comment n'y ai je pas pensé je vais l'utiliser car plus habitué...

Je marque cependant le résolu à thev qui vient de m'en apprendre une belle je ne connaissais pas du tout le regex qui ouvre une belle porte aux lectures et manipulations de chaines.

A bientôt avec beaucoup de plaisir

Rechercher des sujets similaires à "position chaine caractere remplacement"