Formule matricielle en VBA

Bonjour le groupe,

Une bonne âme accepterait-elle de m'aider, svp ?

J'ai une formule matricielle en colonne W (à partir de W2), je souhaiterais la transformer en VBA afin d'automatiser son calcul via une macro, j'ai rentré ce code (ci-dessous) mais j'ai une erreur "Impossible de définir la propriété FormulaArray de la classe Range."

Sub Tps_Travail()

 With Sheets("Feuil2")
DernLigne = Range("B" & Rows.Count).End(xlUp).Row

    Range("w2").FormulaArray = "=SIERREUR(SI(SIERREUR(INDEX(usb_m2;(EQUIV(1;(DATE_M2=LC(-7))*(CAUSE=""cause 2"")*(Poste_M2=LC(-6));0));21)+1=NB.SI.ENS(L2C(-7):LC18;LC(-7);L2C(-6):LC19;LC(-6));"""");"""";SI(INDEX(usb_m2;(EQUIV(1;(DATE_M2=LC(-7))*(CAUSE=""cause 2"")*(Poste_M2=LC(-6));0));21)+1=NB.SI.ENS(L2C(-7):LC18;LC(-7);L2C(-6):LC19;LC(-6))-1;SOMME.SI.ENS(Temps_d_arrêt;DATE_M2;L(5)C(-7);Poste_M2;" & _
        "L(5)C(-6);CHRONO_M2;""=0"")-SOMME.SI.ENS(Temps_d_arrêt;DATE_M2;L(5)C(-7);Poste_M2;L(5)C(-6);HEURES_M2;"">0.20833"");SI(INDEX(usb_m2;(EQUIV(1;(DATE_M2=LC(-7))*(CAUSE=""cause 2"")*(Poste_M2=LC(-6));0));21)+1=NB.SI.ENS(L2C(-7):LC18;LC(-7);L2C(-6):LC19;LC(-6))+1;SOMME.SI.ENS(Temps_d_arrêt;DATE_M2;LC(-7);Poste_M2;LC(-6);HEURES_M2;"">0.20833"");"""")));"""")" & _
        ""
    Range("w2").AutoFill Destination:=Range("w2:w" & DernLigne)
    End With

End Sub

Je vous remercie pour votre aide.

Sandrine

Bonjour,

Vous pourriez utiliser l'éditeur VBA pour trouver la correspondance en VBA. Pour cela :

  • Placez-vous sur la cellule W2.
  • Basculez sur l'éditeur VBA.
  • Ouvrez la fenêtre exécution (Ctrl-G)
  • Tapez :
? ActiveCell.Formula2R1C1

Lorsque vous aurez des "", il vous faudra les doubler. Vos guillemets semblent déjà doublés dans votre formule, à voir.

Bonjour et merci pour votre aide.

Lorsque je fais ce que vous me dites j'ai une erreur = Erreur définie par l'application ou par l'objet"

Je ne comprends pas

Votre formule est toujours en matricielle ? Qu'obtenez vous dans la fenêtre exécution ?

Il faut que je recopie toute la formule dans la fenêtre d'exécution ?

En vous plaçant dans la fenêtre exécution si vous tapez ? ActiveCell.Formula2R1C1 vous allez récupérer la formule VBA si votre cellule active est W2.

Un exemple qui n'a rien a voir avec votre formule :

capture

J'ai un code erreur ="Erreur définie par l'application ou par l'objet"

Je joins un fichier, qui n'est qu'une ébauche.

Merci encore pour votre aide

Sandrine

Les formules se sont effacées à l'ouverture. Pouvez-vous mettre la formule d'origine en W2 sans transformation en ligne ?

Bonsoir,

Je suis désolée pour mon temps (extrêmement long !) de réponse... mais j'ai eu un empêchement et de plus il y a un réel problème avec ma formule !!! je vérifie tout ça et je reviens vers vous dès que j'ai compris où ça pêche !!!

Je vous souhaite une bonne soirée.

Sandrine

Bonsoir,

Je joins un nouveau fichier, qui j'espère ne posera plus de souci.

Dans le doute, voici quand même la formule matricielle que je cherche à transformer en VBA

=SIERREUR(SI(INDEX(usb_m2;EQUIV(1;(DATE_M2=Q2)*(CAUSE="cause 2")*(Poste_M2=R2);0);21)=U2;0;SI(INDEX(usb_m2;EQUIV(1;(DATE_M2=Q2)*(CAUSE="cause 2")*(Poste_M2=R2);0);21)=U2+1;SOMME.SI.ENS(Temps_Arret_M2;DATE_M2;Q3;Poste_M2;R3;Cle_Heures;"<"&INDEX(usb_m2;EQUIV(1;(DATE_M2=Q2)*(CAUSE="cause 2")*(Poste_M2=R2);0);21));SI(INDEX(usb_m2;EQUIV(1;(DATE_M2=Q2)*(CAUSE="cause 2")*(Poste_M2=R2);0);21)=U2-1;SOMME.SI.ENS(Temps_Arret_M2;DATE_M2;Q3;Poste_M2;R3;Cle_Heures;">"&INDEX(usb_m2;EQUIV(1;(DATE_M2=Q2)*(CAUSE="cause 2")*(Poste_M2=R2);0);21));0)));0)

Je vous remercie pour l'aide apportée.

Sandrine

Rechercher des sujets similaires à "formule matricielle vba"