OVH Cloud OVH Cloud

index(equiv()) juste pous savoir

8 réponses
Avatar
poy-poy
Bonjour,

J'ai en colonne A une serie de text ayant des nombres au centre.
exemple : PA3405Y, DU546XD, N345TVR, 897-B-983Z...
Je souhaiterais obtenir le début du text jusqu'à la dernière partie de text.
Soit pour le premier PA3405, le second DU546...
J'ai trouvé comment testé si c'est un nombre par
isnumber(value(left(right(A1,2),1))). Mais ceci m'oblige à faire 5 si
imbriqué pour testé si les 5 derniers charactères sont du texte ou des
nombres.

j'aurais voulu utiliser un index(matcth()), malheureusement les vecteurs
initiaux refusent que je mettes une formule, ie
index({A1;left(A1,len(A1)-1)...},match(true,{isnumber(value(right(A1,1))),isnumber(value(left(right(A1,2),1))),..},0),1)
plante à la fois dans l'index et dans le match :-!

Existe-il une possibilité pour rentrer des formules à la place des vecteurs
initiaux ?
Sinon, voyez vous un moyen de simplifier la formule ?

Codialement
Benjamin

8 réponses

Avatar
Daniel.M
Salut Benjamin,

J'ai en colonne A une serie de text ayant des nombres au centre.
exemple : PA3405Y, DU546XD, N345TVR, 897-B-983Z...
Je souhaiterais obtenir le début du text jusqu'à la dernière partie de text.



Si tu cherches à récupérer l'ensemble des caractères d'une chaîne jusqu'au
dernier chiffre, avec ta chaîne en A1, la matricielle (Ctrl-Maj-Entrée)
suivante:

=GAUCHE(A1;EQUIV(2;1/STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)))


Salutations,

Daniel M.

Avatar
Daniel.M
=GAUCHE(A1;EQUIV(2;1/STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)))


Celle ci-dessous est plus indiquée (pour traiter convenablement les 0). C'est
toujours une matricielle :
=GAUCHE(A1;EQUIV(1;STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)-9))

J'attends ton feedback.

Salutations,

Daniel M.

Avatar
poy-poy
Salut Daniel,

c'est effectivement cela que je cherche, mais je dois mal traduire en
anglais une des fonctions car je n'obtiens pas ce que je veux :-P

GAUCHE(A1;EQUIV(2;1/STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)))
J'ai remplace left, match, find/search, row,indirect,len.
Je pense que le find doit être autre chose mais je ne vois pas quoi.
Pour le moment, j'ai un vecteur composé de 1, 2, 3..jusqu'au nombre de
charactère de ma chaîne.

Je ne comprends pas quelle peut être la fonction stxt sachant qu'il faut
qu'elle me sorte 0.5 pour le bon emplacement du vecteur.

Codialement
benjamin



Salut Benjamin,

J'ai en colonne A une serie de text ayant des nombres au centre.
exemple : PA3405Y, DU546XD, N345TVR, 897-B-983Z...
Je souhaiterais obtenir le début du text jusqu'à la dernière partie de text.



Si tu cherches à récupérer l'ensemble des caractères d'une chaîne jusqu'au
dernier chiffre, avec ta chaîne en A1, la matricielle (Ctrl-Maj-Entrée)
suivante:

=GAUCHE(A1;EQUIV(2;1/STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)))


Salutations,

Daniel M.






Avatar
isabelle
bonjour poy-poy,

=LEFT(A1;MATCH(2;1/MID(A1,ROW(INDIRECT("1:"&LEN(A1)));1)))

isabelle


Salut Daniel,

c'est effectivement cela que je cherche, mais je dois mal traduire en
anglais une des fonctions car je n'obtiens pas ce que je veux :-P

GAUCHE(A1;EQUIV(2;1/STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)))
J'ai remplace left, match, find/search, row,indirect,len.
Je pense que le find doit être autre chose mais je ne vois pas quoi.
Pour le moment, j'ai un vecteur composé de 1, 2, 3..jusqu'au nombre de
charactère de ma chaîne.

Je ne comprends pas quelle peut être la fonction stxt sachant qu'il faut
qu'elle me sorte 0.5 pour le bon emplacement du vecteur.

Codialement
benjamin


Salut Benjamin,

