XL 2016 Rechercher 1er chiffre dans une chaine

  • Initiateur de la discussion Initiateur de la discussion Pexcel
  • 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 !

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

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.
 
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"))
 
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.
 
- 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

Discussions similaires

Retour