OVH Cloud OVH Cloud

ExcelXP : recherche de caractère dans une immatriculation.

5 réponses
Avatar
Philippe PEREZ
Bonjour =E0 tous,

Dans un fichier, j'ai des immatriculation dans le format :
9999XXX99 ou 999WW99.
Je veux les modifier pour qu'elles apparaissent dans le=20
format 9999 XXX 99 ou 999 WW 99.
Ce qui revient =E0 chercher le premier caract=E8re non=20
num=E9rique, d'ins=E9rer un espace, de recherche le prochain=20
caract=E8re num=E9rique et d'ins=E9rer un espace.

Y-a-t-il une solution pour g=E9rer cela par Formule ?=20

En vous remerciant d'avance de votre aide.
Philippe PEREZ

5 réponses

Avatar
patrick.lyon
bonjour
la formule suivante fonctionne chez moi;
=SI(ESTNUM(CNUM(GAUCHE(DROITE(LC(-8);5);1)));GAUCHE(LC(-8);NBCAR(LC(-8))-4);GAUCHE(LC(-8);NBCAR(LC(-8))-5))&" -
"&SI(ESTNUM(CNUM(GAUCHE(DROITE(LC(-8);5);1)));STXT(LC(-8);NBCAR(LC(-8))-3;2);STXT(LC(-8);NBCAR(LC(-8))-4;3))&" -
"&DROITE(LC(-8);2)
je suis a ta dispo en cas de question
tu me diras si ça marche

"Philippe PEREZ" vient de nous annoncer :
Bonjour à tous,

Dans un fichier, j'ai des immatriculation dans le format :
9999XXX99 ou 999WW99.
Je veux les modifier pour qu'elles apparaissent dans le
format 9999 XXX 99 ou 999 WW 99.
Ce qui revient à chercher le premier caractère non
numérique, d'insérer un espace, de recherche le prochain
caractère numérique et d'insérer un espace.

Y-a-t-il une solution pour gérer cela par Formule ?

En vous remerciant d'avance de votre aide.
Philippe PEREZ


--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com

Avatar
Daniel.M
Salut Philippe,

Si tu veux une formule qui tient compte de tout les cas (nombre de chiffres
variables au début, à la fin, idem pour lettres), elle sera AMA très longue. En
fait, tu auras besoin d'une cellule pour maintenir un résultat intermédiaire.

C'est le genre de problème où tu effectues la conversion une fois et une
fonction VBA m'apparaît appropriée.

Je t'en propose une ci-dessous. Avec ton num d'immatriculation en A1, tu écris
en B1:
=Separer(A1)

Salutations,

Daniel M.

Public Function Separer(s As String) As String
Dim RE As Object, MS As Object ' RegExp et Match collection Objects

Set RE = CreateObject("VBScript.RegExp")
RE.IgnoreCase = True: RE.Global = False
RE.Pattern = "[^0-9]+": Set MS = RE.Execute(s)

If MS.Count > 0 Then
With MS(0)
Separer = Left(s, .firstindex) & " " & .Value & _
" " & Mid(s, .firstindex + .Length + 1, 999)
End With
Else
Separer = s
End If
Set MS = Nothing: Set RE = Nothing
End Function


"Philippe PEREZ" wrote in message
news:03bd01c3c55b$e51573b0$
Bonjour à tous,

Dans un fichier, j'ai des immatriculation dans le format :
9999XXX99 ou 999WW99.
Je veux les modifier pour qu'elles apparaissent dans le
format 9999 XXX 99 ou 999 WW 99.
Ce qui revient à chercher le premier caractère non
numérique, d'insérer un espace, de recherche le prochain
caractère numérique et d'insérer un espace.

Y-a-t-il une solution pour gérer cela par Formule ?

En vous remerciant d'avance de votre aide.
Philippe PEREZ
Avatar
AV
Une "courte" non tributaire du nombre de chiffres/lettres :
Matricielle :

=GAUCHE(A1;EQUIV(VRAI;CODE(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))>57;0)-1)&
"
"&STXT(A1;EQUIV(VRAI;CODE(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))>57;0);MAX(
SI(CODE(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))>57;LIGNE(INDIRECT("1:"&NBCAR
(A1)));""))-EQUIV(VRAI;CODE(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))>57;0)+1)
&"
"&STXT(A1;MAX(SI(CODE(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))>57;LIGNE(INDIR
ECT("1:"&NBCAR(A1)));""))+1;9^9)

AV
Avatar
Daniel.M
Jolie formule, Alain. :-)

Daniel M.
Avatar
AV
Jolie formule, Alain. :-)


Merci !
Pas vraiment testé si ça résiste à tous les cas de figure mais je ne fais pas de
souci : quand ça "le fait pas", il est rare que qqu'un ne signale pas la chose
;-)

AV