Sortir une somme et un nombre de caractères

bentonjda

XLDnaute Nouveau
Le titre ne doit pas être le plus clair qu'il soit...

Alors essayons d'expliquer

J'ai une cellule avec une suite de données de ce type: 5+7+D+8+0+D+t+4

Dans la cellule voisine, j'aimerais que je retrouve la valeur 8 (soit le nombre de caractères moins les signes +)

Dans la cellule encore voisine, j'aimerais un calcul de cette série où D est remplacé par 12, t par 10 et 0 par 10 également.

Et au final, une dernière cellule permettant de faire la moyenne du calcul par le nombre de caractères.

Est-ce clair du coup?
 

Jocelyn

XLDnaute Barbatruc
Bonjour le Forum,
Bonjour bentonjda,

On peut se servir d'une macro xl4 pour cela on crée une formule nommée onglet du ruban formule => gestionnaire de nom => dans le fichier exemple le nom est test => dans fait référence à cette formule

=EVALUER(SUBSTITUE(SUBSTITUE(SUBSTITUE(Feuil1!A2;"D";12);"t";10);"+0";"+"&10))

et dans la cellule C2 de la feuille =test

Voir fichier joint

Cordialement
 

Pièces jointes

  • Classeur1.xlsm
    8.7 KB · Affichages: 7

bentonjda

XLDnaute Nouveau
Merci.

J'ai oublié un point. parfois ma série se termine comme ça (import d'un autre fichier)

5+7+D+8+0+D+t+4+

Comment également ne pas tenir compte de ce + à la fin dans les caractères à prendre en compte.

Et du coup, ça met en l'air ce que tu as proposé dans la macro que je suis en train de regarder.

Sinon c'est top ça fonctionne très bien
 
Dernière édition:

Jocelyn

XLDnaute Barbatruc
re,

toujours suivant une macro xl4

changer

=EVALUER(SUBSTITUE(SUBSTITUE(SUBSTITUE(Feuil1!A2;"D";12);"t";10);"+0";"+"&10))

Par

=evaluer(SI(DROITE(SUBSTITUE(SUBSTITUE(SUBSTITUE(Feuil1!A2;"D";12);"t";10);"+0";"+"&10);1)="+";GAUCHE(SUBSTITUE(SUBSTITUE(SUBSTITUE(Feuil1!A2;"D";12);"t";10);"+0";"+"&10);NBCAR(SUBSTITUE(SUBSTITUE(SUBSTITUE(Feuil1!A2;"D";12);"t";10);"+0";"+"&10))-1);SUBSTITUE(SUBSTITUE(SUBSTITUE(Feuil1!A2;"D";12);"t";10);"+0";"+"&10)))

voir la formule nommée test1
 

Pièces jointes

  • Classeur1.xlsm
    8.8 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour bentonjda, Jocelyn,

Voyez le fichier joint et cette fonction VBA matricielle :
VB:
Function Calcul(t As String)
Dim s, e, a(1 To 3)
s = Split(Replace(t, " ", ""), "+")
For Each e In s
    If e = "D" Then e = 12
    If e = "t" Then e = 10
    If e = "0" Then e = 10
    If IsNumeric(e) Then
        a(1) = a(1) + 1
        a(2) = a(2) + Val(e)
    End If
Next
a(3) = a(2) / a(1)
Calcul = a 'matrice (vecteur ligne)
End Function
A+
 

Pièces jointes

  • Classeur(1).xlsm
    21.3 KB · Affichages: 2

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @bentonjda, à tous ;),

Un peu en retard sur ce coup. Une autre fonction pas matricielle.
VB:
Function Total(ByVal x As String, Optional xNbr)
' à partir de termes séparés par un "+", on somme les termes numériques
' (après avoir remplacé les termes "D" par 12 et les termes "0" et "t"" par 10)
' si xNbr est absent, on renvoie le nombre de termes numériques sommés
' sinon on renvoie la somme des termes numériques

Dim elem, som, nbr
  x = Application.Trim(Replace("+" & x, "+", " "))
  For Each elem In Split(x)
    Select Case elem
    Case 0, "t": som = som + 10: nbr = nbr + 1
    Case "D": som = som + 12: nbr = nbr + 1
    Case Else
      elem = Replace(elem, ".", ",")
      If IsNumeric(elem) Then
        som = som + 1 * elem
        nbr = nbr + 1
      End If
    End Select
  Next elem
  If Not IsMissing(xNbr) Then Total = nbr Else Total = som
End Function
 

Pièces jointes

  • bentonjda- somme expression- v1.xlsm
    19.9 KB · Affichages: 6

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @bentonjda,

Pas question de répandre la zizanie entre les répondeurs par ce type de question :mad:. Tout le monde se doute bien que si je répondais (honnêtement) à cette interrogation, les deux autres membres de XLD (que je salue par ailleurs) seraient déçus et vexés, et ce à juste titre ;):p:D.

Stoppons la plaisanterie. Ma réponse à ta question est simple: C'est la solution avec laquelle tu es le plus à l'aise. On pourrait examiner les plus et moins de chaque solution mais à part couper les cheveux en quatre... A moins d'avoir des dizaines de milliers de lignes (et dans ce cas, la solution de job75 me semble la plus rapide et économique en ressource), le critère de choix, selon ma pomme, reste le premier cité.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour mapomme,

Je pense que les nombres traités dans ce problème seront toujours des nombres entiers à un chiffre.

C'est sans doute pour cela qu'on utilise "D" au lieu de 12 ou "t" au lieu de 10...

L'intérêt de ma fonction VBA matricielle c'est qu'il n'y a qu'un seul traitement pour 3 résultats, on y gagne en rapidité.

A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 812
dernier inscrit
abdouami