Calcul de données dans un UserForm

Bonjour à tous, je débute en VBA et j'aimerais écrire un code qui me permettrait de calculer des primes en cliquant sur un bouton. Les coefficients donnent une sorte de salaire.

Le but est de récupérer les valeurs de certaines cases dans le UserForm et d'en faire la soustraction, mais il faut prendre en compte les coefficients pour les personnes, par exemple si le coefficient du remplaçant est supérieur au coefficient du remplacé, le remplaçant n'aura pas de prime donc l'idéal serait de retourner 0. Dans le cas contraire, il faut soustraire le coefficient du remplacé au coefficient du remplaçant pour retourner la différence par exemple:

Le remplaçant a un coefficient de 200 ce qui donne un "salaire" de 1500 et le remplacé a un coefficient de 250 ce qui donne un "salaire" de 1750. Le résultat attendu est donc 250. Une fois ce résultat obtenu il faudra multiplier celui-ci par le nombre de mois de période de remplacement et le diviser par le taux de remplacement qui est total (100%) ou 75%, 25%.

Voici des exemples de codes essayés mais qui ne fonctionnent pas correctement soit à cause d'incompatibilités de types ou autre...

Dim prime
Dim rmhremplacant
Dim rmhremplace
Dim rmhremplacé

'If rmhremplacant > rmhremplace Then
'montantprime = "0"
'ElseIf rmhremplace < rmhremplacant Then
montantprime = rmhremplace - rmhremplacant
'ElseIf rmhremplacant > rmhremplacé Then
'montantprime = 0
'Else
'montantprime = rmhremplacant - rmhremplacé
'End If
'Dim rmhremplacant As Integer
'Dim rmhremplace As Integer
'Dim rmhremplacé As Integer
'Dim montantprime As Integer

'rmhremplacant.Value =
'rmhremplace = 150
'rmhremplacé = rmhremplacé

'montantprime = rmhremplace - rmhremplacant
'rmhremplace -rmhremplacant * convertiondatehaut / tauxremplacement
Dim rmhremplacant As Integer
Dim rmhremplace As Integer
Dim rmhremplacé As Integer
Dim prime As Integer
Dim prime2 As Integer

If rmhremplacant > rmhremplace Then
prime = 0
Else
    prime = rmhremplacant - rmhremplace
If rmhremplacant > rmhremplacé Then
prime2 = 0
Else
    prime2 = rmhremplacant - rmhremplacé

End If
End If

rmhremplacant, rmhremplace et rmhremplacé sont les noms des différentes TextBox dans lesquelles les données doivent être récupérées

Je ne sais pas vraiment si mes structures sont correctes, je suis bloqué sur cette partie. Si les explications ne sont pas totalement claires n'hésitez pas.

Merci par avance

Cordialement

Bonjour, on utilise "cdbl" pour faire des calculs de textbox.

par ailleurs c'est plus lisible d'écrire que l'on veut la valeur contenu d'un textbox.

Dans le genre :

If rmhremplacant.value > rmhremplace.value Then
prime = 0
Else
 prime = cdbl(rmhremplacant.value) - cdbl(rmhremplace.value)
end if

Merci beaucoup pour votre réponse, je vais essayer comme vous me le conseillez

Bonjour, désolé de cette réponse tardive mais je n'ai travaillé sur ce dossier que hier soir.

J'ai fais quelques essais avec le code que vous m'avez donné et actuellement l'erreur est "Qualificateur incorrect" est-ce que cela viendrait du public ou private ou du fait que le programme prend le ".Value" comme nom de la variable est se perd ? Peut-être une erreur à cause du Integer qui ne s'utiliserait pas pour des nombres à virgule...

Voici mon code actuel:

-J'ai essayé avec un private et un public, ça ne change rien...

Public Sub Calculprime_Click()

Dim rmhremplacant As Integer
Dim rmhremplace As Integer

'rmhremplacé est le nom du textbox contenant le "salaire" en cas de poste remplacé sans titulaire
Dim rmhremplacé As Integer

Dim montantprime As Integer

