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

[VBA] validation matricielle

9 réponses
Avatar
bertrouf
Bonjour,
Je voudrais connaitre la syntaxe pour faire une validation matricielle dans
une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé de
revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.
merci
Bertrouf

9 réponses

Avatar
MichDenis
Des fois certaines formules sont plus difficiles que d'autres
à saisir en vba, tu peux utiliser ce "truc"

Tu inscris dans une cellule, le contenu de ta formule dont tu as
testé la validité dans la feuille de calcul.

Suppose que ta formule est en A1 et qu'elle fonctionne très bien

En VBA, tu peux inscrire :
Range("A5").Formula = "'" & Range("A1").Formula

Dans la cellule A5, tu vas avoir la bonne syntaxe à utiliser en VBA
Il ne te reste plus qu'à faire un copier-coller de ta formule en A5

Range("A1").FormulaArray = "=Le_coller_de_ta_formule"




"bertrouf" a écrit dans le message de news:

J'ai un message d'erreur sur la ligne :
"Impossible de définir la propriété FormulaArray de la classe Range."
Un coup de pouce supplémentaire svp ?
Bertrouf

"Modeste" wrote:

Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray = "=Sum(A1:C3)"





--
--
@+
;o)))






Avatar
Modeste
Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray = "=Sum(A1:C3)"





--
--
@+
;o)))

Avatar
bertrouf
J'ai un message d'erreur sur la ligne :
"Impossible de définir la propriété FormulaArray de la classe Range."
Un coup de pouce supplémentaire svp ?
Bertrouf

"Modeste" wrote:

Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray = "=Sum(A1:C3)"





--
--
@+
;o)))






Avatar
bertrouf
Je vais peut-être mettre la formule, ça va aider ;-)
Pour chaque fichier du Dossier cible, je rajoute une ligne, puis je fais la
somme des valeurs de la colonne B si et seulement si la colonne A donne
l'année 2005.
J'ai testé ma formule, elle semble bonne, mais quand je la rédige par macro
ca plante.
Bertrouf

-------------
nf = Dir(DOSSIER_CIBLE & "*.xls")
i = 2
Do While nf <> ""
Cells(i, 1) = nf
CHAINE_A = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$A$11:$A$25"
CHAINE_B = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$B$11:$B$25"
Range("C" & i).FormulaArray = "=SOMME(SI((ESTNUM(" _
& CHAINE_A & "));(ANNEE(" & CHAINE_A & ") 05)*(" _
& CHAINE_B & ")))"
i = i + 1
nf = Dir
Loop
------------------

"bertrouf" wrote:

J'ai un message d'erreur sur la ligne :
"Impossible de définir la propriété FormulaArray de la classe Range."
Un coup de pouce supplémentaire svp ?
Bertrouf

"Modeste" wrote:

Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray = "=Sum(A1:C3)"


--
--
@+
;o)))






Avatar
Daniel.C
Bonjour.
Avec "FormulaArray", tu dois mettre la formule en anglais. Si tu as un
problème, mets manuellement ta formule dans la feuille, et, dans une macro,
mets :
Var = Selection.FormulaArray
Tu obtiens la traduction.
Cordialement.
Daniel
"bertrouf" a écrit dans le message de
news:
Je vais peut-être mettre la formule, ça va aider ;-)
Pour chaque fichier du Dossier cible, je rajoute une ligne, puis je fais
la
somme des valeurs de la colonne B si et seulement si la colonne A donne
l'année 2005.
J'ai testé ma formule, elle semble bonne, mais quand je la rédige par
macro
ca plante.
Bertrouf

-------------
nf = Dir(DOSSIER_CIBLE & "*.xls")
i = 2
Do While nf <> ""
Cells(i, 1) = nf
CHAINE_A = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$A$11:$A$25"
CHAINE_B = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$B$11:$B$25"
Range("C" & i).FormulaArray = "=SOMME(SI((ESTNUM(" _
& CHAINE_A & "));(ANNEE(" & CHAINE_A & ") 05)*(" _
& CHAINE_B & ")))"
i = i + 1
nf = Dir
Loop
------------------

"bertrouf" wrote:

J'ai un message d'erreur sur la ligne :
"Impossible de définir la propriété FormulaArray de la classe Range."
Un coup de pouce supplémentaire svp ?
Bertrouf

