FORUM Tom's Hardware » Programmation » VB / VBA / VBS » FormulaArray dans VBA Excel
 

FormulaArray dans VBA Excel

Il y a 239 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : FormulaArray dans VBA Excel
 
Plus d'informations

Je cherche une réponse à un problème Excel 2003
 
Si j'entre la formule suivante dans une cellule directement dans Excel en mode Array (ctrl+shift+enter), j'aurai le bon résultat.
=SOMME(SI([semaine1.xls]feuilsem!$C$3:$C$9>2;[semaine1.xls]feuilsem!$D$3:$E$9))
=> affichage dans la barre des formules: {=SOMME(SI([semaine1.xls]feuilsem!$C$3:$C$9>2;[semaine1.xls]feuilsem!$D$3:$E$9))}
 
Parcontre, si je fait mettre la formule suivante dans du code VBA dans une feuille Excel 2003:
Range("K24" ).FormulaArray = "=SUM(IF([semaine1.xls]feuilsem!$C$3:$C$9>2;[semaine1.xls]feuilsem!$D$3:$E$9))"
 
J'obtient toujours une erreur 1004: impossible de définir la propriété FormulaArray de la classe Range:
 
Pourtant, si je l'affecte au paramètre .Value et que j'ajoute un apostrophe (') à la chaine traduite en français (Ajouter comme du texte plutot que comme une ArrayFormula).  Je vais ensuite dans la feuille Excel et j'édite la cellule K24, je retire l'apostrophe (') et je fait CTRL+SHIFT+ENTER et la formule fonctionne.
 
Quelqu'un à une idée pour introduire un SUM(IF( dans du code VBA d'excel 2003?
 


---------------
Bodher Ek

zeb
Profil : Modérateur libre
Plus d'informations

Tu as lu l'aide de FormulaArray fournie avec Excel ?
 

Citation :


FormulaArray, propriété
 
Cette propriété renvoie ou définit la formule d'une plage, sous forme matricielle. Cette propriété renvoie (ou peut se voir affecter) une seule formule ou un tableau Visual Basic. Si la plage spécifiée ne contient aucune formule sous forme matricielle, cette propriété renvoie la valeur Null. Type de données Variant en lecture-écriture.
 
Note
Si vous utilisez cette propriété pour entrer une formule sous forme matricielle, vous devez utiliser le style de référence L1C1, et non le style de référence A1 (consultez le second exemple).
 
Exemples
Cet exemple montre comment saisir le chiffre 3 sous la forme d'une constante matricielle dans les cellules A1 à C5 de la feuille Sheet1.

Worksheets("Sheet1" ).Range("A1:C5" ).FormulaArray = "=3"


Cet exemple montre comment saisir la formule matricielle =Sum(R1C1:R3C3) (=SOMME(R1C1:R3C3)) dans les cellules E1 à E3 de la feuille Sheet1.

Worksheets("Sheet1" ).Range("E1:E3" ).FormulaArray = _
    "=Sum(R1C1:R3C3)"

 


 
J'y vois une note tout à fait intéressante...
 
Pourquoi utilises-tu FormulaArray ? Formula peut convenr dans ton exemple.

Plus d'informations

Merci pour l'aide Zeb, mais Oui, j'avais déjà lu l'aide!  et non, je ne peux pas utiliser l'argument "Formula" puisque le retour doit être une matrice virtuelle sur le "SI".  L'exemple que j'ai mis est un exemple très simplifié comparativement à ce sur quoi je travaille.  La question, pour la préciser, est l'intégration du "SI" dans un FormulaArray via VBA.  Il semble qu'une erreur survienne.  Peut-être est-ce une erreur similaire à celle qui limite à 256 caractères la longueur de la chaine transmise à l'argument "FormulaArray".  Cette limitation n'est pas présente dans l'interface Excel (sheet) qui permet 1024 caractères, mais est présente lors de l'utilisation du code VBA pour affecter une valeur à l'argument.  Cette limitation est également présente pour l'argument "Formula"!
 
La logique du "Somme.si" lorsqu'il y a plusieurs critères (ou "somme.si" imbriqué) est d'utiliser la "Somme "sur la multiplication de vecteurs de condition "Si".  Exemple, tu compares 3 éléments d'un vecteur à la condition1 et tu crée un vecteur virtuel rempli de 1 ou 0 (vrai/faux). Ce vecteur virtuel est multiplier à un autre vecteur virtuel pour la condition2, multiplier à un autre vecteur virtuel pour la condition3, multiplier à un autre vecteur virtuel pour la condition4.  Cette multiplication construit un vecteur virtuel de 1 et 0 (vrai/faux) pour chacune des lignes remplissant les conditions 1, 2, 3 et 4.  Ce vecteur virtuel sera alors indicateur des lignes de la matrice sur laquelle il faut faire une somme. Pour simplifier, disons simplement que c'est un calcul de vecteur et matrice selon les principes mathématiques s'appliquant aux vecteurs et matrices.
 
Quelqu'un à une autre idée?


---------------
Bodher Ek
Plus d'informations

Bonjour,
 
Tu avais déjà trouvé 99% de la réponse ! Il faut simplement utiliser FormulaArray avec les fonctions intégralement libellées en anglais... soit avec une virgule à la place du point-virgule !
 
 :)  
 
Ca donne (pour la clarté, sans la référence au classeur et à la feuille) : Range("K24" ).FormulaArray = "=SUM(IF($C$3:$C$9>2,$D$3:$E$9))" et normalement ça marche...


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » FormulaArray dans VBA Excel
 

Annonces Google
Publicité
Les ressources relatives