Formulations comparées VBA
bonjour à tous,
je progresse très difficilement en VBA et souvent il m'arrive de penser que les concepteurs de VBA ont complexifiés les choses pour le seul plaisir d'empoisonner la vie du développeur.
je donne ci dessous un exemple des différentes écritures de la fonction countif telles qu'il m'a été donné de les trouver dans divers codes.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Sub Macro2()
Range("C2").Select
ActiveCell.FormulaR1C1 = "=countif(RC[-2]:R[8]C[-2],R[-1]C[-1])"
'peut être également écrite avec ActiveCell.Formula et autres dérivées
[c3] = Evaluate("countif(a2:a10,b1)")
[c4] = [countif(a2:a10,b1)] 'autre écriture d'evaluate
[c5] = WorksheetFunction.CountIf([a2:a10], [b1])
[c6] = Application.CountIf([a2:a10], [b1])
End Sub |
quelqu'un peut-il m'expliquer la raison de ces différentes écritures et ce qui fait qu'on privilégiera l'une plutôt que l'autre ?
evaluate (seconde écriture) est la plus proche de la formulation sur feuille Excel et donc moins perturbante.
Mais est-elle applicable à toutes les formules logées directement sur la feuille Excel ?
Pour ce qui me concerne, la première formulation est la plus indigeste.
Cordialement.
formulations comparées VBA
Bonsoir BlueMonkey,
merci pour tes précisions.
j'avais en effet remarqué que formula.... écrivait la formule dans la feuille Excel. En ceci, elle se distingue des autres formulations.
Toutefois, en dehors du cas ou la formule doit figurer dans une colonne lambda d'une feuille Excel au nombre de lignes évolutif (introduction de données), je ne vois pas qu'elle ait un avantage déterminant sur les autres formulations.
la somme d'une colonne, par exemple, s’accommodera très bien d'un 'evaluate' ou 'application' à la dernière ligne offset+1 de la colonne à additionner.
dans mon exemple countif cela implique que l'emplacement de la formule est déterminé par rapport à ses antécédents. Par conséquent, autant l'écrire directement dans la feuille Excel et ne pas encombrer le code.
mais sans doute existe-t-il des cas que je n'imagine pas présentement et que l'usage me fera découvrir.
je suis étonné que la formulation countif entre crochet ne fonctionne pas sur votre version 2010 (même version que moi). Dans le doute, j'ai refait plusieurs tests, tous probants.
j'ai même remplacé à titre d'essai countif par [sum(A1:A10)] ou [sum(nom de plage)] en gardant bien uniquement les crochets et les parenthèses nécessaires (ni accolades ni guillemets) avec le résultat attendu.
Sauf erreur de ma part la formulation en langue anglaise est vrai pour tous les types de formulations. Et c'est plutôt un avantage si l'on considère que le risque serait grand de se retrouver avec une variable portant le même non qu'un fonction française.
J'ai bien regardé le site que vous m'avez indiqué.
il ne me reste plus qu'à réfléchir à la formulation la plus appropriée à chaque fois que j'aurai à utiliser une fonction de feuille Excel.
pour l'heure, je m'arrache les cheveux avec les variables tableaux et la fonction transpose nécessaires dans certain cas. et ce, même après la lecture attentive de l'excellent tutoriel de Didier Gonard. On a beau dire mais mais l'age est un poison pour les neurones.
cordialement.
Correction sur [countif(a2:a10,b1)]
Bonsoir,
J'ai refais un essais avec [countif(a2:a10,b1)] et j'ai eu un résultat correct.
Je devais avoir un problème de format dans mes cellule de test. ;)
A vérifier, mais je pense que l'appel à la fonction directement est plus rapide qu'un Evalute de la même fonction.
Ca se verra surtout si la fonction est appelé en boucle.
Bonne soirée.
formulations comparées VBA
re....,
je viens de découvrir que certaines fonctions de la feuille Excel n’étaient pas compatibles avec worksheetfunction.
Par exemple, alors que worksheetfunction gère countif il ne gère pas if. ce qui est pour le moins étonnant et tend à confirmer mon propos de départ sur les complications inutiles. Pourquoi ne pas gérer avec worksheetfunction toutes les fonctions de la feuille excel ?
Cela oblige à en passer par une autre formulation telle que formula.. beaucoup moins intuitives avec ces double guillemets et autres complexités. il reste à espérer qu'elle au moins accepte toutes les fonctions de la feuille Excel car la mémoire (la mienne en tout cas) ne permet pas de retenir que telle ou telle fonction n'est pas prise en compte par telle ou telle formulation.
Est-ce formula.... que tu évoques par "à vérifier mais je pense ......". Si c'est le cas, je suis mal car c'est précisément fonction dont la syntaxe me pose problème et je n'ai pour l'heure trouvé aucun document explicatif.
J'ai même insisté sur ce site pour obtenir ces explications mais sans résultat. Peut-être les autres membres sont-ils comme moi un peu perdu avec cette formulation!
cordialement.
formulations comparées VBA
Bonjour et bonne fête nationale,
Merci, je vais essayer avec les info que tu me donnes d'appréhender le formula... qui me semble incontournable.
La premiere chose sera de savoir si elle supporte toutes les fonctions de la feuille excel sans exception. on peut penser que oui dès lors qu'elle ecrit la formule sur la feuille. Si c'est le cas, je n'aurai au moins plus à me soucier de retenir les exceptions.
Il est vrai que le if n'offre pas d'avantage avec workshettfunction.
Je clos le sujet et vais voir de suite les infos que tu me donnes. peut-être maitriserai-je ensuite la syntaxe du formula...
cordialement.