XL 2019 Extraire avec condition un Numéro dans une chêne de caractère VBA Excel

iliess

XLDnaute Occasionnel
Bonjour
Je souhaite Extraire le numéro qui se trouve au début ou juste après "-C_"

J'ai utiliser le code suivant
VB:
Sub extraire()
Dim Arr
Arr = Range("A2:C7")
For i = LBound(Arr) To UBound(Arr)
  
    If Arr(i, 2) Like "*-C_*" Then
          Range("C" & i).Value = Left(Arr(i, 2), Find("-", Arr(i, 2) - 1)) & "_" & Split(Arr(i, 2), "_")(1)
    Else
          Range("C" & i).Value = Left(Arr(i, 2), Find("-", Arr(i, 2) - 1)) & "_" & Arr(i, 1)
    End If
Next i
End Sub
voici un fichier Exemple
Merci
 

Pièces jointes

  • Extraire.xlsm
    15.6 KB · Affichages: 16
Solution
Bonsoir à tous,

Essayez :
VB:
Sub extraire()
Dim Arr, x
   Arr = Range("A2:C7").Formula
   For i = LBound(Arr) To UBound(Arr)
      If Arr(i, 2) Like "*-C_*" Then
         x = Split(Replace(Arr(i, 2), "-", "_"), "_")
         Arr(i, 3) = x(2) & "_" & x(0)
      Else
         Arr(i, 3) = Format(Arr(i, 1), "0000000") & "_" & Split(Arr(i, 2), "-")(0)
      End If
   Next i
   Range("A2:C7") = Arr
End Sub

Jacky67

XLDnaute Barbatruc
Bonsoir à tous,

Essayez :
VB:
Sub extraire()
Dim Arr
   Arr = Range("A2:C7").Formula
   For i = LBound(Arr) To UBound(Arr)
      If Arr(i, 2) Like "*-C_*" Then
         x = Split(Replace(Arr(i, 2), "-", "_"), "_")
         Arr(i, 3) = x(2) & "_" & x(0)
      Else
         Arr(i, 3) = Format(Arr(i, 1), "0000000") & "_" & Split(Arr(i, 2), "-")(0)
      End If
   Next i
   Range("A2:C7") = Arr
End Sub
Hello mapomme
Pourrais-tu stp tester mon classeur #4 sur l'erreur 1004
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Svp j'ai pas compris le x
Dans les textes à traiter (cas où le texte contient "-C_") le texte à retirer commence avec un "souligné _" mais se termine soit par un "souligné _" soit par un "tiret -":

15447-C_0004717_ Achat Materiel Construction_31/2020
28-C_000857-Achat Materiel Construction_31/2020

Pour uniformiser tout ça, on remplace les tirets par des soulignés d'où:
x = Split(Replace(Arr(i, 2), "-", "_"), "_")

Et on obtient donc :
15447_C_0004717_ Achat Materiel Construction_31/2020
28_C_000857_Achat Materiel Construction_31/2020

On voit que le texte à extraire se situe maintenant toujours entre le 2ème et 3ème "souligné".

Le Split( Replace(Arr(i, 2), "-", "_") , "_") va renvoyer un tableau en prenant le souligné comme séparateur. L'élément qui nous intéresse sera toujours le troisième élément du tableau. Comme Split() renvoie un tableau dont l'indice commence à zéro, le 3ème élément qui nous intéresse aura pour indice 2 (et non 3) soit x(2).
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
437

Statistiques des forums

Discussions
314 714
Messages
2 112 142
Membres
111 437
dernier inscrit
mimitorpez