Transformer YxZ = resulat

bocman -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

Bonjour,
voila mon problème
j'ai une cellule "NB" qui contient soit une valeur numérique soit du texte sous la forme Z x Y ou Z et Y sont des numériques
j'aimerai dans la cellule "NB_HA" récupérer la valeur numérique de la cellule "NB"
donc Si "NB" est numérique "NB_HA" = "NB"
Sinon "NB" est décomposé
On récupérer Z on transforme x en * on récupère Y et on fait le produit de Z par Y
cependant je n'arrive pas à faire marcher le programme si X et vide ou Y et vide
pour cela j'ai commencer à faire un programme VBA

' transforme les donnée de la colonne NB_HA de la feuille extraction en valeur numérique; Exemple: z et Y sont des valeur numerique si dans ma cellule j'ai ZxY ou ZXY je veux le resultat de la mutlitplication
Function NB_HA(NB As Variant)
Dim i As Integer, Caractere As String, x As Integer, y As Integer, Operateur As String, chaine As Variant, calcul As Variant
If NB <> 0 Then
If IsNumeric(NB) Then
NB_HA = NB
Else
chaine = NB
i = 1
Do
Caractere = Mid(chaine, i, 1)
i = i + 1
Loop Until Not IsNumeric(Caractere)
x = CInt(Left(chaine, i - 2))
y = CInt(Right(chaine, Len(chaine) - i + 1))
Operateur = Mid(chaine, i - 1, 1)
Select Case calcul
Case x = 0
Select Case Operateur
Case "+": resultat = y
Case "X": resultat = y
Case "x": resultat = y
End Select
Case y = 0
Select Case Operateur
Case "+": resultat = x
Case "X": resultat = x
Case "x": resultat = x
End Select
Case x <> 0 And y <> 0
Select Case Operateur
Case "+": resultat = x + y
Case "X": resultat = x * y
Case "x": resultat = x * y
End Select
End Select
NB_HA = resultat
End If
End If

End Function

2 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour,

    on doit pouvoir simplifier ton code
    Function NB_HA(NB)
    Dim i As Integer, Operateur As String, x, y
    If IsNumeric(NB) Then
      NB_HA = NB
      Exit Function
    End If
    i = 0
    Do
      i = i + 1
      Operateur = Mid(NB, i, 1)
    Loop Until Not IsNumeric(Operateur) Or i = Len(NB)
    x = CInt(Left(NB, i - 1))
    y = CInt(Right(NB, Len(NB) - i))
    Select Case Operateur
      Case "+": NB_HA = x + y
      Case "-": NB_HA = x - y
      Case "*": NB_HA = x * y
      Case "/"
                If y <> 0 Then
                  NB_HA = x / y
                Else
                  NB_HA = "erreur"
                End If
      Case Else: NB_HA = "erreur"
    End Select
    End Function

    RQ1. ce code suppose que l'expression entrée est du type entier ou entier1 signe operation entier2
    RQ2. If reste à définir et à coder les cas d'expressions incorrectes que tu comptes traiter

    bonne suite
    0
    1. bocman
       
      je me suis mal exprimer
      dans ma cellule
      NB je peu avoir different cas, soit :
      Y+ Z
      +Y
      Y +
      Y x Z
      x Z
      Y x

      donc je voudrait récupérer le resultat

      car sir je mais juste

      ' transforme les donnée de la colonne NB_HA de la feuille extraction en valeur numérique; Exemple: z et Y sont des valeur numerique si dans ma cellule j'ai ZxY ou ZXY je veux le resultat de la mutlitplication
      Function NB_HA(NB As Variant)
      Dim i As Integer, Caractere As String, x As Integer, y As Integer, Operateur As String, chaine As Variant
      If NB <> 0 Then
      If IsNumeric(NB) Then
      NB_HA = NB
      Else
      chaine = NB
      i = 1
      Do
      Caractere = Mid(chaine, 1, 1)
      i = i + 1
      Loop Until Not IsNumeric(Caractere)
      x = CInt(Left(chaine, i - 2))
      y = CInt(Right(chaine, Len(chaine) - i + 1))
      Operateur = Mid(chaine, i - 1, 1)
      Select Case Operateur
      Case "+": resultat = x + y
      Case "X": resultat = x * y
      Case "x": resultat = x * y
      End Select
      NB_HA = resultat
      End If
      End If
      End Function

      ça ne marche que pour les cas ou X et Z contiennent qqch

      Dans les cas je n'ai que soit xY ou +Y ou Z+ ou Zx, cela ne marche pas
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    re

    c'est bien ce que j'ai dit dans mes RQ1 et RQ2.
    pour ce qui est du traitement des exceptions, un début de réponse .. et à toi de compléter
    https://www.cjoint.com/?0Bqu3O7VTr0

    bonne suite
    0