XL 2016 Rechercher 1er chiffre dans une chaine

Pexcel

XLDnaute Junior
Bonjour,
j'utilise ce code pour renvoyer le numéro ou se trouve l'espace sur ma chaîne de caractères.

VB:
espace = InStr(Cels.Offset(0, 0).Value, " ") ' renvoie le numéro de l espace

Je n'arrive pas à trouver comment on peut extraire le numéro de la position sur ma chaîne de caractère du premier chiffre exemple :

GH66959 - POSITION 3
F3458 POSITION2
AVH9875563 POSITION 4
OPI AA369989 POSITION 7

Si vous avez une idée, je suis preneur !

Merci.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

L'une ou l'autre de ces fonctions perso, parmi d'autres possibles :
VB:
Function NumPos(texte As String) As Integer
    Dim i As Long
    NumPos = -1
    For i = 1 To Len(texte)
        If Mid(texte, i, 1) Like "[0-9]" Then
            NumPos = i
            Exit For
        End If
    Next
End Function

Function NumPos2(texte As String) As Integer
    Dim i As Long
    NumPos2 = -1
    For i = 1 To Len(texte)
        If IsNumeric(Mid(texte, i, 1)) Then
            NumPos2 = i
            Exit For
        End If
    Next
End Function

Cordialement
 

job75

XLDnaute Barbatruc
Bonsoir Pexcel, Roblochon, CISCO,

Voyez les 2 solutions dans le fichier joint :

- matricielle en B2 =MIN(SIERREUR(TROUVE({0;1;2;3;4;5;6;7;8;9};A2);FAUX))

- fonction VBA en C2 =PosNum(A2)

avec son code impérativement dans un module standard (Module1) :
VB:
Function PosNum(c As Range)
PosNum = Evaluate("MIN(IFERROR(FIND({0,1,2,3,4,5,6,7,8,9}," & c.Address & "),FALSE))")
End Function
A+
 

Pièces jointes

  • Classeur(1).xlsm
    17.6 KB · Affichages: 7

job75

XLDnaute Barbatruc
Dans ce fichier (2) la formule est allégée =MIN(SIERREUR(TROUVE(LIGNE($1:$10)-1;A2);FAUX))
VB:
Function PosNum(c As Range)
PosNum = Evaluate("MIN(IFERROR(FIND(ROW(1:10)-1," & c.Address & "),FALSE))")
End Function
 

Pièces jointes

  • Classeur(2).xlsm
    17.9 KB · Affichages: 3

job75

XLDnaute Barbatruc
Cela dit en terme de rapidité il vaut mieux utiliser l'un des codes de Roblochon qu'évaluer une formule Excel matricielle, mais bon, c'était juste pour montrer ce qu'on peut faire.

Cela dit les formules Excel matricielles ne prennent pas plus de temps que les codes de Roblochon.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, PExcel, Roblochon, Cisco, job75

Une autre formule cette fois-ci non matricielle.
=STXT(A1;MIN(CHERCHE({0.1.2.3.4.5.6.7.8.9};A1&"0123456789"));1)

NB: Qu'elle prenne plus ou moins de temps ne retient pas mon attention.
C'est juste une possibilité de plus de faire ce qui est demandé
(J'ai ajouté le STXT pour extraire le 1er chiffre, si on ne veut que la position, il suffit de supprimer le STXT)
Ce qui donnera:
=MIN(CHERCHE({0.1.2.3.4.5.6.7.8.9};A1&"0123456789"))
 

job75

XLDnaute Barbatruc
Pour tester les durées des calculs j'ai recopié les 4 1ères lignes sur 100 000 lignes.

Formules Excel :

- post #2 => 0,81 seconde (matricielle)

- post #5 => 0,14 seconde (matricielle)

- post #6 => 0,15 seconde (matricielle)

- post #8 => 0,07 seconde

- post #12 => 0,13 seconde

Fonctions VBA :

- post #2 NumPos => 0,53 seconde

- post #2 NumPos2 => 0,54 seconde

- post #5 => 8,2 seconde

- post #6 => 8,4 seconde.
 

Discussions similaires

Réponses
12
Affichages
531

Statistiques des forums

Discussions
312 310
Messages
2 087 128
Membres
103 479
dernier inscrit
Compta