Le 04/09/2010 03:14, lutch a écrit :
Le 31/08/10 17:45, Serge a écrit :
Grand merci à tous !
En réalité, c'est plus compliqué parce que les libellés peuvent
être divers (il y en a même du type : Le nombre d'occurrence
est compris entre ... et ...).
Donc je retiens l'idée de récupérer les formules à la main et de
faire ce que j'ai à faire.
Par contre, vos autres suggestions m'ont fait découvrir des
fonctions dont je n'avais pas idée.
Ce forum est une mine.
Je regrette seulement de n'avoir à ce jour jamais pu venir en aide.
Bonjour,
problème intrigant, donc intéressant.
Je m'y suis collé et voici une méthode que je propose. C'est un
premier jet, améliorable sans doute. Il y a des gisements de
simplification.
Sous réserve de viabilité tous usages, je compte bien me servir de
ça pour nettoyer certains fichiers boiteux qu'on me demande
régulièrement d'exploiter comme source de données.
Données du problème, telles que je les ai comprises
- les expressions varient arbitrairement,
- les valeurs sont de longueur variable, mais se trouvent toujours en
dernière position dans la cellule
Données du tableau de test : libellé+valeur
cellules A1:A7
mot1 mot2 mot3 mot4 mot5 mot6 MOT7 123
mot1 mot2 mot3 mot4 mot5 mot6 MOT7 123456789
mot1 mot2 mot3 mot4 mot5 mot6 MOT7 125
mot1 mot2 mot3 mot4 126
mot1 mot2 mot3 mot4 mot5 mot6 MOT7 127
mot1 mot2 mot3 mot4 mot5 mot6 128
mot1 mot2 mot3 DERNIERMOT
En B1, la formule =DROITE(A1;NBCAR(A1)-CHERCHE(-;SUBSTITUE(A1;
;-;NBCAR(A1)-NBCAR(SUBSTITUE(A1; ;)));1))
résultat : 123
En B7, la formule =DROITE(A7;NBCAR(A7)-CHERCHE(-;SUBSTITUE(A7;
;-;NBCAR(A7)-NBCAR(SUBSTITUE(A7; ;)));1))
résultat : DERNIERMOT
Explications sommaires
SUBSTITUE(A1; ;)
remplace toutes les espaces de la cellule A1
NBCAR(A1)-NBCAR(SUBSTITUE(A1; ;)
calcule la différence du nombre de caractères avec et sans espaces, ce
qui donne le rang (occurrence) de la dernière espace
SUBSTITUE(A1; ;-;NBCAR(A1)-NBCAR(SUBSTITUE(A1; ;)
remplace cette dernière espace, donc située avant le dernier mot
CHERCHE(-
cherche la position exacte de ce -,
par la soustraction
[nombre de caractères total]-[position du -]
on obtient le nombre de caractères à partir de la droite à extraire de
l'expression initiale pour ne récupérer que le dernier mot de la
cellule, c'est-à-dire la valeur.
J'espère être encore compréhensible malgré l'heure tardive.
C_Lucien
/Pourvu que ça serve/
Bonjour à toutes et tous,
humour ON
C'est pourtant facile :-P
/humour off
Première réserve importante : il ne doit pas y avoir d'espaces avant ou
après. Il faut donc traiter éventuellement avec SUPPRESPACE()
Alors voila, si le texte est en A1, la formule simple :o est :
=DROITE(SUBSTITUE(A1; ; CAR(255); NBCAR(A1) - NBCAR(SUBSTITUE(A1;
;))); NBCAR(SUBSTITUE(A1; ; CAR(255); NBCAR(A1) -
NBCAR(SUBSTITUE(A1; ; - (TROUVE(CAR(255); SUBSTITUE(A1; ;
CAR(255); NBCAR(A1) - NBCAR(SUBSTITUE(A1; ;))
Mouais... En détail, ça donne, si le texte est en A1, en B1 on a :
=NBCAR(A1) - NBCAR(SUBSTITUE(A1; ;))
Ici, on cherche le nombre d'espaces.
En C1:
=SUBSTITUE(A1; ; CAR(255); B1)
Ici, on échange le dernier espace avec un caractère peu usité, code
Ascii 255 (ÿ)
En D1 :
=TROUVE(CAR(255); C1)
On cherche la position de ce caractère.
En E1 :
=DROITE(A1; NBCAR(A1) - D1)
Résultat final. Ouf ! :-)
En suivant ce principe, on peut extraire des portions centrales avec
STXT, mais là aussi, ce sera un peu plus complexe.
En espérant aider un peu,
Bon surf,
Christian
--
Visitez http://christianwtd.free.fr/ pour débuter avec Calc, d'OpenOffice.org
-
To unsubscribe, e-mail: users-unsubscr...@fr.openoffice.org
For additional commands, e-mail: users-h...@fr.openoffice.org