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

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
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
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