Affectation des résultats d'une macro

Fermé
vbabeug Messages postés 1 Date d'inscription lundi 9 février 2015 Statut Membre Dernière intervention 9 février 2015 - Modifié par Whismeril le 9/02/2015 à 14:42
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 9 févr. 2015 à 18:32
Bonjour à tous, je recherche un petit coup de main.
J ai une base de données de type assureur auto avec différents critères par colonne pour chaque profil (age, sexe, nombre d'années de permis ... )et je cherche à calculer la prime pour chaque client dans une nouvelle colonne mais le même résultat est donné pour chaque profil , je pense avoir un problème sur les boucles car en modifiant quelque peu la macro pour faire le calcul ligne par ligne ça fonctionne .....

voila mon code dans lequel pp est une prime pure :

Sub test()

Dim pp As Integer, coefPret As Double, coefSexe As Double, Bonus As Double, malus As Double, chevauxFisc As Integer, coefAge As Double
Dim p As Object, PrimeAnnuelle As Double, i As Integer, n As Integer


Set p = Range("c2:i1000")

pp = 200

For i = 1 To n

chevauxFisc = p.Cells(i, 4).Value * 30
Next

'boucle for pour les conditions sur les tranches d'age
For i = 1 To 49
If p.Cells(i, 1).Value >= 18 And p.Cells(i, 1).Value < 25 Then
coefAge = 1.7
Else
 If p.Cells(i, 1).Value >= 25 And p.Cells(i, 1).Value < 35 Then
 coefAge = 1.45
 Else
If p.Cells(i, 1) >= 35 Then
coefAge = 1.1
End If
     End If
           End If
Next

'boucle for sur le sexe
For i = 1 To 49
If p.Cells(i, 2).Value = "m" Then
coefSexe = 1.1
Else
 If p.Cells(i, 2).Value = "f" Then
 coefSexe = 1
 Else
 If p.Cells(i, 2).Value <> "m" And p.Cells(i, 2).Value <> "f" Then
 MsgBox ("La valeur rentrée ne correspond pas, entrez m ou f")
 End If
       End If
              End If
Next

'boucle for pour le deuxième conducteur
For i = 1 To 49
If p.Cells(i, 5).Value = "oui" Then
coefPret = 1.15
Else
 If p.Cells(i, 5).Value = "non" Then
 coefPret = 1
 Else
 If p.Cells(i, 5).Value <> "oui" And p.Cells(i, 5).Value <> "non" Then
 MsgBox (" la valeur rentrée n'est pas correcte")
End If
      End If
              End If
              Next

'boucle pour le bonus en fonction du nombre d'année de détention du permis

For i = 1 To 49
If p.Cells(i, 3).Value > 13 Then

Bonus = 0.5

Else

Bonus = 0.95 ^ p.Cells(i, 3).Value

End If
Next



'Boucle pour le calcul du malus
For i = 1 To 48

malus = 1.1 ^ p.Cells(i, 6).Value

Next
'calcul de la prime annuelle

For i = 1 To 49
p.Cells(i, 7) = (pp * coefPret * coefSexe * Bonus * malus * coefAge) + chevauxFisc
Next

End Sub


EDIT: Ajout de la coloration syntaxique.
A voir également:

2 réponses

f894009 Messages postés 17191 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 mai 2024 1 708
9 févr. 2015 à 18:15
bonjour,

je pense avoir un problème sur les boucles
Ben oui, 49 fois le meme calcul a chaque boucle ca mene pas loin.
la variable n n'est pas initialisee !!!!

Faire chaque calcul dans une boucle de 1 a 49
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
9 févr. 2015 à 18:32
Bonsoir VBABeug, bonsoir le forum,

Je verrais les choses comme ça, avec une seule boucle :

Sub test()
Dim pp As Integer
Dim chevauxFisc As Byte
Dim coefAge As Single
Dim coefSexe As Single
Dim coefPret As Single
Dim Bonus As Single
Dim malus As Single
Dim i As Byte

pp = 200
For i = 1 To 49
    'boucle for pour les conditions sur les tranches d'age
    If p.Cells(i, 1).Value >= 18 And p.Cells(i, 1).Value < 25 Then
        coefAge = 1.7
    Else
        If p.Cells(i, 1).Value >= 25 And p.Cells(i, 1).Value < 35 Then
            coefAge = 1.45
        Else
            If p.Cells(i, 1) >= 35 Then
                coefAge = 1.1
            End If
        End If
    End If
    If p.Cells(i, 2).Value = "m" Then
        coefSexe = 1.1
    Else
        If p.Cells(i, 2).Value = "f" Then
            coefSexe = 1
        Else
            If p.Cells(i, 2).Value <> "m" And p.Cells(i, 2).Value <> "f" Then
                MsgBox ("La valeur rentrée ne correspond pas, entrez m ou f")
                Exit Sub
            End If
        End If
    End If
    'boucle pour le bonus en fonction du nombre d'année de détention du permis
    If p.Cells(i, 3).Value > 13 Then
        Bonus = 0.5
    Else
        Bonus = 0.95 ^ p.Cells(i, 3).Value
    End If
    chevauxFisc = p.Cells(i, 4).Value * 30
    'boucle for pour le deuxième conducteur
    If p.Cells(i, 5).Value = "oui" Then
        coefPret = 1.15
    Else
        If p.Cells(i, 5).Value = "non" Then
            coefPret = 1
        Else
            If p.Cells(i, 5).Value <> "oui" And p.Cells(i, 5).Value <> "non" Then
                MsgBox (" la valeur rentrée n'est pas correcte")
                Exit Sub
            End If
        End If
    End If
    'Boucle pour le calcul du malus
    malus = 1.1 ^ p.Cells(i, 6).Value
    'calcul de la prime annuelle
    p.Cells(i, 7) = (pp * coefPret * coefSexe * Bonus * malus * coefAge) + chevauxFisc
Next i
End Sub

0