Formule matricielle ne fonctionne pas par macro

Bonjour à tous,

Je rencontre des difficultés pour insérer dans une cellule une formule matricielle par le biais d'une macro

Quand j’exécute la macro, elle n'insère pas la formule dans la cellule. Est ce le "IFERROR" qui fait tout beuguer?

Formule fait à l'aide de l'enregistreur de macro :

Range("BG4").Select

    Selection.FormulaArray = _
        "=IFERROR(INDEX(Date1,MATCH(TRUE,R[18]C[-57]:R[18]C[-27]=""R"",0)),IFERROR(INDEX(Date1,MATCH(TRUE,R[18]C[-57]:R[18]C[-27]=""C"",0)),IFERROR(INDEX(Date1,MATCH(TRUE,R[18]C[-57]:R[18]C[-27]=""CA"",0)),IFERROR(INDEX(Date1,MATCH(TRUE,R[18]C[-57]:R[18]C[-27]=""CE"",0)),IFERROR(INDEX(Date1,MATCH(TRUE,R[18]C[-57]:R[18]C[-27]=""CP"",0)),IFERROR(INDEX(Date1,MATCH(TRUE,R[18]C[-" & _
        "57]:R[18]C[-27]=""SS"",0)),""""))))))"
Range("BG4").Select
    Selection.AutoFill Destination:=Range("BG4:BG27"), Type:=xlFillDefault

Formule d'origine dans ma cellule:

=SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4="R";0));SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4="C";0));SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4="CA";0));SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4="CE";0));SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4="CP";0));SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4="SS";0));""))))))

Merci beaucoup pour votre aide.

Bonjour jyconnais rien

Voici ce que vous pouvez faire

Sub Exemple()
  Dim sForm As String
  sForm = "=SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4=""R"";0));SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4=""C"";0))" _
  & ";SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4=""CA"";0));SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4=""CE"";0))" _
  & ";SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4=""CP"";0));SIERREUR(INDEX(Date1;EQUIV(VRAI;B4:AF4=""SS"";0));""""))))))"
  ' Inscrire la formule
  Range("BG4").FormulaLocal = sForm
End Sub

A+

Bonjour,

Une formule matricielle est-elle vraiment nécessaire? d'après ce que je crois comprendre, ceci devrait marcher, formule simple:

=SIERREUR(SI(EQUIV("R";$B$4:$AF$4;0)>0;"R");SIERREUR(SI(EQUIV("C";$B$4:$AF$4;0)>0;"C");SIERREUR(SI(EQUIV("CA";$B$4:$AF$4;0)>0;"CA");SIERREUR(SI(EQUIV("CE";$B$4:$AF$4;0)>0;"CE");SIERREUR(SI(EQUIV("CP";$B$4:$AF$4;0)>0;"CP");SIERREUR(SI(EQUIV("SS";$B$4:$AF$4;0)>0;"SS");""))))))

en VBA:

    Range("BG4").FormulaR1C1 = _        "=IFERROR(IF(MATCH(""R"",R4C2:R4C32,0)>0,""R""),IFERROR(IF(MATCH(""C"",R4C2:R4C32,0)>0,""C""),IFERROR(IF(MATCH(""CA"",R4C2:R4C32,0)>0,""CA""),IFERROR(IF(MATCH(""CE"",R4C2:R4C32,0)>0,""CE""),IFERROR(IF(MATCH(""CP"",R4C2:R4C32,0)>0,""CP""),IFERROR(IF(MATCH(""SS"",R4C2:R4C32,0)>0,""SS""),""""))))))"

Mais je peux me tromper!

Cdlt

Bruno,

Merci pour ton aide...en fait je souhaiterais utiliser l'autre formule, celle enregistré par la macro car j'ai besoin qu'elle soit valider en matricielle pour qu'elle fonctionne. Problème la macro ne veut pas insérer cette formule enregistré par la macro.

Arturo,

Merci pour ton aide également...Oui elle est indispensable. je duplique une feuille plusieurs fois à l'identique et ensuite il faut que j’insère dans chacune des ces feuilles cette formule qui doit etre adaptée pour chaque feuille.

En fait ma question est :

"est-il possible d’écrire une formule matricielle en code VBA ?"

Selection.FormulaArray =

NE FONCTIONNE PAS

Une formule matricielle est-elle vraiment nécessaire?
Oui elle est indispensable. je duplique une feuille plusieurs fois à l'identique et ensuite il faut que j’insère dans chacune des ces feuilles cette formule qui doit etre adaptée pour chaque feuille.


Dans votre formule que représente la plage "Date1"?

c'est une plage de dates renommée "Date1" pour le mois de janvier.

Date2 : février

Date3 : mars

etc...

oui, mais quelles plages d'adresses?

Le mieux serait d'avoir à disposition une copie (sans données confidentielles) d'une de vos feuille.

Voici le fichier.... j'ai laissé quelques indices sur la feuil

Un grand merci pour votre aide!

Maintenant je vois mieux, et comme je disais , il n'y a pas besoin de formule matricielle.

Formule excel en BG4:

=SIERREUR(INDEX($B$3:$AE$27;1;EQUIV("*";$B4:$AF4;0));"")

et en vba, la formule s'applique sur la plage entière de BG4:BG27, inutile d'étirer la formule vers le bas

 Range("BG4:BG27").FormulaR1C1 = "=IFERROR(INDEX(R3C2:R27C31,1,MATCH(""*"",RC2:RC32,0)),"""")"

A reproduire pour les autres mois.

CDLT

Roooooo.... Cela fonctionne impec!!!

Un grand merci à toi et à tous qui s'investissent pour venir en aide.

Bonne continuation...

Rechercher des sujets similaires à "formule matricielle fonctionne pas macro"