Manipulation de chaine de caratére(Position et découpage de chaine)

Tatiana29

XLDnaute Occasionnel
Bonjour à tous!
je suis en train d'essayer de construire une formule sous excel.
j'ai plusuers chaines de caractères soit composé de 3,2 ou 1 chiffre et l'objectif est de gardé le dernier chiffre comme dans l'exemple ci dessous.

je dois faire une formule qui detecte l'avant dernier "." de la liste quand ya 2 ou 3 chiffres et qui restitue la fin de la chaine,donc le dernier chiffre!

je viens de me lancer sur le sujet!

Si quelqu'un veut participer à la reflexion!

welcome
tatiana

3 630.48 112 003.72 => 112 003.72
16.15 30.76 1 052.46 => 1 052.46
631.43 => 631.43
0.23 1.85 58.41 =>58.41
3 314.88 => 3 314.88
 

Victor21

XLDnaute Barbatruc
Re : Manipulation de chaine de caratére(Position et découpage de chaine)

Bonjour.

j'ai plusuers chaines de caractères soit composé de 3,2 ou 1 chiffre
Vous voulez sans doute parler de nombres ?

Joignez donc un fichier avec quelques exemples (données de base, contraintes, résultats attendus).

Edit : Bonjour, Jean-Claude :)
 
Dernière édition:

Tatiana29

XLDnaute Occasionnel
Re : Manipulation de chaine de caratére(Position et découpage de chaine)

Voici un exemple,je me suis lancé dans une macro pour traiter le problème mais je pense qu'il est possible avec une formule mais j'aime la difficulté!:D
 

Pièces jointes

  • exemplee.xlsx
    9.1 KB · Affichages: 70
  • exemplee.xlsx
    9.1 KB · Affichages: 85
  • exemplee.xlsx
    9.1 KB · Affichages: 73

JCGL

XLDnaute Barbatruc
Re : Manipulation de chaine de caratére(Position et découpage de chaine)

Bonjour à tous,
Salut Patrick,
Salut Habitude,

Jolie fonction...

Puis-je me permettre pour avoir une valeur calculable ?
Private Sub CommandButton1_Click()
For Each cell In Range("A:A").SpecialCells(xlCellTypeConstants): cell.Offset(, 1) = Format(ct(cell.Value) * 1, "# ##0.00"): Next cell
End Sub

A++
A + à tous
 

JBOBO

XLDnaute Accro
Re : Manipulation de chaine de caratére(Position et découpage de chaine)

bonjour,

Une petite formule à s'arracher les cheveux. Si nombres en A1, alors en En B1 :
Code:
=CNUM(SIERREUR(DROITE(A1;(NBCAR(A1)-(CHERCHE("+";SI(ET(NON(ESTERREUR(CHERCHE(".";A1;CHERCHE(".";A1)+1)));ESTERREUR(CHERCHE(".";A1;CHERCHE(".";A1;CHERCHE(".";A1)+1)+1)));SUBSTITUE(A1;".";"+";1);SI(ET(ESTERREUR(CHERCHE(".";A1;CHERCHE(".";A1)+1));ESTERREUR(CHERCHE(".";A1;CHERCHE(".";A1;CHERCHE(".";A1)+1)+1)));A1;SUBSTITUE(A1;".";"+";2)));1)+3)));A1))

Pourrait pas la redecomposer, j'ai oublié de conserver les étapes intermédiaires. A tenter de comprendre avec la fonction "audit de formule. En gros je cherche l'avant dernier ".", et le remplace par un "+". Ensuite je cherche la position de ce "+" et j'extrait le dernier nombre à partir de la position de ce "+". Désolé.
 

tototiti2008

XLDnaute Barbatruc
Re : Manipulation de chaine de caratére(Position et découpage de chaine)

Bonjour Tatiana, Bonjour Victor, Bonjour JCGL, Bonjour Habitude, Bonjour JBOBO, :)

une autre version en formule

Code:
=SI(NBCAR(A1)-NBCAR(SUBSTITUE(A1;".";""))=1;A1;STXT(A1;CHERCHE(" ";A1;CHERCHE("$";SUBSTITUE(A1;".";"$";NBCAR(A1)-NBCAR(SUBSTITUE(A1;".";""))-1)));1000))

Edit : Juste pour ajouter que l'idée est exactement la même que celle de JBOBO ;)
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Manipulation de chaine de caratére(Position et découpage de chaine)

Bonjour

Une autre possibilité, avec une formule matricielle :
Code:
STXT(A1;1+GRANDE.VALEUR(SI(STXT(".  "&A1;LIGNE(INDIRECT("1:"&NBCAR(A1)+1));1)=".";LIGNE(INDIRECT("1:"&NBCAR(A1)+1)));2);100)

Pour autant, je ne suis pas sûr que cela donne la bonne réponse dans tous les cas.

La méthode : On recherche la position de l'avant dernier "." dans ". "&A1 et on affiche tous les caractères pris un peu plus loin sur la droite.

@ plus
 

Pièces jointes

  • exemplee.xlsx
    9.3 KB · Affichages: 60
  • exemplee.xlsx
    9.3 KB · Affichages: 61
  • exemplee.xlsx
    9.3 KB · Affichages: 64
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Manipulation de chaine de caratére(Position et découpage de chaine)

Bonsoir à tous


Je pensais l'avoir mais j'échoue proche du but
Code:
Function tatiana(r As Range)
tatiana = Replace(IIf(InStr(r.Text, Chr(32)) = 0, r.Text, StrReverse(Split(StrReverse(r.Text))(0) & Split(StrReverse(r.Text))(1))), ".", ",") * 1
End Function

PS: JNP: un petit pattern de derrière les fagots , tu as cela ?
 

JNP

XLDnaute Barbatruc
Re : Manipulation de chaine de caratére(Position et découpage de chaine)

Bonsoir le fil :),
PS: JNP: un petit pattern de derrière les fagots , tu as cela ?
Petit n'est pas le terme, mais j'ai pas réussi à le simplifier plus :eek:...
Mais pour le fun
Code:
Function Tatiana(ATrouver As String) As String
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "((?!\.\d\d )(\d{1,3} \d{3}\.\d{0,2}$))|(\d{1,3}\.\d{0,2}$)"
        If .test(ATrouver) Then
    Tatiana = .Execute(ATrouver)(0)
    End If
End With
End Function
fonctionne sur les cas de figure précités :p...
Bonne soirée :cool:
 

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote