Convertir une chaine 1+1+1 en int

Bonjour,

Dans un tableau excel j'ai une chaine de caractère qui ressemble à ceci : "2+3+1" et dans la case d'a coté une qui ressemble à ceci : "6".

Je souhaiterai savoir s'il serait possible de convertir en VBA mon "2+3+1" en 6 sans pour autant modifié la case de base.

J'ai besoin de garder dans mes cellules l'écriture en 2+3+1 qui me permet de savoir en combien d'étape je suis arrivé a 6 (ici en 3 étapes mais cela peut être en 10). Et j'ai besoin de savoir que mon 2+3+1 = 6 pour exécuté du code quand les cases sont égales.

J'ai essayer des choses un peut farfelu du genre

if "=somme(" Cells(1,2) ")"  = cells(1,3) then

Mais rien n'y fais cela n'as pas l'air de fonctionner lol et je botte complètement en touche ...

Merci d'avance pour votre aide

Bonjour

Tu devrais joindre un fichier.

Bye !

Bonjour,

Vu comme ça je dirais :

Sub SOM()
MsgBox Application.Evaluate("=" & [A1])
End Sub

A adapter à votre fichier.

Cdlt,

Edit : Bonjour gmb !

Bonjours,

Merci pour vos réponse. Je ne peux malheureusement pas vous partager de fichier pour la confidentialité de ceux ci ..

Ergotamine, j'ai tester ta solution mais j'ai un problème d'incompatibilité de type ...

If Feuille.Cells(i, 4) <> "" And Feuille.Cells(i, 7).Value <> Application.Evaluate("=" & Feuille.Cells(i, 8)) Then

J'ai essayé aussi comme cela

If Feuille.Cells(i, 4) <> "" And Feuille.Cells(i, 7).Value <> Application.Evaluate("=" & Feuille.Range("H7")) Then

Mais rien n'y fais.

Je peux vous donner un peu plus de code

For Each Feuille In ThisWorkbook.Worksheets
            If Feuille.Visible = True Then
                For i = 7 To 18
                If Feuille.Cells(i, 4) <> "" And Feuille.Cells(i, 7).Value <> Feuille.Cells(i, 8).Value Then

La cells(i,8) est celle qui peut comporte la donné : 1+1+1....

Merci d'avance pour votre aide en espérant avoir donner un peu plus d'info.

Bonjour,

Et elle ressemble à quoi la valeur que vous avez en Cells(i,8) ? Parce que si ce n'est pas une opération interprétable vous aurez forcément des erreurs ...

Il nous faudrait dans l'ideal un exemple représentatif qui vous provoque l'erreur afin de vous aiguiller car chez moi, avec la donnée transmise, tout fonctionne conformément à mes attentes.

Cdlt,

Salut,

Ergotamine t'a donné la solution, il faut juste que tu fasses gaffe sur tes conditions je pense. Si tu as du texte, tu dois faire la conversion avec avant...

    If Application.Evaluate("=" & Worksheet("Feuil1").Cells(1, 2).Value) = Val(Worksheets("Feuil1").Cells(1, 3).Value) Then

donc dans ton cas cela devrait ressembler à cela même si je ne sais pas trop où tu dois faire tes contrôles.

Dim i As Long
Dim Feuille As Worksheet
    For Each Feuille In ThisWorkbook.Worksheets
        With Feuille
            For i = 1 To 18
                If .Cells(i, 4) <> "" And Val(.Cells(i, 7).Value) = Application.Evaluate("=" & .Cells(i, 8).Value) Then
Debug.Print "Feuille : " & Feuille.Name; " et sur la ligne : "; .Rows(i) & " le nombre d'étape correspond bien"

                Else
Debug.Print "Feuille : " & Feuille.Name; " et sur la ligne : "; .Rows(i) & "Le nombre d'étape n'est pas atteinds"
                End If
            Next i
        End With
    Next Feuille

Affaire à suivre....

Bonjour,

Merci pour vos réponse, mais je suis complètement perdu ...

Je dois m'assuré que la quantité à servir correspondant à la quantité servie. Ici ce n'est pas le cas je veux donc rentrée dans mon If

image

Ici c'est le cas je ne veux pas donc pas le prendre en compte

image

J'ai une erreur d'exécution '13', incompatibilité de type qui pointe sur cette ligne

If .Cells(i, 4) <> "" And Val(.Cells(i, 7).Value) <> Application.Evaluate("=" & .Cells(i, 8).Value) Then

La cells(i,7) correspond à la qté à servir et la cells(i,8) à celle qté servie...

Je ne vois pas comment convertir ma valeur 1+1 pour qu'elle me donne 2 et que je puisse comparé ensuite avec ma valeur 5.

Bonjour,

Forcément si vous commencez à I = 1 et que vous avez des titres et n'avez pas prévu la gestion d'erreur ça ne peut pas fonctionner. Comment on évalue la formule =Qté servie ? Pas 1+1 mais bien =Qté servie ? Ce n'est pas une valeur numérique donc impossible à évaluer, donc erreur 13.

Ci-contre votre code corrigé à adapter :

Sub COMPAR()
Dim i&, WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
    With WS
        For i = 1 To 18
            If Not IsError(Application.Evaluate("=" & .Cells(i, 8))) Then
                If .Cells(i, 4) <> "" And .Cells(i, 7) = Application.Evaluate("=" & .Cells(i, 8)) Then MsgBox "VALEURS SIMILAIRES"
            End If
        Next i
    End With
Next WS
End Sub

Avec la configuration suivante :

image

On a bien un message box qui apparaît lorsque i = 3 et i = 4, sinon rien (1+1 est bien évalué mais n'est pas égal).

Cdlt,

Merci Ergotamine, cela fonctionne super bien ! J'ai un peut adapté le code au cas où la case quantité servie est vide mais sinon niquel ! Merci énormément

Salut,

Un peu plus que quatre cellules serait la bienvenue.

  • A combien vaut i sur l'erreur ?
  • De quelle ligne et jusqu’à quelle ligne doit-tu faire ta recherche ex: 6 à 12
  • Quel est le format des colonnes G et H
  • Doit-tu faire le test sur toutes les feuilles ? sinon lesquelles?

Pour tester d'où vient l'erreur :

Une fois que l'erreur arrive mets Val(.Cells(i, 7) en surbrillance et Shift+F9 ensuite tu fais pareil avec Application.Evaluate("=" & .Cells(i, 8).Value) et tu verra qui te renvoie l'erreur;

Ergotamine, je pense qu'il a un souci sur la quantité à servir qui doit-être au format texte, ou alors comme tu dis il fait un test sur la ligne d'entêtes...

Rechercher des sujets similaires à "convertir chaine int"