XL 2019 Extraire une suite de 4 chiffres dans une désignation

CBrd

XLDnaute Nouveau
Bonjour,

Je viens solliciter votre aide aujourd'hui car j'ai un problème que je n'arrive pas à résoudre.

Dans l'entreprise où je travaille nous avons une assez grosse base de données, surtout concernant les composants.
Aujourd'hui nous voudrions modifier massivement les désignations afin de les uniformiser. Pour ce faire, j'isole chaque partie de la désignation (les ohms, la tolérance [%], etc.) pour ensuite bien remettre toutes ses valeurs dans l'ordre souhaité par la société. Pour la plupart des valeurs j'arrive à les isoler et les récupérer pour modifier la désignation (grâce aux fonctions TROUVE, CHERCHE et DROITE par exemple)

Le problème est que dans la quasi totalité des désignations nous avons une valeur que l'on appelle un boitier. Dans mon exemple, ce boitier sera toujours une suite de 4 chiffres (sur d'autres composants plus spécifiques ce pourrait être autre chose). Le problème aussi est que la suite de 4 chiffres ne se trouve pas forcément toujours au même endroit.

Sur le fichier ci-joint, pour la première ligne de mon tableau je souhaiterais récupérer la valeur 0805.
Que pouvez-vous me conseiller pour pouvoir extraire cette suite ?

Merci par avance.
 

Pièces jointes

  • Exemple désignation.xlsx
    10.5 KB · Affichages: 19
Solution
Re

Une autre fonction personnalisée utilisant RegEx.
VB:
Function QUATRE(s As String) As Double
With CreateObject("vbscript.regexp")
  .Pattern = "\d{4}"
  If .Test(s) Then QUATRE = CDbl(.Execute(s)(0))
End With
End Function

EDITION 1: Bonsoir patricktoulon
EDITION 2: Bonsoir laurent950

Staple1600

XLDnaute Barbatruc
Re

Désolé, mais le confinement m'oblige à m'amuser
VB:
Sub Test_RegEx()
PapyBrossard Range("A1:A4")
End Sub
Private Sub PapyBrossard(Rng As Range, Optional QUATRE_QUART As String = "4")
Dim C As Range, RE As Object, MC As Object, M As Object, I&
Set R = Rng
Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .Pattern = "\b\d{" & QUATRE_QUART & "}\b"
    For Each C In R
        If .test(C.Text) = True Then
        I = 0: Set MC = .Execute(C.Text)
        For Each M In MC
        I = I + 1: C.Offset(0, I) = M
        Next M
    End If
    Next C
End With
End Sub
PS: Je sais que c'est perfectible
(Mais je prends mon temps demain, je suis encore confiné ;)
 

patricktoulon

XLDnaute Barbatruc
ben non dans ces exemples c'est au début
l'espace ca definie ce qui est avant dans ton motif comme etant STRICTEMENT des numériques me si il y a le "*"

ce la dit j’adhère au motif de Staple1600 qui délimite la chaîne \dx par un début et une fin "\b" ce qui veux dire que \d{4} et non seulement la chaîne recherché mais aussi un "mot" a lui tout seul
 

laurent950

XLDnaute Barbatruc

Discussions similaires

Statistiques des forums

Discussions
314 730
Messages
2 112 275
Membres
111 487
dernier inscrit
MBen