IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Somme : Excel contre VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Décembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 11
    Par défaut Somme : Excel contre VBA
    Bonjour,
    J'ai un peu le même souci je crois.
    J'ai un tableau avec deux colonnes de nombres. Leur somme Excel fait 0 : =somme ( [la colonne] ).
    D'ailleurs quand je sélectionne les lignes Excel me rend aussi 0 dans la barre du bas ( sous la barre de curseur droite/gauche).
    Par contre, quand je somme par VBA, je ne tombe jamais juste ! ( cf. PJ ).
    Auriez-vous une idée du comment faire ?
    La somme est destinée à des comptables pour qui 0,01€ est important ( c'est peut-être l'arbre qui cache ... etc )
    Merci de votre aide.
    Et portez-vous bien, en ces temps particuliers.
    Fichiers attachés Fichiers attachés

  2. #2
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 312
    Billets dans le blog
    15
    Par défaut
    Bonjour,

    Essayez avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Cumul()
      Dim Cumul As Integer
      Dim MaPlage As Range
         Set MaPlage = Range("B2:B271")
         MaSomme = Application.WorksheetFunction.Sum(MaPlage)
         MsgBox MaSomme
     
    End Sub
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc..
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  3. #3
    Membre actif
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Décembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 11
    Par défaut Coup dans l'eau
    Citation Envoyé par Malick Voir le message
    Bonjour,

    Essayez avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Cumul()
      Dim Cumul As Integer
      Dim MaPlage As Range
         Set MaPlage = Range("B2:B271")
         MaSomme = Application.WorksheetFunction.Sum(MaPlage)
         MsgBox MaSomme
     
    End Sub
    Bien essayé ( et je garde ça sous le coude ), mais ça donne : 3,54702933691442E-11 !
    La bonne réponse est celle de Patrice740 : Type = Currency.
    Merci quand même d'avoir pris le temps de répondre.

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    C'est effectivement un problème d'arrondi. (sans parler du type Long qui ignore la partie décimale)
    Il y a 2 petits bug dans ta démo (on comprend malgré ça) : c'est pas la colonne 4 mais la 2 qu'il faut ajouter et tu print 2 fois S_doub au lieu de S_sing

    Pour des calculs financiers le type recommandé est Currency
    Si tu veux des calculs encore plus précis il faut utiliser le type Decimal qui est en réalité un sous-type de Variant.
    La démo :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Public Sub test()
    Dim i      As Long
    Dim S_sing As Single
    Dim S_doub As Double
    Dim S_curr As Currency
    Dim S_deci As Variant 'Variant/Decimal
     
    For i = 2 To 271
        S_sing = S_sing + Cells(i, 2)
        S_doub = S_doub + Cells(i, 2)
        S_curr = S_curr + Cells(1, 2)
        S_deci = S_deci + CDec(Cells(1, 2))
    Next i
    Debug.Print "S_sing = "; S_sing
    Debug.Print "S_doub = "; S_doub
    Debug.Print "S_curr = "; S_curr
    Debug.Print "S_deci = "; S_deci
     
    End Sub
    'S_sing = -0,185
    'S_doub =  4,07453626394272E-10
    'S_curr =  0
    'S_deci =  0

    Il faut toutefois tenir compte du fait que la saisie d'un nombre dans une cellule a pour conséquence de transformer le nombre saisi en type Double, ce qui entraine automatiquement une perte de précision.
    Pour éviter cette perte de précision, il faut saisir les nombres dans une cellule au format texte (avec tous les risques d'erreur de saisie que ça laisse passer) afin qu'Excel ne le convertisse pas en nombre de type Double, et il faut assurer cette conversion directement avec le VBA.

  5. #5
    Membre actif
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Décembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 11
    Par défaut Ca fonctionne
    Et ça fonctionne !
    Type Currency ! Je n'aurai jamais pensé à ça !
    Merci beaucoup Patrice740.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Somme automatique en VBA d'une cascade de données dans Excel (parent\enfant).
    Par lagguille dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/10/2016, 12h03
  2. somme des effectifs de lignes excel via VBA
    Par soul330 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2010, 20h42
  3. VBA probleme Acces pour fonction somme Excel
    Par darkspoilt dans le forum Général VBA
    Réponses: 1
    Dernier message: 11/05/2007, 17h15
  4. Probleme VBA access somme Excel
    Par darkspoilt dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2007, 10h35
  5. Comment décaller un bloc de cellule Excel en VBA
    Par bbkenny dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/01/2005, 20h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo