Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sommeprod sous vba, je cale

21 réponses
Avatar
merguez07
Bonjour à tous,
voilà mon problème est assez simple
J'ai une fichier excel sous Excel 2000 dans lequel j'ai des tableau avec
un certain nombre de calcul matriciel utilisant la formule sommeprod.

Pour donner un peu plus de visibilité dans les formules (il s'agit de
formule sommeprod à rallonge) j'ai décidé de créer des formules
personnalisés.


Jusque la pas de problème, plutôt que d'utiliser des formules sommeprod
j'utilise donc sous vba des boucles qui balaye chaque ligne et me donne
le résultat escompté. le hic c'est le temps de calcul qui peut dépasser
une minute alors qu'avec les sommeprod le résultat était dans la seconde.


La solution serait donc d'utiliser les sommeprod dans le vba et là je
bloque


ci dessous je dois calculer le nombre de date en décembre. La date se
trouve dans la 10eme colonne de la feuille "test"

Total =
Application.WorksheetFunction.SumProduct((Month(Worksheets("test").Columns(10))=
12))
là le programme sort de la formule sans calcul et sans message d'erreur

J'ai aussi essayé


Total = [SumProduct((Month(Worksheets("test").Columns(10)) = 12))]
et j'ai un message d'erreur 2015

Help me please

1 réponse

1 2 3
Avatar
merguez07
Un petit cours personnalisé pour moi et un dimanche s'il vous plait.
Trop sympa.
Tu passes quand tu veux prendre l'apéro en Ardèche. tu seras bien reçu.

Merci


Le 13.02.2011 18:33, michdenis a écrit :
| j'ai rajouté comme tu la fais la multiplication par un de
| la variable LaDate. Je ne sais pas pourquoi il faut faire ça
| mais si on le fait pas, force est de constater que ça marche pas.

Suppose que tu veuilles écrire une formule pour dénombre le
nombre de cellules qui affichent la date : 17/2/11 dans la plage A1:A6

=Sommeprod((A1:A6/2/11)*1)
Si tu écris la formule comme ceci, Excel va te retourner zéro.

Pourquoi : Dans la barre des formules, sélectionnes 17/2/11 de la formule
et appuie sur la touche F9, il affichera l'évaluation qu'il fait de la chaîne de
caractères = 0,772727272727273

En fait, Excel n'a pas compris que c'était une date et il a divisé 17 par 2 et
le résultat par 11 d'où sa réponse : 0,772727272727273. En conséquence,
c'est normal qu'il retourne 0 comme solution à la formule !

Si tu prends la même formule que tu aménages de cette façon :
=Sommeprod((A1:A6="17/2/11"*1)*1)
En ajoutant des guillemets autour de la date, si tu arrêtais là, Excel interpréterait
cela comme était une chaîne de caractères sans plus. Si tu ajoutes une opération
mathématique sur cette chaîne de caractère, tu forces Excel à interpréter cette
information à l'interne et il "s'aperçoit" que c'est une date qu'il s'empresse de
retourne dans sa formule numérique. À la place de ="17/2/11"*1, j'aurais pu
choisir ="17/2/11"+0 , ="17/2/11"-0 pourvu que cela n'altère pas la valeur
numérique que représente la date aux fins de comparaison de la formule.

Un autre petit exemple de la dernière information.
Formate d'abord une cellule vide au format texte
Tape une date au hasard : 18/02/11
Dans une autre cellule, entre la formule suivante :
­resse de la cellule où tu viens de saisir la date * 1
OU
­resse de la cellule où tu viens de saisir la date + 0
et observes le résultat. ATTENTION : la cellule affichant
le résultat sera aussi au format Texte bien qu'il affiche
la valeur numérique de la date.

Ça, c'est le comportement normal d'Excel

Cette section de la formule : A1:A6 bien que celles-ci affichent des dates,
pour Excel cela représente une valeur numérique. C'est ce pourquoi, il
peut effectivement faire la comparaison entre les valeurs contenues
dans A1:A6 ET "17/2/11"*1

En vba, ce n'est pas vraiment différent, La propriété "Evaluate" de l'objet
application fait un travail similaire à la touche F9 lorsque qu'une chaîne
est sélectionnée dans la barre des formules.

Pour t'en convaincre, essaie ceci :

Sub Test()
Dim D As Date
D = Date
x = Evaluate(""& D& "")
x = 0,590909090909091
soit 13 divisé par 2 divisé par 11
End sub

Voilà!

1 2 3