Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Dim nbhPrev%, nbhReal% : idem que : Dim nbhPrev As Integer, nbhReal As Integer
15 et 4 sont des nombres entiers qui tiennent sans aucun
problème dans une variable du type entier Integer ; pas
d'erreur possible de c'côté-là non plus.
Un essai avec une fonction personnalisée NoteArrondie(ByVal maNote As Single) utilisable en VBA et sur la feuille de calcul.
Notez: le InputBox renvoie un string. Mais VBA, à cause de la déclaration "maNote As Single", convertit le string retour du InputBox en single.
Pour être rigoureux, on ne laisse pas VBA convertir et on le fait explicitement. On peut donc écrire :
VB:
MsgBox NoteArrondie(Csng(Application.InputBox("Saisir une note entre 0 et 20, svp :")))
Le code VBA (version non rigoureuse 🙂) :
VB:
Sub CalculerNoteArrondie()
MsgBox NoteArrondie(Application.InputBox("Saisir une note entre 0 et 20, svp :"))
End Sub
Function NoteArrondie(ByVal maNote As Single)
Dim ecart As Single
ecart = maNote - Int(maNote)
NoteArrondie = Int(maNote) + IIf(ecart <= 0.00001, 0, IIf(ecart <= 0.5, 0.5, 1))
End Function
Sub CalculerNoteArrondie()
Dim note As Single, ecart As Single, noteArrondie As Single
Dim noteEntiere As Byte (Byte 2 Octet à la place de Single 4 Octet)
'Saisie de la note initiale
note = InputBox("Saisir une note comprise entre 0 et 20") ' 0 à 20 (Byte suffit = 0 à 255)
'RŽcupŽration de la partie entire de la note
noteEntiere = Int(note)
'DŽtermination de la note arrondie
ecart = note - noteEntiere
If ecart = 0 Then
noteArrondie = note
Else
If ecart > 0.5 Then
noteArrondie = noteEntiere + 1
Else
noteArrondie = noteEntiere + 0.5
End If
End If
MsgBox "La note Žtait = ˆ " & note & " elle devient " & noteArrondie
End Sub
Avec nos machines actuelles (même celles vieilles de plus de 10 ans - il se reconnaitra le gars 😛) gagner 2 octets de-ci de-là ne change absolument rien. Avec les premiers PC, on y faisait gaffe, maintenant on peut passer au type long sans dommage.
Bonsoir mapomme,
J'ai compris que c'est pour un exercice donc c'est possible d'optimiser pour la compréhension.
D'ailleurs le code fonctionne parfaitement dans son fichier original en Poste #1.
Option Explicit
Sub CalculerNoteArrondie()
Dim note, ecart, noteArrondie, noteEntiere
'Saisie de la note initiale
note = InputBox("Saisir une note comprise entre 0 et 20")
'Récupération de la partie entire de la note
noteEntiere = Int(note)
'DŽétermination de la note arrondie
ecart = note - noteEntiere
If ecart = 0 Then
noteArrondie = note
Else
If ecart > 0.5 Then
noteArrondie = noteEntiere + 1
Else
noteArrondie = noteEntiere + 0.5
End If
End If
MsgBox "La note était = ˆ " & note & " elle devient " & noteArrondie
End Sub
Si tu regardes mon code, je n'ai pas comparé l'écart à 0 mais à 0.00001. Je me suis fait plusieurs fois piégé par des calculs sur des non-entiers devant donner un résultat nul et qui en fait donnaient un résultat certes très petit mais non nul.
D'ailleurs en toutes rigueur, on écrirait Abs(ecart)<0.00001
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD