Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 je souhaite extraire un numéros d'affaire dans plusieurs cellules

ALEX1995

XLDnaute Nouveau
Bonjour,

J'ai un problème qui m'a paru simple au débart mais qui s'avère être trés compliqué pour moi au final.

J'aimerai extraire un numéros d'affaire dans une chaine de caractère. par exemple en cellule A1 j'ai : AZENOR - AZE19041 - suivi d'affaire.xlsx
Je souhaiterai obtenir dans la cellule B1 : AZE19041

Le problème c'est que ce numéro d'affaire n'est pas situé au meme endroit dans toutes les cellules A2 a3 a4 ...

La seul chose qui reste constant c'est la suite de 3 lettres et de 5 chiffres.

Quelqu'un pourrait m'aider svp?

Merci d'avance

Alex
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Essaie comme ça :

VB:
Sub Macro1()
Dim O As Worksheet
Dim TV As Variant
Dim V As String
Dim K As Integer
Dim TL() As Variant

Set O = Worksheets("Feuil1")
TV = O.Range("A1").CurrentRegion
K = 1
For I = 1 To UBound(TV, 1)
    If UBound(Split(TV(I, 1), ".")) > 0 Then
        V = Split(TV(I, 1), ".")(0)
        TV(I, 1) = V
    End If
Next I
For I = 1 To UBound(TV, 1)
    If UBound(Split(TV(I, 1), "-")) > 0 Then
        For J = 0 To UBound(Split(TV(I, 1), "-"))
            V = Trim(Split(TV(I, 1), "-")(J))
            If InStr(1, V, "Suivi") <> 0 Then
                V = Right(Split(V, ".")(0), 8)
            End If
            If Len(V) = 8 Then
                If IsNumeric(Right(V, 5)) Then
                    ReDim Preserve TL(1 To K)
                    TL(K) = V
                    K = K + 1
                    Exit For
                End If
            End If
        Next J
    End If
Next I
O.Range("B1").Resize(K - 1, 1) = Application.Transpose(TL)
End Sub
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,
Une proposition par expression régulière.

La seul chose qui reste constant c'est la suite de 3 lettres et de 5 chiffres.

Il semble y avoir des références à 2 lettres et 5 chiffres. Le paterne de l'expression régulière et fait en fonction de ça: "[a-z]{2,3}[\d]{5}"
Si vous voulez vraiment que 3 lettres et 5 chiffres, le remplacer par : "[a-z]{3}[\d]{5}"

Bonne soirée
 

Pièces jointes

  • RegExpr..xlsm
    16.8 KB · Affichages: 8

mapomme

XLDnaute Barbatruc
Bonsoir @ALEX1995 , @Robert , @Roblochon ,

Un essai avec une troisième méthode: utilisation d'une formule matricielle.
La formule matricielle en B1 est à tirer/copier vers le bas:
VB:
=STXT(A1;EQUIV(1;((GAUCHE(STXT(A1;COLONNE(A:AV);8);3)>="A")*(GAUCHE(STXT(A1;COLONNE(A:AV);8);3)<="Z"))*(1*ESTNUM(1*DROITE(STXT(A1;COLONNE(A:AV);8);5)));0);8)
 

Pièces jointes

  • ALEX1995- extraction texte- v1.xlsx
    11.4 KB · Affichages: 9

mapomme

XLDnaute Barbatruc
Re,

Un autre essai avec une fonction personnalisée: =Affaire(B1)
VB:
Public Function Affaire$(ByVal x)
Dim i&, s, c
  x = " " & UCase(x) & " "
  For i = 1 To Len(x)
    c = Mid(x, i, 1)
    Select Case c
      Case "A" To "Z", "0" To "9": s = s & c
      Case Else: s = s & " "
    End Select
  Next i
  For Each c In Split(s)
    If c Like "[A-Z][A-Z][A-Z]#####" Or c Like "[A-Z][A-Z]######" Then Affaire = c: Exit Function
  Next c
End Function
 

Pièces jointes

  • ALEX1995- extraction texte- v2.xlsm
    16 KB · Affichages: 9

Discussions similaires

Réponses
36
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…