Extraire suite de chiffres dans

34besoin-d-aide.xlsx (10.17 Ko)

Bonjour à tous,

J'ai un fichier dans lequel, je dois ressortir des n° de commandes qui peuvent être indiqués dans une colonne. Le seul problème, c'est qu'il est rare que seul le n° soit indiqué : il y a souvent d'autres caractères dans la case.

Je vous joins un fichier avec en colonne A des exemples et en colonne C, ce que la formule est censée ressortir.

Sachant que :

- le numéro est impérativement composé de 8 chiffres sans espace

34besoin-d-aide.xlsx (10.17 Ko)

J'espère que j'ai été assez clair.

Merci d'avance pour votre aide, à votre disposition si besoin d'informations complémentaires.

Salut JGourmaud,

Il y a toujours des cas imprévus même, si, dans ce cas, tout a l'air d'être potentiellement imprévisible!

A+

Salut Curulis,

Le fichier est joint dans le corps du message : "Besoin d'aide"

Bonjour,

CA ne me semble pas simple. Une question cependant : le nombre de 8 chiffres peut-il commencer par 0 ou est-il forcément > 10000000 et <99999999 ?

Bonsoir JGourmand, ouisansdoute,

oui, je l'avais vu, forcément!

Je voulais parler d'un fichier (réel) plus conséquent avec peut-être d'autres exemples de résultats souhaités.

Pour embrayer sur la question de ouisansdoute, l'exemple de ton fichier W3JC1591470, mais avec 8 chiffres, pourrait-il être considéré comme un n° de commande qui aurait été accolé par mégarde à une autre donnée?

Tous petits trucs comme ça...

A+

Salut JGourmaud,

une première solution avec SPLIT, avec les doutes quant aux exceptions exceptionnelles inconnues...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim tSplit
iRow = Range("A" & Rows.Count).End(xlUp).Row
'
If Target.Address = [A1].Address Then
    For x = 2 To iRow
        sFlag = Cells(x, 1)
        Select Case Len(sFlag)
            Case 8
                If IsNumeric(sFlag) Then Cells(x, 2) = sFlag
            Case Else
                tSplit = Split(sFlag, " ")
                For y = 0 To UBound(tSplit) - 1
                    If IsNumeric(tSplit(y)) And Len(tSplit(y)) = 8 Then
                        Cells(x, 2) = tSplit(y)
                        Exit For
                    End If
                Next
        End Select
    Next
End If
'
End Sub

Cette macro démarre en cliquant sur la cellule [A1].

A+

Salut,

J'ai également un bout de code mais j'achoppe sur l'espace dont je ne connais pas la nature en A6

Sub Essai()

For Ligne = 2 To UsedRange.Rows.Count
    Range("A" & Ligne).Select
    NBCAR = Len(ActiveCell)

    For I = 1 To NBCAR
    extract = Mid(ActiveCell, I, 8)
        If InStr(" ", extract) Then
            Exit For
        End If

        If IsNumeric(extract) Then
            If Len(extract) < 8 Then
                Exit For
            Else
                If Len(extract) = 8 Then
                Range("B" & Ligne) = extract
                End If
            Exit For
            End If
        End If
    Next
Next

End Sub

@ouisansdoute,

ton espace ne serait-il pas un espace insécable? chr(160)

A+

Curulis,

C'est bien possible mais je n'arrive pas à l'identifier dans mon code ce qui fait que ma condition

        If InStr(" ", extract) Then
            Exit For
        End If

est inopérante

ouisansdoute,

et ainsi? On ne sait jamais, sur un malentendu avec Excel!

If InStr(chr(32), extract) or InStr(chr(160), extract) Then
            Exit For
        End If

A+

Bonjour à tous,

Merci pour vos réponses.

A vrai dire, je ne suis pas vraiment un expert en Excel et les macros, j'ai du mal à les gérer.

Par conséquent, vous trouverez ci-joint le format exact du fichier sur lequel je dois travailler.


A titre d'information, le numéro de commande que je souhaite extraire commence forcément par le chiffre "1"

14merci-d-avance.xlsx (11.94 Ko)

voici :

Function Reference(chaine) As String
  Set obj = CreateObject("vbscript.regexp")
  obj.Pattern = "1([0-9])+"
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then
    Reference = a(0)
    If Len(Reference) <> 8 Then Reference = ""
  Else
    Reference = ""
  End If
End Function
12de-rien.xlsm (17.94 Ko)

Salut Steelson,

Merci pour ton retour.

Cependant, je n'arrive pas à faire fonctionner la formule sur mon fichier de base.

Ce code, c'est bien dans Visual Basic qu'il faut que je le copie/colle ? et ensuite je copie la formule de la T2 et c'est censé fonctionner ?

JGOURMAUD a écrit :

Ce code, c'est bien dans Visual Basic qu'il faut que je le copie/colle ?

Oui

JGOURMAUD a écrit :

et ensuite je copie la formule de la T2 et c'est censé fonctionner ?

Oui

=Reference(S2)

Ci-joint les 2 screenshot de ce que j'ai :

  • "Visual Basic" = le code que j'ai copié
  • "Message erreur" = le message d'erreur que cela m'indique quand je tape la formule =REFERENCE(S2)

Désolé pour mon niveau d'Excel.... et merci encore

visual basic message erreur

Change le nom par "QuelleReference" dans la macro et dans la cellule


Function QuelleReference(chaine) As String
  Set obj = CreateObject("vbscript.regexp")
  obj.Pattern = "1([0-9])+"
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then
    QuelleReference= a(0)
    If Len(QuelleReference) <> 8 Then QuelleReference= ""
  Else
    QuelleReference= ""
  End If
End Function

Super, je serai incapable de le refaire seul car je n'y comprends rien mais merci beaucoup !

Je clos le sujet du coup.

Il y avait plus court avec "1([0-9]){7}" :

Function QuelleReference(chaine) As String
  Set obj = CreateObject("vbscript.regexp")
  obj.Pattern = "1([0-9]){7}"
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then QuelleReference = a(0) Else QuelleReference = ""
End Function

https://www.sheets-pratique.com/fr/fonctions/regexmatch

Rechercher des sujets similaires à "extraire suite chiffres"