"Modeste" wrote:

Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray = "=Sum(A1:C3)"


--
--
@+
;o)))








Avatar
bertrouf
Je termine ma journée maintenant, mais je reviendrai vous poser des questions
parce que ça ne fonctionne qu'un coup sur trois.
J'essaye de comprendre dans quel cas ça marche, ce serai un bon début.
@Daniel.C et MichDenis : merci pour l'astuce, c'est bien de l'anglais.

"Daniel.C" wrote:

Bonjour.
Avec "FormulaArray", tu dois mettre la formule en anglais. Si tu as un
problème, mets manuellement ta formule dans la feuille, et, dans une macro,
mets :
Var = Selection.FormulaArray
Tu obtiens la traduction.
Cordialement.
Daniel
"bertrouf" a écrit dans le message de
news:
Je vais peut-être mettre la formule, ça va aider ;-)
Pour chaque fichier du Dossier cible, je rajoute une ligne, puis je fais
la
somme des valeurs de la colonne B si et seulement si la colonne A donne
l'année 2005.
J'ai testé ma formule, elle semble bonne, mais quand je la rédige par
macro
ca plante.
Bertrouf

-------------
nf = Dir(DOSSIER_CIBLE & "*.xls")
i = 2
Do While nf <> ""
Cells(i, 1) = nf
CHAINE_A = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$A$11:$A$25"
CHAINE_B = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$B$11:$B$25"
Range("C" & i).FormulaArray = "=SOMME(SI((ESTNUM(" _
& CHAINE_A & "));(ANNEE(" & CHAINE_A & ") 05)*(" _
& CHAINE_B & ")))"
i = i + 1
nf = Dir
Loop
------------------

"bertrouf" wrote:

J'ai un message d'erreur sur la ligne :
"Impossible de définir la propriété FormulaArray de la classe Range."
Un coup de pouce supplémentaire svp ?
Bertrouf

"Modeste" wrote:

Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray = "=Sum(A1:C3)"


--
--
@+
;o)))













Avatar
bertrouf
Rebonjour,
Comme prévu, je reviens compléter mes questions :
J'ai la formule suivante qui boucle dans ma macro.
Range("C2").Formula = "=SUM(IF((ISNUMBER(" & CHAINE_A & ")),((YEAR(" _
& CHAINE_A & ")=" & Num_Annee & "))*((" & CHAINE_B & "))))"

Ensuite, je valide par Ctrl+Maj+Entrée, j'ai le bon résultat.
Je tente de valider le calcul matriciel pour simplifier :
Range("C2").FormulaArray = "=SUM(IF((ISNUMBER(" & CHAINE_A & ")),((YEAR(" _
& CHAINE_A & ")=" & Num_Annee & "))*((" & CHAINE_B & "))))"

J'ai un message d'erreur :
"Impossible de définir la proriété FormulaArray de la classe Range."

Ca parle à quelqu'un ?
Je fourni la macro complète si nécessaire.
Merci,
Bertrouf


"bertrouf" wrote:

Je termine ma journée maintenant, mais je reviendrai vous poser des questions
parce que ça ne fonctionne qu'un coup sur trois.
J'essaye de comprendre dans quel cas ça marche, ce serai un bon début.
@Daniel.C et MichDenis : merci pour l'astuce, c'est bien de l'anglais.

"Daniel.C" wrote:

Bonjour.
Avec "FormulaArray", tu dois mettre la formule en anglais. Si tu as un
problème, mets manuellement ta formule dans la feuille, et, dans une macro,
mets :
Var = Selection.FormulaArray
Tu obtiens la traduction.
Cordialement.
Daniel
"bertrouf" a écrit dans le message de
news:
Je vais peut-être mettre la formule, ça va aider ;-)
Pour chaque fichier du Dossier cible, je rajoute une ligne, puis je fais
la
somme des valeurs de la colonne B si et seulement si la colonne A donne
l'année 2005.
J'ai testé ma formule, elle semble bonne, mais quand je la rédige par
macro
ca plante.
Bertrouf

