Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

extraction du dernier mot d'une chaîne de caractères

  • Initiateur de la discussion andré
  • Date de début
A

andré

Guest
Salut à vous tous,

C'est dimanche, et je ne suis pas bien reveillé (lol) !

Je ne me souviens plus comment on extrait le dernier mot d'une chaîne de caractères.
Exemple : "C'est aujourd'hui dimanche " devrait me renvoyer "dimanche" (sans les guillements) - 3 mots et 2 espaces
Mais "Et demain ce sera lundi" devrait renvoyer "lundi" - 5 mots et 4 espaces.

Quelqu'un peut-il me rafraîchir la mémoire ?

Ândré.
 
T

Ti

Guest
je me permets de remettre ton fichier corrigé André (avec dans ma formule $A$1 plutôt que B2, sinon si on étire la formule, on risque d'avoir des surprises) puisqu'il restera probablement là comme référence de ce fil.

Dans la foulée, en rajoutant le test, je supprimer l'erreur en cas de cellule vide
 

Pièces jointes

  • dernier_mot2.zip
    5.1 KB · Affichages: 98
A

andré

Guest
Resalut Ti,

Voilà qui est mieux,

Je te propose deux choses :

La première est d'attendre l'intervention de Monique, je suis sur qu'elle trouvera la parade à la formule qu'elle nous a proposée.

La seconde serait d'ajouter la macro que tu as concoctée avec @+Thierry, mais n'ayant pas l'habitude des macros, je me demande ce qui serait le plus facile pour la déclencher : un bouton, une évenementielle ou un double-click ?

Ainsi la petite pièce jointe pourra faire réference pour des questions similaires.

Je bute toutefois encore sur un problème : je souhaite employer l'une de ces formules pour une mise en forme conditionnelle, c'est à dire repérer dans une plage toutes les cellules dont le texte se termine par le même mot.
Je n'y parviens pas.
Pour me faciliter la tâche, j'ai essayé d'abord de le faire sur base du premier mot en ajoutant "extraction" en B3, mais la formule suivante me renvoie 0 :
=NB.SI(B2:B3;GAUCHE(B2;CHERCHE(" ";B2;1)-1))

Quelqu'un aurait-il vu mon erreur ?

Ândré.
 
T

Ti

Guest
pour la formule de Monique, il suffit d'ajouter SI(ESTERREUR(CHERCHE(" ";A1));"";...), mais cette formule ne renvoie rien si la cellule ne contient aucun espace.

pour la macro il n'y a besoin de rien pour la déclencher, on la copie dans un module, puis on l'utilise comme une fonction ordinaire d'Excel, mais évidemment ça nous simplifie la vie, puisqu'il suffit d'écrire :

=LastWord(A1)

concernant la MFC, je ne vois pas comment tu t'y es pris :
"Extraction", c'est un mot que tu as rajouté ? Et le mot que tu testes, c'est toujours le même ? (par exemple, appliquer la MFC si la cellule se termine par le mot "un")
 
M

Monique

Guest
Bonjour,

La formule de Disciplus mise au conditionnel (mais elle a 2 conditions : cellule vide et pas d'espace)
=SI(B$2="";"";SI(NBCAR(B$2)=NBCAR(SUBSTITUE(B$2;" ";""));B$2;DROITE(B$2;EQUIV(" ";STXT(B$2;NBCAR(B$2)-LIGNE(INDIRECT("1:"&NBCAR(B$2)));1);0))))

et raccourcie en remplaçant Ligne(Indirect()) par le nb max de caractères que peut contenir une cellule (mais ça peut changer avec les nouvelles versions)
=SI(B$2="";"";SI(NBCAR(B$2)=NBCAR(SUBSTITUE(B$2;" ";""));B$2;DROITE(B$2;EQUIV(" ";STXT(B$2;NBCAR(B$2)-LIGNE($A$1:$A$32767);1);0))))

Celle de Ti raccourcie avec le 32767 :
=STXT(B$2;MAX(LIGNE(DECALER(B$1;;;32767))*((STXT(B$2;LIGNE(DECALER(B$1;;;32767));1)=" ")*1))+1;NBCAR(B$2))
 
M

Monique

Guest
Re,

La formule de Ti n'a pas besoin de Decaler() si on met 32767
=STXT(B$2;MAX(LIGNE($B$1:$B$32767)*((STXT(B$2;LIGNE($B$1:$B$32767);1)=" ")*1))+1;NBCAR(B$2))
 
T

Ti

Guest
Bonjour Monique,

pour une fois je n'approuve pas ta correction, il est préférable de garder DECALER pour restreindre la taille des tableaux de la formule matricielle à la zone minimale nécessaire (c'est à dire au nombre de caractères du mot de la cellule).

Pour s'en convaincre, il suffit de déboguer la formule en utilisant l'évaluateur de formules : Excel plante en essayant d'afficher ces gigantesque tableaux de plus de 30000 valeurs !

au final, ma formule est plus longue, mais plus rapide avec DECALER que sans.

En tout cas cette question banale aura produit un fil de longueur respectable !
 
A

andré

Guest
Salut à vous tous,

Effectivement, on ne battra certainement pas un record, mais ce fil devient très long.
C'est peut-être parce qu'il est intéressant (les autres aussi ! - lol)

Ce que j'essaie de faire est de retrouver les doublons dans une plage par une MFC, mais uniquement sur le dernier mot (ou le premier).
On a déjà des méthodes pour l'extraire, mais pas encore pour les comparer.

Exemple :
B2 : extraction du dernier mot d'une chaîne de caractères.
B3 : extraction du dernier mot
B4 : une chaîne de caractères

Je souhaite que les cellules B2 et B3 se mettent en format de MFC si je demande, par la formule, une comparaison sur le premier mot,
et que les cellules B2 et B4 se mettent en format de MFC si c'est le dernier mot qui est demandé par la formule.

J'avais testé sur le premier mot, car la formule est moins longue.
Mais c'est pas évident (sans créer de colonne supplémentaire) !
Alors si quelqu'un avait une idée ?

Ândré.
 
J

Jean-Marie

Guest
Bonjour Tout le monde

32767 est le nombre de caractères maxi qu'une cellule peut contenir, pour info, il n'y a que les 1024 premiers caractères qui sont affichés.

André, si tu as dit ce que tu voulais faire au départ de ton fil, je n'aurai pas chercher une fonction matricielle qui ne fonctionne pas sur une MFC.

@+Jean-Marie
 
A

andré

Guest
Salut Jean-Marie,

Avec toutes mes excuses !
Mais cela a quand même fait avancer le schmilblick.

Je ne savais pas que les formules matricielles ne fonctionnent pas pour les MFC, voilà quelque chose d'appris en plus.

En réalité je cherche à mettre une MFC sur les cellules dont une partie est identique (par exemple le premier ou le dernier mot).
La fonction NB.SI n'a pas l'air de vouloir accepter ma formule comme critère.
Je puis facilement le faire par le truchement d'une colonne supplémentaire dans laquelle j'extrais le premier ou le dernier mot, mais j'avais espéré pouvoir le faire sans !

Merci pour le coup de main que tu m'as donné, même si ce n'est pas la solution que j'attendais.

Ândré.
 
M

Monique

Guest
Bonjour,

Mais si, la MEFC accepte les formules matricielles (sans validation matricielle)
En B2 : plusieurs mots quelconques.
En B10 : un ou plusieurs mots.
On veut savoir si B2 et B10 ont le même dernier mot.
La formule de la MEFC :
=STXT(B$2;MAX(LIGNE(DECALER($B$1;;;NBCAR(B$2)))*((STXT(B$2;LIGNE(DECALER($B$1;;;NBCAR(B$2)));1)=" ")*1))+1;NBCAR(B$2))=STXT(B10;MAX(LIGNE(DECALER($B$1;;;NBCAR(B10)))*((STXT(B10;LIGNE(DECALER($B$1;;;NBCAR(B10)));1)=" ")*1))+1;NBCAR(B10))

Un mot seulement en B2, un ou plusieurs en B10
On veut savoir si le mot ou le dernier mot de B10 est le mot contenu en B2.
La formule de la MEFC :
=B$2=STXT(B10;MAX(LIGNE(DECALER($B$1;;;NBCAR(B10)))*((STXT(B10;LIGNE(DECALER($B$1;;;NBCAR(B10)));1)=" ")*1))+1;NBCAR(B10))
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…