Extraction d'informations dans une chaine de caractère

mike14

XLDnaute Nouveau
Bonjour,

Je viens sur ce forum car j'ai besoin d'aide pour extraire des données contenues dans une case.

J'ai une case remplie de la sorte :

1 chat 3 lapin 5 chat 2 chat 4 voiture 2 chat

D'une chaine de caractère de ce genre j'aimerai extraire la somme de tous les nombres situés devant la chaine "chat", le résultat souhaité est : 1+5+2+2=10

le top serait de faire cela avec des formules

Merci d'avance pour votre aide

Edit : oui ça fait bien 10 et pas 8 merci
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Extraction d'informations dans une chaine de caractère

Bonjour mike14.

A ça, c'est vrai, je n'avai pas prévu le cas "chat 1", "chat 2"... D'ailleurs, pourquoi tu les appelles comme ça tes chats ? C'est bien plus mignon Félicette, Mélodie, Grisous...

Bon, plus sérieusement, bien sûr que c'est compréhensible... Apparemment, tu as bien compris la méthode. C'est du bricolage, mais ça marche. Si quelqu'un trouve une astuce pour ne pas avoir à écrire les 52 SUBSTITUE, cela serait aussi pas mal...

@ plus
 

Staple1600

XLDnaute Barbatruc
Re : Extraction d'informations dans une chaine de caractère

Bonjour à tous

@hamcec
Pour info, l'espace est le séparateur par défaut de Split
tu peux donc écrire
MonTableau = Split(A_Chaine) au lieu de MonTableau = Split(A_Chaine, " ")

EDITION:
JNP si tu passes par ici ;) (un petit coup de main serait le bienvenu)
Voici un essai perfectible utilisant RegExp
Fonctionne avec une chaine du type:
chat1 + chat 3 + to250to
VB:
Function SumContents(s As String) As Double
On Error GoTo exit_here
With CreateObject("vbscript.regexp")
    .Pattern = "[^\d\+]"
    .Global = True
    SumContents = Evaluate(.Replace(s, ""))
End With
Exit Function
exit_here:
    SumContents = 0
End Function 'auteur:Richard Schollar
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Extraction d'informations dans une chaine de caractère

Re


Avec cette modif, c'est déjà un peu mieux
Fonctionne avec une chaine de ce type
si en A1 : Chat 1 Chat 4 Chat20
saisir en B1 : =SOMCELL(A1) renvoie : 25
VB:
Function SOMCELL(s As String) As Double 'j'ai "francisé" le nom
On Error GoTo exit_here
s = Replace(s, " ", "+") 'modif
With CreateObject("vbscript.regexp")
    .Pattern = "[^\d\+]"
    .Global = True
    SOMCELL = Evaluate(.Replace(s, ""))
End With
Exit Function
exit_here:
    SOMCELL = 0
End Function 'auteur:Richard Schollar
 

CISCO

XLDnaute Barbatruc
Re : Extraction d'informations dans une chaine de caractère

Bonjour à tous, bonjour Monique, Bonjour et bravo

Je vais essayer de comprendre ta formule matricielle. Vraiment, chapeau...

Ceci dit, il y a un petit truc étrange dans le fichier en pièce jointe, que je n'avai jamais vu sur d'autres fichiers : En E7, E8, E9, je vois le texte écrit en E2, comme ci il était écrit avec une police très très claire. Idem en E14... E18 avec le texte écrit en E11. Etrange.

@ plus
 

CISCO

XLDnaute Barbatruc
Re : Extraction d'informations dans une chaine de caractère

Bonjour à tous, bonjour Monique

OK pour la mise en forme conditionnelle.

J'essaye de comprendre ta dernière formule matricielle. Bien vu l'utilisation du No_position dans SUBSTITUE. J'ai tendance à oublier l'existence de ce paramètre dans cette fonction. Les 10^5 sont-ils vraiment indispensables dans ta dernière proposition ?

@ plus
 
Dernière édition:

Monique

Nous a quitté
Repose en paix
Re : Extraction d'informations dans une chaine de caractère

Bonjour,

Le 10^5 ne sert à rien, il n’a servi que dans des essais
En fait, on peut l’écrire comme ça

=SOMME(SI(ESTNUM(TROUVE("$";" "&SUBSTITUE(B2;" chat";"$";LIGNE(INDIRECT(1&":"&NBCAR(B2))))));STXT(" "&SUBSTITUE(B2;" chat";"$";LIGNE(INDIRECT(1&":"&NBCAR(B2))));TROUVE("$";" "&SUBSTITUE(B2;" chat";"$";LIGNE(INDIRECT(1&":"&NBCAR(B2)))))-2;2)*1))
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet