Isoler une partie de texte avec une position variable ?

Bonjour,

Je viens vers vous aujourd'hui pour avoir vos lumières. En effet, vous trouverez en PJ un tableau expliquant mon problème. J'ai une cellule contenant un descriptif assez long. Et j'aimerais isoler 2 références à partir de ce descriptif : Le NCA et le NCR. Je sais que le NCA a 4 chiffres et le NCR 5 chiffres et que l'un comme l'autre peuvent être placés qu'au début (à gauche) et non pas à la fin. Le problème, c'est que la nomenclature utilisée peut changer d'une cellule à une autre comme joint dans l'exemple, sinon cela serait trop facile et il suffirait d'utiliser la fonction GAUCHE. Avez-vous une idée pour que je clean le fichier en faisant ressortir les NCA et NCR pour chaque descriptif dans deux nouvelles colonnes ? Je pense que cela sera plus parlant avec l'exemple.

Merci à vous. Bonne journée.

17test.xlsx (9.20 Ko)

Bonjour et

Tu peux utiliser les expressions régulières de type "[0-9]{4}" avec quelques aménagements ...

6test.xlsm (14.28 Ko)

Salut ! Merci de ta réponse ! Mais comment l’utiliser et surtout comment différencier les deux cas car il y a deux chaînes de valeurs une à 4 et l’autre à 5 ? Merci.

EDIT: J’avais pas vu ton fichier. Je checke !

EDIT2: Il y a une macro ? J'ai ça dans la cellule :

=GAUCHE(ChercheChaine(B4;"[0-9]{4}[ .]");4)

et là j'ai pas accès à mon onglet "Développeur" donc je ne sais pas s'il y a une macro qui doit tourner. En tout cas, avec cette formule, si les chiffres sont à la fin cela ne te les prendra pas en compte, on est d'accord ? Merci.

capture d ecran 420

En tout cas, avec cette formule, si les chiffres sont à la fin cela ne te les prendra pas en compte, on est d'accord ? Merci.

correction pour ce cas

6test.xlsm (14.31 Ko)

Merci ! Je teste Lundi avec le bon ordinateur et le bon fichier. Mais ça couvre que mes exemples où toutes les possibilités ? Et ça marche bien que si les numéros sont en début et pas à la fin ?

Un peu d'explications ...

Avec ceci "[0-9]{4}" je cherche des chiffres de 0 à 9 ... 4 fois.

Pour ne pas prendre les sous-ensembles de 5 chiffres, je fais suivre d'un séparateur : espace ou point mais on pourrait en mettre d'autres, voire même une lettre "[0-9]{4}[ .]"

Et ensuite j'enlève le séparateur en prenant les 4 caractères à gauche.

Comme en effet je n'avais pas les chiffres calés en fin de texte, j'ai ajouté fictivement un séparateur (espace) après B4

=GAUCHE(ChercheChaine(B4&" ";"[0-9]{4}[ .]");4)

on pourrait en mettre d'autres, voire même une lettre

Donc autre proposition

=GAUCHE(ChercheChaine(B4&" ";"[0-9]{4}\D");4)

et

=GAUCHE(ChercheChaine(B4&" ";"[0-9]{5}\D");5)

sachant que \D veut dire tout sauf un chiffre

Bonjour,

Multipost !...

bonsoir,

une autre proposition

7crama.xlsm (16.63 Ko)

Merci ! Je teste Lundi. Et s’il y a 2 chaînes de 5 ou 4 chiffres, ça m’indique les deux ou ça prend que le premier ?

Bonsoir,

Je suppose que tu n'as pas eu l'occasion d'ouvrir le fichier.

les résultats sont identiques à celui des exemples que tu as donnés. Enfin il me semble.

Si, si, j’ai bien vu, mais je préférai demander. Je teste demain ! Merci.

Bonjour,

C'est compliqué cette période avec les VPN qui sature, j'essaie tant bien que mal d'implanter les propositions. J'ai essayé avec le "crama", que dois-je faire ? J'ai tapé le code dans le "Développeur" et ensuite =la fonction définie dans la cellule mais cela ne la reconnaît pas. Dois-je faire quelque chose entre les deux étapes ?

EDIT: En fait, si, ça la reconnaît, mais ça me met "Seuls des commentaires peuvent être mis après le End_Function" du code.

Bon, c'est surtout compliqué de te suivre ... as-tu testé le fichier que j'ai posté ainsi que celui de h2so4 ?

Renvoie nous ton fichier même épuré, on le réparera au niveau du code VBA.

Il doit être (en ce qui me concerne) comme ceci :

capture d ecran 425

Bonjour à tous,

1 vérifie que la fonction proposée te convient, fais des tests avec le fichier que j'ai mis.

2 si la fonction te convient, et que tu veux l'utiliser dans un autre classeur voici la procédure à suivre.

procédure :

copier le code de la fonction(sélectionner le code ci-dessous puis ctrl-C)

ouvrir le classeur dans lequel tu veux utiliser la fonction

faire F11 pour ouvrir la fenetre VBE (éditeur VBA)

faire insérer->module

coller le code avec ctrl-V

faire F11 pour revenir à Excel

sauver le classeur avec macros (extension .xlsm)

la fonction est maintenant disponible pour être utilisée dans une cellule excel.

utilisation de la fonction

=ncancr(texte,type)

où texte est le texte dont il faut extraire les NCA ou les NCR, type=1 pour extraire les NCA, type=2 pour extraire les NCR

