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

  • Initiateur de la discussion Initiateur de la discussion ALEX1995
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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

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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour