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

Résolu/Fermé
alex141077 Messages postés 52 Date d'inscription vendredi 5 avril 2013 Statut Membre Dernière intervention 8 février 2022 - Modifié le 8 févr. 2022 à 13:43
alex141077 Messages postés 52 Date d'inscription vendredi 5 avril 2013 Statut Membre Dernière intervention 8 février 2022 - 8 févr. 2022 à 18:49
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
A voir également:

4 réponses

michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
Modifié le 8 févr. 2022 à 14:54
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
alex141077 Messages postés 52 Date d'inscription vendredi 5 avril 2013 Statut Membre Dernière intervention 8 février 2022 2
8 févr. 2022 à 16:24
j'aimerais bien mais je n'arrive à trouver comment vous joindre mon fichier?!
0
f894009 Messages postés 17268 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 29 mars 2025 1 713
8 févr. 2022 à 16:38
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
alex141077 Messages postés 52 Date d'inscription vendredi 5 avril 2013 Statut Membre Dernière intervention 8 février 2022 2
8 févr. 2022 à 18:49
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