VBA programme qui calcul une chaine de caract

Fermé
Boc - 19 juil. 2012 à 19:09
 JP - 23 juil. 2012 à 18:54
Bonjour,

J'avais créer un programme qui me perté de calculer P x T avec P et T des nombre et x et un caractère.

mais je voudrais essayer de calculer P x T x R avec P, T et R des nombre et x et un caractère.

Voici mon programme.

' cette fonction permet de déterminer le nombre de barre
' on a besoin de 5 paramètres qui sont dans l'ordre le nombre de barre, savoir si on à des attentes, connaitre le mètre linéaire des attentes, et connaitre l'éspacement
Function NB_HA(Nb As Variant)
' endroit ou l'on va stocker pendant l'éxécution du programme
Dim i As Integer, Caractere As String, X As Integer, y As Integer, z As Integer, Operateur As String, chaine As Variant, calcul As Variant
'si il y a une erreur on continue
On Error Resume Next
If IsNumeric(Nb) Then
'NB_HA est égale a cette valeur à laquelle on ce débarrasse du signe + en lui effectuant une opération "*1 +0 "
NB_HA = (Nb * 1) + 0
Else
' sinon si ce n'est pas une valeur numérique
chaine = Nb
i = 1
' on créer une boucle qui va récupérer les valeurs avant le signe opérateur et après
Do
' caractère correspondant au nombre récupére
Caractere = Mid(chaine, i, 1)
i = i + 1
Loop Until Not IsNumeric(Caractere)
'x récupère les valeurs avant le signe opérateur
X = CInt(Left(chaine, i - 2))
' y récupère les valeurs après le signe opérateur
y = CInt(Right(chaine, Len(chaine) - i + 1))
Operateur = Mid(chaine, i - 1, 1)
y = CInt(Right(chaine, Len(chaine) - i + 2))
Operateur = Mid(chaine, i - 1, 2)
' si les valeurs en y sont 0 alors le résultat NB_HA donnera juste les valeurs trouvé par x
If y = 0 Then
NB_HA = X
Else
' inversement,si les valeurs en x sont 0 alors le résultat NB_HA donnera juste les valeur trouvé par y
If X = 0 Then
NB_HA = y
' sinon si x et y contiennent quelque chose alors on transformet les signes + en + x en * et X en * selon le cas que l'on a
Else
Select Case Operateur
Case "+": NB_HA = X + y + z
Case "X": NB_HA = X * y * z
Case "x": NB_HA = X * y * z
End Select
End If
End If


End If
End Function
A voir également:

1 réponse

f894009 Messages postés 17209 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 décembre 2024 1 711
20 juil. 2012 à 09:59
Bonjour,

exemple de code pour 3 nombres, que vous pourrez faire evoluer pour x nombres

Function NB_HA(Nb As Variant)
  Dim Nb As Variant, Chaine As Variant
    
  
  If IsNumeric(Nb) Then
    'NB_HA est égale a cette valeur à laquelle on se débarrasse du signe +
    'en lui effectuant une opération "*1 +0 "
    NB_HA = (Nb * 1) + 0
  Else
    Chaine = UCase(Nb)
    If InStr(1, Chaine, "+") > 0 Then
      Carcherch = "+"
    ElseIf InStr(1, Chaine, "X") Then
      Carcherch = "X"
    Else
      MsgBox "erreur d'operateur!!!!!!"
      Exit Function
    End If
    
    pos = 0
    pos1 = 0
    pos2 = 0
    
    For i = 1 To Len(Chaine)
      pos = InStr(i, Chaine, Carcherch)
      X = Val(Left(Chaine, pos - 1))
      debut = pos + 1
      i = debut
      pos1 = InStr(i, Chaine, Carcherch)
      If pos1 = 0 Then
        y = Val(Mid(Chaine, debut, Len(Chaine)))
        Exit For
      Else
        y = Val(Mid(Chaine, debut, pos1 - debut))
      End If
      debut = pos1 + 1
      i = debut
      pos1 = InStr(i, Chaine, Carcherch)
      If pos2 = 0 Then
        z = Val(Mid(Chaine, debut, Len(Chaine)))
        Exit For
      Else
        z = Val(Mid(Chaine, debut, pos1 - debut))
      End If
      'a continuer pour un nombre suivant

    Next
    'Calcul en fonction des valeurs de x,y,z
    If Carcherch = "+" Then
      NB_HA = X + y + z
    ElseIf Carcherch = "X" Then
      If X > 0 And y > 0 And y > 0 Then
        NB_HA = X * y * z
      ElseIf X < 1 And y > 0 And z > 0 Then
        NB_HA = y * z
      ElseIf X < 1 And y < 1 And z > 0 Then
        NB_HA = z
      ElseIf X < 1 And y > 0 And z < 1 Then
        NB_HA = y
      ElseIf X > 0 And y < 1 And z < 1 Then
        NB_HA = X
      ElseIf X > 0 And y < 1 And z > 0 Then
        NB_HA = X * z
      ElseIf X > 0 And y > 0 And z < 1 Then
        NB_HA = X * y
      ElseIf X < 1 And y < 1 And z < 1 Then
        NB_HA = 0
      Else
      End If
    Else
    End If
  End If
End Function


Bonne suite
0
Merci
0