If rmhremplacant.Value > rmhremplace.Value Then
montantprime = 0
Else
 montantprime = CDbl(rmhremplacant.Value) - CDbl(rmhremplace.Value)
If rmhremplacant.Value > rmhremplacé.Value Then
 montantprime = 0
Else
 montantprime = CDbl(rmhremplacant.Value) - CDbl(rmhremplacé.Value)

End If
 End If

End Sub

Merci par avance

Cordialement

C'est un début en effet. le clic sur un bouton donne un code private:

Private Sub CommandButton1_Click()

End Sub

ensuite vous pouvez lancer en mod pas à pas pour vérifier les lignes.

Par ailleurs vous déclarez Dim rmhremplacé et Dim rmhremplace qui se ressemble mais pas de rmhremplacant

à vérifier.

Après quelques modifications et essais je tombe sur ce résultat. Si la variable "Dim montantprime As Integer" est en commentaire le programme semble fonctionner mais retourne toujours 0. Lorsque cette variable n'est pas en commentaire le programme ne me signale pas d'erreur mais rien ne s'affiche

Private Sub Calculprime_Click()

Dim rmhremplacant As Integer
Dim rmhremplace As Integer
Dim rmhremplacé As Integer

Dim montantprime As Integer

If rmhremplacant > rmhremplace Then
montantprime = 0
Else
 montantprime = CDbl(rmhremplace) - CDbl(rmhremplacant)
If rmhremplacant > rmhremplacé Then
 montantprime = 0
Else
 montantprime = CDbl(rmhremplacé) - CDbl(rmhremplacant)

End If
 End If

End Sub

Avec les .Value il m'indique encore "qualificateur incorrect"

En utilisant le débogueur en pas à pas je constate que chaque valeur est récupérée mais rien

L'idée finale serait celle-ci:

Private Sub Calculprime_Click()

Dim rmhremplacant As Integer
Dim rmhremplace As Integer
Dim rmhremplacé As Integer

'Dim montantprime As Integer

If rmhremplacant > rmhremplace Then
montantprime = 0
Else
 montantprime = CDbl(rmhremplace) - CDbl(rmhremplacant)
If rmhremplacant > rmhremplacé Then
 montantprime = 0
Else
 montantprime = CDbl(rmhremplacé) - CDbl(rmhremplacant)

End If
 End If

 'MULTIPLIER LE RESULTAT PRECEDENT SELON LA VALEUR DE convertiondatehaut QUI EST LE NOMBRE DE MOIS REMPLACES
 montantprime = montantprime.Value * convertiondatehaut.Value

 'DIVISER LE RESULTAT D'AVANT SELON LE POURCENTAGE DE REMPLACEMENT
 Select Case tauxremplacemt
    Case Is = "100%"
    montantprime = montantprime.Value
    Case Is = "75%"
    montantprime = montantprime.Value / 0.75
    Case Is = "50%"
    montantprime = montantprime.Value / 2
    Case Is = "25%"
    montantprime = montant.Value / 3

End Select
End Sub

Une fois que tout est calculé correctement le résultat ainsi que toutes les informations du formulaire sont récupérées et insérées dans un tableau

Bonjour,

Désolé mais sans fichier exemple juste avec des textbox dont le nom semble identique remplace , remplacé ...

Je ne vais pas pouvoir trouver la logique de vos deux conditions IF - Else

Bonjour, voici un fichier d'exemple (toutes les données confidentielles ont été retirées)

Merci pour votre aide

15fichierexemple.xlsm (73.07 Ko)

Je suppose que vous faites un seul calcul de prime : soit avec "Remplace" ou soit avec "Remplacé" donc l'un des deux restera vide ""

Le plus simple est de vérifier d'abord si c'est un calcul avec "Remplacé" ou "Remplace" lequel est vide.

Private Sub Calculprime_Click()
If rmhremplace.Value = "" Then
rmhcompare = rmhremplacé.Value
Else
rmhcompare = rmhremplace.Value
End If

If rmhremplacant.Value < rmhcompare Then
montantprime.Value = CDbl(rmhcompare) - CDbl(rmhremplacant.Value)
Else
montantprime.Value = 0
End If