-------------
nf = Dir(DOSSIER_CIBLE & "*.xls")
i = 2
Do While nf <> ""
Cells(i, 1) = nf
CHAINE_A = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$A$11:$A$25"
CHAINE_B = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$B$11:$B$25"
Range("C" & i).FormulaArray = "=SOMME(SI((ESTNUM(" _
& CHAINE_A & "));(ANNEE(" & CHAINE_A & ") 05)*(" _
& CHAINE_B & ")))"
i = i + 1
nf = Dir
Loop
------------------

"bertrouf" wrote:

J'ai un message d'erreur sur la ligne :
"Impossible de définir la propriété FormulaArray de la classe Range."
Un coup de pouce supplémentaire svp ?
Bertrouf

"Modeste" wrote:

Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray = "=Sum(A1:C3)"


--
--
@+
;o)))















Avatar
bertrouf
Je pense avoir trouvé le problème : ma formule dépasse les 255 caractères.
http://support.microsoft.com/kb/201354/fr
Mais je cherche toujours la solution...
Bertrouf


"bertrouf" wrote:

Rebonjour,
Comme prévu, je reviens compléter mes questions :
J'ai la formule suivante qui boucle dans ma macro.
Range("C2").Formula = "=SUM(IF((ISNUMBER(" & CHAINE_A & ")),((YEAR(" _
& CHAINE_A & ")=" & Num_Annee & "))*((" & CHAINE_B & "))))"

Ensuite, je valide par Ctrl+Maj+Entrée, j'ai le bon résultat.
Je tente de valider le calcul matriciel pour simplifier :
Range("C2").FormulaArray = "=SUM(IF((ISNUMBER(" & CHAINE_A & ")),((YEAR(" _
& CHAINE_A & ")=" & Num_Annee & "))*((" & CHAINE_B & "))))"

J'ai un message d'erreur :
"Impossible de définir la proriété FormulaArray de la classe Range."

Ca parle à quelqu'un ?
Je fourni la macro complète si nécessaire.
Merci,
Bertrouf


"bertrouf" wrote:

Je termine ma journée maintenant, mais je reviendrai vous poser des questions
parce que ça ne fonctionne qu'un coup sur trois.
J'essaye de comprendre dans quel cas ça marche, ce serai un bon début.
@Daniel.C et MichDenis : merci pour l'astuce, c'est bien de l'anglais.

"Daniel.C" wrote:

Bonjour.
Avec "FormulaArray", tu dois mettre la formule en anglais. Si tu as un
problème, mets manuellement ta formule dans la feuille, et, dans une macro,
mets :
Var = Selection.FormulaArray
Tu obtiens la traduction.
Cordialement.
Daniel
"bertrouf" a écrit dans le message de
news:
Je vais peut-être mettre la formule, ça va aider ;-)
Pour chaque fichier du Dossier cible, je rajoute une ligne, puis je fais
la
somme des valeurs de la colonne B si et seulement si la colonne A donne
l'année 2005.
J'ai testé ma formule, elle semble bonne, mais quand je la rédige par
macro
ca plante.
Bertrouf

-------------
nf = Dir(DOSSIER_CIBLE & "*.xls")
i = 2
Do While nf <> ""
Cells(i, 1) = nf
CHAINE_A = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$A$11:$A$25"
CHAINE_B = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$B$11:$B$25"
Range("C" & i).FormulaArray = "=SOMME(SI((ESTNUM(" _
& CHAINE_A & "));(ANNEE(" & CHAINE_A & ") 05)*(" _
& CHAINE_B & ")))"
i = i + 1
nf = Dir
Loop
------------------

"bertrouf" wrote:

J'ai un message d'erreur sur la ligne :
"Impossible de définir la propriété FormulaArray de la classe Range."
Un coup de pouce supplémentaire svp ?
Bertrouf

"Modeste" wrote:

Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray = "=Sum(A1:C3)"


--
--
@+
;o)))

















