Arrondi forcé Fonction Excel

Résolu
Sirrol13 Messages postés 2 Statut Membre -  
 Utilisateur anonyme -
Bonjour, à tous, j'ai crée une formule VBA qui calcule la moyenne des cellules dont la couleur de police est noire.

Le code est le suivant :

Function MoyenneSiCouleur(Plage As Range, NumeroDeCouleur As Integer) As Long
Dim SommeSiCouleur As Double
Dim CountSiCouleur As Double
SommeSiCouleur = 0#
CountSiCouleur = 0#
Application.Volatile True
Dim Cellule As Range
For Each Cellule In Plage
If Cellule.Font.ColorIndex = NumeroDeCouleur Then
SommeSiCouleur = SommeSiCouleur + Cellule.Value
CountSiCouleur = CountSiCouleur + 1
End If
Next
MoyenneSiCouleur = SommeSiCouleur / CountSiCouleur
End Function

Mon problème est le suivant : le code arrondi la moyenne à l'entier, or je travaille avec des pourcentages et l'arrondi fait que le résultat est systématiquement 0..

J'ai mis le format de la cellule de résultat en % avec 4 chiffres significatifs, essayé des formules "ARRONDI" dans VBA, rien n'y fait..

Merci !

Configuration: Windows / Chrome 87.0.4280.66

4 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    'entier long
    Function MoyenneSiCouleur(Plage As Range, NumeroDeCouleur As Integer) As Long
    'nombre decimal
    Function MoyenneSiCouleur(Plage As Range, NumeroDeCouleur As Integer) As Single
    ou
    Function MoyenneSiCouleur(Plage As Range, NumeroDeCouleur As Integer) As Double
    0
  2. Utilisateur anonyme
     
    Bonjour

    pour tes prochains post, merci de lire attentivement, ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Je ne fais quasiment pas de VBA, et là j'ai pas office sous la main.

    Je pars donc d'une supposition se basant sur un point exact en C# (sait on jamais).
    Donc en C# si tu divises un nombre entier par un nombre entier sa donne le quotient de la division euclidienne (c'est pas un arrondi).
    Par exemple 7 / 2 => 3 car la division euclidienne est : quotient = 3, reste = 1.
    Ou encore 20/3 => 6 (si ça avait été arrondi cela aurait été 7).
    Toujours en C# pour obtenir le résultat sous forme d'un nombre décimal (double par exemple), il faut faire en sorte que l'un des membres de la division devienne un double: (7 * 1.0) / 2 => 3.5

    Je ne sais pas si c'est valable en VBA, mais à tout hasard.

    0
    1. Utilisateur anonyme
       
      Ha ben, les copains ont trouvé ton erreur je crois.....
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour Whismeril,
      c'est valable en VBA, mais un des membres est déclaré comme double:
      Dim SommeSiCouleur As Double
      ' ...
      SommeSiCouleur = SommeSiCouleur + Cellule.Value


      ce serait plus prudent de s'assurer que le second soit aussi traité comme un double:
      SommeSiCouleur = SommeSiCouleur + cdbl(Cellule.Value)


      ici, c'est la variable où on stocke le résultat final, MoyenneSiCouleur, qui est déclarée comme Long.
      0
      1. Utilisateur anonyme > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Salut, et oui, j'avais pas fait attention...
        0
  3. Sirrol13 Messages postés 2 Statut Membre
     
    C'est résolu, effectivement problème avec la nature de la fonction ! Merci à tous !
    0