J'ai en colonne A une serie de text ayant des nombres au centre.
exemple : PA3405Y, DU546XD, N345TVR, 897-B-983Z...
Je souhaiterais obtenir le début du text jusqu'à la dernière partie de text.



Si tu cherches à récupérer l'ensemble des caractères d'une chaîne jusqu'au
dernier chiffre, avec ta chaîne en A1, la matricielle (Ctrl-Maj-Entrée)
suivante:

=GAUCHE(A1;EQUIV(2;1/STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)))


Salutations,

Daniel M.








Avatar
Daniel.M
Isabelle,

=LEFT(A1;MATCH(2;1/MID(A1,ROW(INDIRECT("1:"&LEN(A1)));1)))


Il faut aussi traduire les ";"

Pour la dernière formule:
=LEFT(A1,MATCH(1,MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)-9))

Salutations,

Daniel M.

Avatar
poy-poy
Bonjour Daniel et Isabelle,

Merci pour vos réponses cela marche...Mais j'avoue que je ne comprends pas
pourquoi !!

En effet, pourquoi est ce que le match (1;{#value!;-8;-4;-7;#value!}) me
resort 4 ?!?!? Il devrait me sortir la position du nombre le plus proche de 1
soit 3 non ?

Dernière question, puis-je transformer la fonction pour la passer sous vba ?
Ie est-il possible de faire des matricielles sous vba ?

Merci déjà pour la formule, elle est nickel !

Codialement
benjamin


Isabelle,

=LEFT(A1;MATCH(2;1/MID(A1,ROW(INDIRECT("1:"&LEN(A1)));1)))


Il faut aussi traduire les ";"

Pour la dernière formule:
=LEFT(A1,MATCH(1,MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)-9))

Salutations,

Daniel M.






Avatar
Daniel.M
Salut,

En effet, pourquoi est ce que le match (1;{#value!;-8;-4;-7;#value!}) me
resort 4 ?!?!? Il devrait me sortir la position du nombre le plus proche de 1
soit 3 non ?


Non. Il va te sortir le dernier nombre (car tous les nombres sont plus petits
que 1) parce qu'il 'pense' que le tableau est TRIÉ de façon ascendante.
Va voir l'aide de Match() avec 1 comme dernier paramètre.


Dernière question, puis-je transformer la fonction pour la passer sous vba ?


En VBA, tu disposes de d'autres outils qui sont parfois plus appropriés pour
résoudre tes tâches.

Dim i As Integer, j As Integer, s As String

s = Range("A1")

For i = Len(s) To 1 Step -1
j = Asc(Mid(s, i, 1))
If j >= 48 And j <= 57 Then ' c'est un nombre
Exit For
End If

Next i
If i = 0 Then i = Len(s)
s = Left(s, i)

Ie est-il possible de faire des matricielles sous vba ?
Oui, tu peux passer ta formule (sous forme de string) à la fonction Evaluate.




Merci déjà pour la formule, elle est nickel !


Pas de problème.

Salutations,

Daniel M.

Avatar
poy-poy
Merci beaucoup,

le code, la formule, les explications, tout marche !!!

Cordialement
benjamin


Salut,

En effet, pourquoi est ce que le match (1;{#value!;-8;-4;-7;#value!}) me
resort 4 ?!?!? Il devrait me sortir la position du nombre le plus proche de 1
soit 3 non ?


Non. Il va te sortir le dernier nombre (car tous les nombres sont plus petits
que 1) parce qu'il 'pense' que le tableau est TRIÉ de façon ascendante.
Va voir l'aide de Match() avec 1 comme dernier paramètre.


Dernière question, puis-je transformer la fonction pour la passer sous vba ?


En VBA, tu disposes de d'autres outils qui sont parfois plus appropriés pour
résoudre tes tâches.

Dim i As Integer, j As Integer, s As String

s = Range("A1")

For i = Len(s) To 1 Step -1
j = Asc(Mid(s, i, 1))
If j >= 48 And j <= 57 Then ' c'est un nombre
Exit For
End If

Next i
If i = 0 Then i = Len(s)
s = Left(s, i)

Ie est-il possible de faire des matricielles sous vba ?
Oui, tu peux passer ta formule (sous forme de string) à la fonction Evaluate.




Merci déjà pour la formule, elle est nickel !


Pas de problème.

Salutations,

Daniel M.