code de la fonction

Function ncancr(r, v)
    'fonction qui renvoie les numéros NCA (v=1) ou NCR(v=2) se trouvant dans la chaine de caractères r
    '
    r = Replace(Replace(Replace(Replace(r, "NCA", ""), "NCR", ""), "/", " "), ".", " ")
    t = Split(r & " ", " ")
    nca = ""
    ncr = ""
    For i = LBound(t) To UBound(t)
        If t(i) <> "" Then
            If t(i) Like "####" Then
                nca = nca & IIf(nca = "", "", " / ") & t(i)
            ElseIf t(i) Like "#####" Then
                ncr = ncr & IIf(ncr = "", "", " / ") & t(i)
            Else
                Exit For
            End If
        End If
    Next i
    If v = 1 Then
        ncancr = nca
    Else
        ncancr = ncr
    End If
End Function

Cette procédure d'installation du code, convient également pour la solution de Steelson.

Merci ! J'ai testé, et cela ne fonctionne par pour tous mes cas.

UPDATE:

J'ai regardé mes 4000 lignes, il y a "seulement" 400 valeurs uniques avec plusieurs cas de figure :

1) La cellule contient que du texte.

2) La cellule ne contient aucun nombre à 4 ou 5 chiffres.

3) La cellule contient un seul nombre à 4 chiffres.

4) La cellule contient plusieurs nombres à 4 chiffres.

5) La cellule contient un seul nombre à 5 chiffres.

6) La cellule contient plusieurs nombres à 5 chiffres.

7) La cellule contient un nombre à 4 chiffres et un nombre à 5 chiffres.

8) La cellule contient plusieurs nombres à 4 chiffres et un nombre à 5 chiffres.

9) La cellule contient plusieurs nombres à 4 chiffres et plusieurs nombres à 5 chiffres.

Ces derniers peuvent être séparés par un espace, un ".", un "/" ou par la dénomination NCA et NCR. Ces nombres se trouvent souvent au début, parfois au milieu et d'autres fois à la fin (Milieu = 1234 blabla 1235 78900 blabla).

Le but ? Extraire dans une colonne TOUS les nombres à 4 chiffres d'une cellule et dans une autre colonne TOUS les nombres à 5 chiffres de cette même cellule. Si plusieurs chiffres, idéalement, faire l'extraction avec un séparateur type "/".

Je ne sais pas si je suis clair. Du coup, en sachant ça, quelle formule fonctionne dans chacun de ces cas pour que je fasse le teste ? Merci !

Merci de préciser quelle solution tu as utilisée ...

La demande évolue ...

que le NCA a 4 chiffres et le NCR 5 chiffres et que l'un comme l'autre peuvent être placés qu'au début (à gauche) et non pas à la fin

Le but ? Extraire dans une colonne TOUS les nombres à 4 chiffres d'une cellule et dans une autre colonne TOUS les nombres à 5 chiffres de cette même cellule. Si plusieurs chiffres, idéalement, faire l'extraction avec un séparateur type "/".

Pour ma part je peux en effet tenir compte de tous les nombres à 4 chiffres et tous ceux à 5 chiffres ... dis-moi si ma solution t'intéresse !

Bonjour à tous,

effectivement la demande a évolué, voici le code adapté pour extraire toutes les occurrences de 4 ou de 5 chiffres présentes dans le texte

Function ncancr(r, v)
    'fonction qui renvoie les numéros NCA (v=1) ou NCR(v=2) se trouvant dans la chaine de caractères r
    '
    r = Replace(Replace(Replace(Replace(r, "NCA", ""), "NCR", ""), "/", " "), ".", " ")
    t = Split(r & " ", " ")
    nca = ""
    ncr = ""
    For i = LBound(t) To UBound(t)
        If t(i) <> "" Then
            If t(i) Like "####" Then
                nca = nca & IIf(nca = "", "", " / ") & t(i)
            ElseIf t(i) Like "#####" Then
                ncr = ncr & IIf(ncr = "", "", " / ") & t(i)
            'Else
            '    Exit For
            End If
        End If
    Next i
    If v = 1 Then
        ncancr = nca
    Else
        ncancr = ncr
    End If
End Function

Bonjour à tous,

effectivement la demande a évolué, voici le code adapté pour extraire toutes les occurrences de 4 ou de 5 chiffres présentes dans le texte

Function ncancr(r, v)
    'fonction qui renvoie les numéros NCA (v=1) ou NCR(v=2) se trouvant dans la chaine de caractères r
    '
    r = Replace(Replace(Replace(Replace(r, "NCA", ""), "NCR", ""), "/", " "), ".", " ")
    t = Split(r & " ", " ")
    nca = ""
    ncr = ""
    For i = LBound(t) To UBound(t)
        If t(i) <> "" Then
            If t(i) Like "####" Then
                nca = nca & IIf(nca = "", "", " / ") & t(i)
            ElseIf t(i) Like "#####" Then
                ncr = ncr & IIf(ncr = "", "", " / ") & t(i)
            'Else
            '    Exit For
            End If
        End If
    Next i
    If v = 1 Then
        ncancr = nca
    Else
        ncancr = ncr
    End If
End Function

Salut ! Il faut que je réalise plusieurs checks de cohérence mais à première vue, cela fonctionne parfaitement ! Je te referai un retour à l'usage, mais cette fonction semble faire ce que je souhaite. Un grand merci à toi !

Rechercher des sujets similaires à "isoler partie texte position variable"