[VBA] validation matricielle

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #5238291
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"
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)))






Modeste
Le #5237531
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)))

bertrouf
Le #5237481
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)))






bertrouf
Le #5237471
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)))






Daniel.C
Le #5237461
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" 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)))








bertrouf
Le #5237351
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" 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)))













bertrouf
Le #5178161
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" 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)))















bertrouf
Le #5178091
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" 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)))

















Daniel.C
Le #5178041
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" 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" 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)))



















Publicité
Poster une réponse
Anonyme