Est-il possible d’écrire une formule matricielle en code VBA

Résolu
Bonjour à tous,

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

Quand j’exécute la macro, elle n'insère pas la formule dans la cellule.

elles sont indispensables car je duplique une feuille plusieurs fois à l'identique et ensuite il faut que j’insère dans chacune des ces feuilles une formule matricielles différentes adaptée pour chaque feuille.

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));""))))))


La fonction
Selection.FormulaArray =
ne fonctionne pas
Merci beaucoup pour votre aide.

Configuration: Windows / Chrome 97.0.4692.99

4 réponses

  1. Contributeur
    Bonjour;

    La mieux serait de nous joindre ton classeur (anonymisé) en expliquant clairement ce que tu veux obtenir... la logique VBA est différente de la logique "formule" d'Excel
    en VBA, pour utiliser des matricielles, il existe la fonction "evaluate"
    0
    1. j'aimerais bien mais je n'arrive à trouver comment vous joindre mon fichier?!
      0
      1. Bonjour a tous

        Pour transmettre un fichier,
        Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
        il faut passer par un site de pièce jointe tel que cjoint.com

        Allez sur ce site : https://www.cjoint.com/
        Clic sur parcourir,
        Cherche ton fichier,
        clic sur ouvrir,
        Clic sur "Créer le lien cjoint",
        Copier le lien,
        Revenir ici le coller dans une réponse...
        0
        1. Voici la solution, je la poste pour venir en aide à ceux qui en auraient besoin...

          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)),"""")"


          Et un grand merci pour votre contribution
          0