Calcul de cellule

Bonjour à tous,

Est-il possible de faire le calcul d'une cellule quand celui-ci est à l'intérieur de celle-ci ?

Exemple : mes cellules contiennent des données du genre 35*2+37+36+31+8*34

Je travaille dans le tissus et il s'agit simplement du colisage de mes rouleaux et de leurs métrages respectifs.

Merci d'avance pour vos retours.

Bonjour,

Une astuce présente sur le forum pourra peut être t’aider ?

Lien

Bonjour,
Une petite contribution.
Cdlt.

12krysarion.xlsm (14.42 Ko)
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim x

    On Error Resume Next
    If Not IsEmpty(Target) Then
        x = "=" & Target
        MsgBox Application.Evaluate(x)
    End If
    On Error GoTo 0

End Sub

Bonjour,

et faire l'inverse ne t'arrange pas ?
Tu as dû y penser mais saisir =35*2+37+36+31+8*34 pour voir le total, aller dans la barre de formule pour voir le détail
eric

Bonjour et merci à tous pour vos réponses.

@Jean-Eric & JB : Je vous avoue que je ne suis pas un adepte du VBA, c'est une découverte et je ne suis pas sur de bien comprendre.

@eriiic : C'est presque ça mais ça m'oblige à regarder.

J'ai eu une idée. Imaginons que je fasse un copier coller de la colonne ou il y a mes colisages. Je pourrais donc m'amuser a mettre un = devant chaque colisage et j'aurais enfin ma colonne total.

Existe t-il une façon automatique de rajouter un = dans chaque cellule d'une colonne ? Une sorte de rechercher/remplacer.

Je vous joins un fichier d'exemple. Je voudrais tout simplement que la colonne B se calcul automatiquement en fonction du colisage de la colonne C.

Merci d'avance pour vos retours.

11test.xlsx (9.76 Ko)

Bonjour,

ce que tu demandes n'est faisable qu'en vba.

Si tu peux ajouter une colonne c'est faisable avec le vieux machin qu'est excel4.
- sélectionner D3, crée un nom Evaluer avec pour formule =EVALUER(Feuil1!C3)
- en D3 saisir la formule =SIERREUR(evaluer;"") pour avoir le total ce C3
- tirer vers le bas

image

Mais tu ferais mieux de maitriser tes craintes de VBA et appliquer la proposition de Jean-Eric, c'est beaucoup plus propre.
Et vba te servira pour beaucoup d'autres choses
eric

12test.xlsm (28.30 Ko)

En tout cas cette méthode est parfaite même si je ne la comprends pas forcément. Merci beaucoup.

Dès que j'aurais un peu plus de temps je me pencherais sur le VBA.

Bonne journée à tous.

Bonjour à tous ,

Une autre fonction personnalisée en VBA avec mon interprétation perso.

J'ai considéré que ce qui nous intéressait était l'évaluation d’expressions algébriques comportant une combinaison de chiffres et signes parmi -+*/(), donc si la cellule contient :

  • une formule alors on ne retourne rien
  • une constante Vrai ou Faux alors on ne retourne rien
  • une constante erreur alors on ne retourne rien
  • une constante numérique alors on ne retourne rien
  • une constante texte alors on retourne le résultat de la constante texte si elle est correcte. Dans le cas contraire on ne renvoie rien
  • une constante texte qui est un nom défini (soit de portée classeur soit de portée feuille) alors on ne renvoie rien

La fonction s'appelle EvalAlgebric. Le seul argument à indiquer est la cellule source. Exemple : =EvalAlgebric(C3)

Le code est dans module1 :

Function EvalAlgebric(x As Range)
Dim y
   On Error Resume Next
   EvalAlgebric = ""
   If x.Count <> 1 Then Exit Function
   If IsError(x) Then Exit Function
   If x = "" Or x.HasFormula Then Exit Function
   If InStr("0123456789+-(", Left(Trim(x), 1)) > 0 Then
      If IsNumeric(x) Then Exit Function
      y = Application.Evaluate("=" & Replace(x, ",", "."))
      If IsNumeric(y) Then EvalAlgebric = y: Exit Function
   End If
End Function

Bonjour et merci encore à tous pour vos participations, je reviens à la charge est ce qu'il serait possible toujours dans la même idée de compter automatiquement mon nombre de rouleaux.

Ex : 8*30+25+20 me donnerait 10 rouleaux (8 de 30m, 1 de 25m et 1 de 20m)

26+25+27 me donnerait 3 rouleaux

Merci d'avance pour vos retours.

Si jamais vous trouvez dans un premier temps une solution sans VBA cela me serait utile mais sinon je m'adapterais sans souci.

Bonne journée.

Bonjour Krysarion ,

Via une autre fonction personnalisée (en VBA) dont le code est dans Module1 :

Function NbrRouleau(ByVal x)
Dim s, y, n&, p
   s = Split(Replace(x, " ", ""), "+")
   For Each y In s
      p = Split(y, "*")
      If UBound(p) = 0 Then n = n + 1 Else n = n + Val(p(0))
   Next y
   NbrRouleau = n
End Function
Rechercher des sujets similaires à "calcul"