Avatar
Daniel.C
Une solution glabée sur Internet consiste diviser ta formule en deux et à
placer une constante ("X_X_X()) dans l'exemple), avec suffisamment de
parenthèses pour former une formule cohérente :

Dim theFormulaPart1 As String
Dim theFormulaPart2 As String
theFormulaPart1 = "=IF(MONTH(DATE(YEAR(NOW()),MONTH(NOW()),1))-" & _
"MONTH(DATE(YEAR(NOW()),MONTH(NOW()),1)-" & _
"(WEEKDAY(DATE(YEAR(NOW()),MONTH(NOW()),1))-1)+" &
_
"{0;1;2;3;4;5}*7+{1,2,3,4,5,6,7}-1),""""," & _
"X_X_X())"

theFormulaPart2 = "DATE(YEAR(NOW()),MONTH(NOW()),1)-" & _
"(WEEKDAY(DATE(YEAR(NOW()),MONTH(NOW()),1))-1)+" & _
"{0;1;2;3;4;5}*7+{1,2,3,4,5,6,7}-1)"

With ActiveSheet.Range("E2:K7")
.FormulaArray = theFormulaPart1
.Replace "X_X_X())", theFormulaPart2
.NumberFormat = "mmm dd"
End With

Daniel

"bertrouf" a écrit dans le message de
news:
Je pense avoir trouvé le problème : ma formule dépasse les 255 caractères.
http://support.microsoft.com/kb/201354/fr
Mais je cherche toujours la solution...
Bertrouf


"bertrouf" wrote:

Rebonjour,
Comme prévu, je reviens compléter mes questions :
J'ai la formule suivante qui boucle dans ma macro.
Range("C2").Formula = "=SUM(IF((ISNUMBER(" & CHAINE_A & ")),((YEAR(" _
& CHAINE_A & ")=" & Num_Annee & "))*((" & CHAINE_B & "))))"

Ensuite, je valide par Ctrl+Maj+Entrée, j'ai le bon résultat.
Je tente de valider le calcul matriciel pour simplifier :
Range("C2").FormulaArray = "=SUM(IF((ISNUMBER(" & CHAINE_A & ")),((YEAR("
_
& CHAINE_A & ")=" & Num_Annee & "))*((" & CHAINE_B & "))))"

J'ai un message d'erreur :
"Impossible de définir la proriété FormulaArray de la classe Range."

Ca parle à quelqu'un ?
Je fourni la macro complète si nécessaire.
Merci,
Bertrouf


"bertrouf" wrote:

Je termine ma journée maintenant, mais je reviendrai vous poser des
questions
parce que ça ne fonctionne qu'un coup sur trois.
J'essaye de comprendre dans quel cas ça marche, ce serai un bon début.
@Daniel.C et MichDenis : merci pour l'astuce, c'est bien de l'anglais.

"Daniel.C" wrote:

Bonjour.
Avec "FormulaArray", tu dois mettre la formule en anglais. Si tu as
un
problème, mets manuellement ta formule dans la feuille, et, dans une
macro,
mets :
Var = Selection.FormulaArray
Tu obtiens la traduction.
Cordialement.
Daniel
"bertrouf" a écrit dans le
message de
news:
Je vais peut-être mettre la formule, ça va aider ;-)
Pour chaque fichier du Dossier cible, je rajoute une ligne, puis je
fais
la
somme des valeurs de la colonne B si et seulement si la colonne A
donne
l'année 2005.
J'ai testé ma formule, elle semble bonne, mais quand je la rédige
par
macro
ca plante.
Bertrouf

-------------
nf = Dir(DOSSIER_CIBLE & "*.xls")
i = 2
Do While nf <> ""
Cells(i, 1) = nf
CHAINE_A = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$A$11:$A$25"
CHAINE_B = "'[" & nf & "]" & FEUILLE_CIBLE & "'!$B$11:$B$25"
Range("C" & i).FormulaArray = "=SOMME(SI((ESTNUM(" _
& CHAINE_A & "));(ANNEE(" & CHAINE_A & ") 05)*(" _
& CHAINE_B & ")))"
i = i + 1
nf = Dir
Loop
------------------

"bertrouf" wrote:

J'ai un message d'erreur sur la ligne :
"Impossible de définir la propriété FormulaArray de la classe
Range."
Un coup de pouce supplémentaire svp ?
Bertrouf

"Modeste" wrote:

Bonsour® bertrouf avec ferveur ;o))) vous nous disiez :

Je voudrais connaitre la syntaxe pour faire une validation
matricielle dans une macro.
Une fois ma formule écrite dans la case par la macro, je suis
obligé
de revenir sur chaque ligne et de faire un Ctrl+Maj+Entrée.


exemple :

Worksheets("feuil1").Range("E1:E3").FormulaArray =
"=Sum(A1:C3)"


--
--
@+
;o)))