Limite à 65536 valeurs sur application.sum en vba ??? Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
C
CVC
Membre habitué
Membre habitué
Messages : 111
Inscrit le : 22 janvier 2013
Version d'Excel : 2010

Message par CVC » 28 août 2019, 17:55

Bonjour,

Malgré des recherches, je ne trouve rien sur les limites de la fonction vba
Application.sum()
.
Je dispose d'une base de données de 78000 lignes et l'intégration des données en variable tableau suivi d'un
S
omVal=application.sum(BDD)
renvoie une erreur "incompatibilité de type"
Suite à mes propres vérifications, la raison de cette erreur est que la fonction
Application.sum()
est tout comme
transpose()
limité à 65536 valeurs. est-ce bien exact, est-ce outre passable svp ?

Merci

Bien Cordialement,
A
AlgoPlus
Membre dévoué
Membre dévoué
Messages : 824
Appréciations reçues : 63
Inscrit le : 27 février 2019
Version d'Excel : 2007

Message par AlgoPlus » 28 août 2019, 19:04

Bonjour,

La limite de la fonction Somme est au moins le nombre de lignes disponible sur Excel...

Toujours difficile de répondre avec si peu d'éléments...

a quoi correspond BDD, une variable... représentant quoi ? une plage nommée ....?
comment est déclarée cette variable ...?
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'074
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 28 août 2019, 19:25

Bonsoir,

ces limites sont peut -être un résidu des version d'Excel avec ce nombre de ligne (et les colonnes à l'époque étaient encore moins nombreuses...), C'est une limite similaire à "Match".
Mais pourquoi utiliser une fonction "Application" sous VBA alors qu'une boucle sur les 78000 lignes fait très bien l'affaire, non ?

Il y a "plein" de limite comme celle-ci sous Excel, comme le nombre de couleur différente en mise en forme sur une feuille (Mosaïc)

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'710
Appréciations reçues : 446
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 28 août 2019, 19:32

Bonjour à tous,

incompatibilité de type c'est que ton BDD n'est pas un range
Essaie :
Dim bdd As Range
Set bdd = [A1:A78000]
Debug.Print Application.Sum(bdd)
tu verras que c'est bon.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
C
CVC
Membre habitué
Membre habitué
Messages : 111
Inscrit le : 22 janvier 2013
Version d'Excel : 2010

Message par CVC » 28 août 2019, 20:36

Bonjour,

BDD est une variable tableau que j'utilise car d'autres calculs/action sont nécessaires sur cette base de données.
une variable tableau est de, tout ce que j'ai pu lire sur le sujet, plus rapide en terme d’exécution surtout sur une telle Base.
Ok ce n'est pas un range (@eriiic), mais je vous invite à tester le fichier en PJ en adaptant la variable derlig sur le code, vous pouvez voir qu'à partir de 65536 le calcul ne s'effectue plus, avant oui !

@AlgoPlus : Mon Excel comporte bel et bien 1048576 lignes. la limite n'est donc pas celle qui s'affiche !

il est vrai que d'autres méthodes existent pour effectuer des sommes en intégrant le calcul dans la boucle.
Je dois d'ailleurs effectuer d'autres calculs suite à la somme, si je comprends bien il vaut mieux éviter toutes les fonctions VBA existantes (Transpose, Sum, Match...) si plus de 65536 valeurs ou procéder par "dichotomie".

Merci à chacun d'entre vous,
FichierTest-Limite.xlsm
(433.06 Kio) Téléchargé 3 fois
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'710
Appréciations reçues : 446
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 28 août 2019, 22:05

BDD est une variable tableau
il vaut mieux donner tout le contexte dès le départ.

Déjà lire cellule par cellule, ce n'est pas ça qui te fera gagner du temps. Ca t'en fait même perdre considérablement.
Lire une plage est 100 fois plus rapide, et en plus tu as un tableau apprécié de Sum() :
derlig = 1000000
BDD = [A1].Resize(derlig).Value
SomBDD = Application.Sum(BDD)
MsgBox SomBDD
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message