VBA programme qui calcul une chaine de caract

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

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. JP
       
      Merci
      0