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
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...
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...
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...
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...
"Denis Michon" <denis....@cgocable.ca> a écrit dans le message de news:
T%Cn9.1381$%21.4...@charlie.risq.qc.ca...