Extraire x caractères à partir d'un caractère précédent un autre caractère

Bonjour au forum,

Je cherche à extraire 8 caractères dans une chaine de caractères.

Dans cette chaine de caractère se trouve forcément cette suite : ";00".

Je veux extraire les 8 caractères se situant après le premier ";" suivant cette séquence.

Pour résumer, je souhaite trouver le premier ";" après la séquence ";00" et extraire les 8 caractères qui suivent ce ";".

Exemple dans fichier joint.

Merci d'avance !

14fof.xlsx (8.83 Ko)

Bonjour,

Est ce que cette proposition qui fonctionne pour ton premier exemple te convient

Private Sub CommandButton1_Click()
    tableau = Split(Range("C4").Value, ";")
    For i = 1 To UBound(tableau)
    If Left(tableau(i), 2) = "00" Then MsgBox tableau(i + 1)
    Next i
End Sub

Bonjour,

Une formule Excel 365 qui s'adapte à une longueur potentiellement variable (on prend le texte entre les deux ";" voulus).

=TEXTE.AVANT(TEXTE.APRES(TEXTE.APRES(C4;";00");";");";")

@Jacky pense à mettre un Exit Sub après ton If, a priori on ne veut que le "premier bloc après ;00" donc pas les potentiels suivants.

Bonjour saboh et Jacky,

Merci pour vos propositions, c'est parfait

J'ai opté pour la version formule pour ce fichier, merci à vous !

@Saboh,

Bien sûr tu as raison mais comme il n'y en avait pas d'autres blocs avec "00" je n'ai pas eu de problème
Mais petite question, si je mets un "Exit Sub" après mon "If", évidemment je sors de ma procédure, mais si je veux la poursuivre sur son deuxième exemple .....
Voir ce que j'ai fait, j'ai mis un "Exit For" et non un "Exit Sub"

13fof-1.xlsm (19.87 Ko)

@Nrev74, merci pour votre retour, bonne journée.

@Jacky, deux méthodes :

  1. Utiliser Exit For (que je te conseille) – Ca permet de quitter la boucle For courante.
  2. Mettre i sur la derniere valeur possible, donc au prochain tour on sort de la boucle. C'est un peu du bricolage mais ça fonctionne aussi. Voir le code ci-dessous pour bien comprendre la différence sur i pour les deux solutions.
Private Sub CommandButton1_Click()
  tableau1 = Split(Range("C4").Value, ";")
  For i = 1 To UBound(tableau1)
    If Left(tableau1(i), 2) = "00" Then
      Range("K6").Value = tableau1(i + 1)
      ' pour sortir de la boucle, on utilise Exit For
      Exit For
    End If
  Next i

  MsgBox "i du tableau1 = " & i

  tableau2 = Split(Range("C10").Value, ";")
  For i = 1 To UBound(tableau2)
    If Left(tableau2(i), 2) = "00" Then
      Range("K12").Value = tableau2(i + 1)
      ' pour sortir de la boucle, on peut aussi forcer i sur la derniere valeur possible
      i = UBound(tableau2)
    End If
  Next i

  MsgBox "ce code s'execute, et i = " & i & " > Ubound(tableau2) = " & UBound(tableau2)
End Sub

@Saboh,

Je trouve ta deuxième solution un peu tirée par les cheveux
Quant à la première que j'avais utilisée avant que tu la présentes, elle me semble très simple et parfaite
Es tu d'accord ?

Oui, Exit For est la solution à retenir. L'autre était juste à titre indicatif.

Au plaisir & Bonne journée

Bonjour à tous !

Une proposition utilisant les expressions régulières :

=REGEX.EXTRAIRE(C4;";00\d+;(\d{8});";2)

Bonjour à tous,

Avec des fonctions "traditionnelles" : =STXT(C4;1+TROUVE(";";C4;1+TROUVE(";00";C4));8)

Bonjour à tous,

j'aime bien la formule "traditionnelle" mafraise. Quand je les utilise maintenant ici pour résoudre des problèmes j'ai l'impression quelles datent ! Pas vrai tulipe_4 ?
Mais toujours fonctionnelles ! Et par rapport aux expression régulières elles sont lisibles !

Bon aller, j'arrête de me lamenter pour aujourd'hui...

@ bientôt

LouReeD

Rechercher des sujets similaires à "extraire caracteres partir caractere precedent"