Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA et formules matricielles...comment faire ?

411 views
Skip to first unread message

Dominique

unread,
Oct 5, 2002, 5:51:32 AM10/5/02
to
Bonjour à tous,

Dans une macro, je voudrais recopier par VBA une formule matricielle (de E22
à Exx) qui fonctionne parfaitement bien lorsque je l'utilise en direct, mais
lorsque j'intègre ma formule dans le code (obtenue par
l'enregistreur)...elle n'est plus matricielle...et forcement ça marche moins
bien ...

Sheets("CHARGES").Select
With Range("E22", Range("D22").End(xlDown).Offset(0, 1))
' formule matricielle :
{=SOMME(exttps*(extech<CNUM(aujourdhui))*(extcc=$B22))}
.FormulaR1C1 = "=SUM(exttps*(extech<VALUE(aujourdhui))*(extcc=RC2))"
.Value = .Value

Comment remédier à cela ?

Merci
Domi

Philippe Tulliez

unread,
Oct 5, 2002, 9:30:46 AM10/5/02
to
Bonjour Dominique,
Une réponse de Laurent Longre datant d'octobre 98 sur ce sujet.
Philippe
===================== Recherché sur Google ===============
Quand tu veux utiliser des guillemets à l'intérieur d'une chaîne de
caractères, il faut les redoubler. Ainsi, ta première instruction doit
s'écrire:

ActiveCell.FormulaArray = "=IF(OR(ISBLANK(A1:A10)),""Néant"",""Plein"")"

Si tu n'utilises pas deux guillemets successifs, VBA croit qu'il s'agit
du guillemet signalant la fin de la chaîne de caractères, d'où l'erreur
de syntaxe. De cette manière, si tu veux par exemple utiliser une chaîne
vide à l'intérieur d'une chaîne de caractères, tu dois mettre deux
paires de quillemets successifs:

ActiveCell.Formula = "="""""

Au fait, tu peux utiliser une formule non matricielle pour le même
résultat que {SI(OU(ESTVIDE...)}:

=SI(NB.SI(A1:A10;"=");"Blanc(s)";"OK")

Pour finir, tu as tout-à-fait raison, FormulaArray ne nécessite
absolument pas d'utiliser des références de type R1C1.

Laurent
====================================================

"Dominique" <greg...@ifrance.com> a écrit dans le message news:
ODB7qTFbCHA.1796@tkmsftngp12...

Denis Michon

unread,
Oct 5, 2002, 9:47:18 AM10/5/02
to
Bonjour Dominique,

Je te donne un exemple de syntaxe, je ne peux vérifier ta formule...
mais tu dois l'écrire avec les noms des fonctions en anglais :

With Worksheets(1).Range("h1")
.FormulaArray = "=sum(if($A$1:$A$3>2,1))"
End With

Le point virgule entre les arguments devient la virgule ,

Le si( ) devient un If ()

Dans ta formule tu dois traduire Aujourdhui par date

Est-ce que cela résout ton problème ?


Salutations!


"Dominique" <greg...@ifrance.com> a écrit dans le message de news: ODB7qTFbCHA.1796@tkmsftngp12...

Dominique

unread,
Oct 5, 2002, 10:39:52 AM10/5/02
to
Merci Denis, je n'ai pas encore testé tes suggestions, mais je vais le
faire.
En attendant j'ai trouvé cette solution peu protocolaire mais qui fonctionne


Sheets("CHARGES").Select
Range("E22").Select
Selection.FormulaArray =
"=SUM(exttps*(extech<VALUE(aujourdhui))*(extcc=RC2))"
Selection.AutoFill Destination:=Range("E22",
Range("C22").End(xlDown).Offset(0, 2)), Type:=xlFillDefault
Range("E22", Range("C22").End(xlDown).Offset(0, 2)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=
_
False, Transpose:=False
Application.CutCopyMode = False

PS : Aujourdhui dans ma formule est un champ nommé.

A+
Domi

"Denis Michon" <denis....@cgocable.ca> a écrit dans le message de news:
G3Cn9.1376$%21.4...@charlie.risq.qc.ca...

Denis Michon

unread,
Oct 5, 2002, 10:51:31 AM10/5/02
to
Bonjour Dominique,

PS : Aujourdhui dans ma formule est un champ nommé.

Ce n'est jamais une bonne idée d'utiliser les mots réservés
des fonctions, méthodes ou propriétés d'excel comme
nom de variable dans une procédure, fonction ou comme nom d'une
plage nommée.

C'est souvent suffisant pour confondre excel ....

Salutations!

"Dominique" <greg...@ifrance.com> a écrit dans le message de news: #VNnu0HbCHA.1304@tkmsftngp09...

Dominique

unread,
Oct 5, 2002, 12:48:41 PM10/5/02
to
c'est bien noté, je recommencerai plus !
Merci
Domi

"Denis Michon" <denis....@cgocable.ca> a écrit dans le message de news:

T%Cn9.1381$%21.4...@charlie.risq.qc.ca...

0 new messages