End sub
10fichierexemple.xlsm (64.01 Ko)

Bonjour, désolé pour cette réponse un peu tardive mais merci beaucoup.

Lorsque je test ce code le debogueur m'indique une incompatibilité de type au niveau de montantprime.Value

image image

Les valeurs de rmhcompare et rmhremplacant sont bien récupérées

Pour ensuite faire les prochaines étapes du calcul je peux écrire directement mon code à la suite ou je le sépare dans un autre bouton ?

Bizarre je n'ai pas cette erreur.

Remplacez la ligne par

montantprime.Value = rmhcompare - rmhremplacant.Value

Et pour la suite de la question oui la suite du calcul peut se faire dans le même bouton.

Je viens d'essayer sur deux pc différents avec deux versions différentes d'Excel et toujours la même erreur... c'est très étrange

D'accord, merci je vais écrire le code à la suite

Voici le code entier (pour le moment car il manque les autres étapes) de la procédure pour ce bouton. Chacune des valeurs est bien récupérée

Private Sub Calculprime_Click()
If rmhremplace.Value = "" Then
rmhcompare = rmhremplacé.Value
Else
rmhcompare = rmhremplace.Value
End If

If rmhremplacant.Value < rmhcompare Then
'montantprime.Value = CDbl(rmhcompare) - CDbl(rmhremplacant.Value)
montantprime.Value = rmhcompare - rmhremplacant.Value
Else
montantprime.Value = 0
End If

End Sub

bizarre que celà fonctionne de mon coté... essayez de renommer votre textbox "montantprime" dans le userform et dans le code.

Je viens de tout renommer "montantprime" dans le code et le UserForm et c'est pareil... Tout le calcul fonctionne de votre côté, y compris les multiplications et les divisions ?

Je n'ai pas essayé le reste mais la textbox "montant prime" est bien renseignée quand on clic sur calculer prime.

j'ai essayé avec un Val

montantprime.Value = Val(rmhcompare) - Val(rmhremplacant)

et là, plus de problème d'incompatibilité.

Reste à savoir si les calculs sont précis et d'après les premiers tests ils semblent un peu imprécis

Le problème vient de la division, par exemple, si la personne a remplacé une autre à 50% le résultat de la différence*mois de remplacement doit être divisé par 2 et là rien

En vba les pourcentages seront lus comme texte donc inexploitable. Pour les calculs vous devrez donc utiliser des conditions

Exemple

IF pourcentage="50%" then .....

Moncalul=salaire * 0.50

Je viens d'écrire ce code là mais il n'a pas l'air correct

Dim tauxremplacement

 Select Case tauxremplacement
    Case Is = "100%"
    montantprime = montantprime.Value
    Case Is = "75%"
    montantprime = (montantprime.Value / 0.75)
    Case Is = "50%"
    montantprime = (montantprime.Value / 2)
    Case Is = "25%"
    montantprime = (montantprime.Value / 3)

 End Select

Je vais essayer de le faire selon vos conseils

Après modification, le code donne ça:

 Dim tauxremplacement
 If tauxremplacement = "75%" Then
 montantprime = montantprime * 0.75
 If tauxremplacement = "50%" Then
 montantprime = montantprime * 0.5
 If tauxremplacement = "25%" Then
 montantprime = montantprime * 0.25
 If tauxremplacement = "100%" Then
 montantprime = montantprime
 End If
End If
End If
End If
End Sub

Avec bien sûr toutes les autres étapes du calcul avant... mais cela n'a aucun effet comme si le code n'était pas prit en compte

Bonjour, est-il possible d'avoir un équivalent à ce code en formule Excel ou faut-il mieux rester sur quelque chose codé en VBA ?

j'écrirais plutôt ainsi. :

 If tauxremplacement = "75%" Then
TAUX = 0.75
 If tauxremplacement = "50%" Then
TAUX = 0.5
 If tauxremplacement = "25%" Then
TAUX = 0.25
 If tauxremplacement = "100%" Then
TAUX = 1
 End If
End If
End If
End If
montantprime=montantprime.value *TAUX
End Sub
Rechercher des sujets similaires à "calcul donnees userform"