de formule à macro

altinea

XLDnaute Accro
Bonsoir, je souhaiterai pouvoir transformer une formule en macro, je m'explique, afin de sécuriser la formule,


Voici la macro que j'essaye de mettre en place mais ça ne fonctionne pas.
Sub Macro5()

ActiveSheet.PasteSpecial Format:="Texte Unicode", Link:=False, _
DisplayAsIcon:=False, NoHTMLFormatting:=True
Selection.FormulaArray = _
"=IF(OR('Formations PSST'!RC41<>3,'Formations PSST'!RC6="""",ISTEXT('Formations PSST'!RC6)),"""",LEFT('Formations PSST'!RC5,5)&""-""&YEAR('Formations PSST'!RC6)&""-""&TEXT(SUM(IF(ISNUMBER(R4C[-30]:RC[-30])*SUBTOTAL(3,OFFSET(R3C[-31],ROW(INDIRECT(""1:""&ROWS(R4:R))),)),(R4C[-31]:RC[-31]=RC[-31])*(R4C[5]:RC[5]=3)*(YEAR(R4C[-30]:RC[-30])=YEAR(RC[-30])))),""00""))"
Selection.AutoFill Destination:=Range("AJ4:AJ"), Type:=xlFillDefault
Range("AJ4:AJ").Select

End Sub

ici le code de la formule que je souhaite appliquer

{=SI(OU('Formations PSST'!$AO4<>3;'Formations PSST'!$F4="";ESTTEXTE('Formations PSST'!$F4));"";GAUCHE('Formations PSST'!$E4;5)&"-"&ANNEE('Formations PSST'!$F4)&"-"&TEXTE(SOMME(SI(ESTNUM(F$4:F4)*SOUS.TOTAL(3;DECALER(E$3;LIGNE(INDIRECT("1:"&LIGNES($4:4)));));(E$4:E4=E4)*(AO$4:AO4=3)*(ANNEE(F$4:F4)=ANNEE(F4))));"00"))}


Ci joint fichier, je rencontre un problème avec la formule ainsi faite car lors des divers tri que je peux opérer les formules ne s’actualisent pas,

merci pour votre aide
 

Pièces jointes

  • alti formule à macro.xlsm
    110.1 KB · Affichages: 43

tbft

XLDnaute Accro
Re : de formule à macro

bonjour

j'ai du mal avec la formule (vendredi apres midi peut etre???)

je pense qu'il faut passer par une fonction ecrite en vba.

public function ma_fonction(entree1, entree2, entree3,....)
......
end function

mais il faut clairement identifier les entrées...

en ce qui concerne les formules vba type matrice, il est possible de récuperer la taille de la matrice resultat
 

altinea

XLDnaute Accro
Re : de formule à macro

le forum, merci Nairolf, tbft, le but est en fait que lorsque je j'effectue un tri dans n'importe qu'elle colonne, que la formule dans la colonne AJ4, la formule prenne bien les infos de la ligne concernée, actuellement avec la formule si j'inverse les noms A->Z vers Z->A, en AJle formul ene se met pas à jour, je pensais pouvoir avec une macro trouver une solution plus stable.

Les entrées et le résultat attendu :
AO4 si dans cette cellule le chiffre 3 est présent alors ->
dans F4 on prends en compte l'année
dans E4 on prends en compte les 5 premiers caractères en partant de la gauche
puis on incrémente un numéro d'ordre en fonction de F4 (année) et E4 (site)

ce qui peut donner comme résultat :AAAA-2014-1, AAAAA-2014-2, BBBBB-2011-1

Voila j'espère que cela permettra de voir plus clair dans ma demande
merci encore
 

altinea

XLDnaute Accro
Re : de formule à macro

le forum, merci Nairolf, tbft, le but est en fait que lorsque je j'effectue un tri dans n'importe qu'elle colonne, que la formule dans la colonne AJ4, la formule prenne bien les infos de la ligne concernée, actuellement avec la formule si j'inverse les noms A->Z vers Z->A, en AJle formul ene se met pas à jour, je pensais pouvoir avec une macro trouver une solution plus stable.

Les entrées et le résultat attendu :
AO4 si dans cette cellule le chiffre 3 est présent alors ->
dans F4 on prends en compte l'année
dans E4 on prends en compte les 5 premiers caractères en partant de la gauche
puis on incrémente un numéro d'ordre en fonction de F4 (année) et E4 (site)

ce qui peut donner comme résultat :AAAA-2014-1, AAAAA-2014-2, BBBBB-2011-1

Voila j'espère que cela permettra de voir plus clair dans ma demande
merci encore
 

JCGL

XLDnaute Barbatruc
Re : de formule à macro

Bonjour à tous,

Il me semble que ceci devrait suffire (tu es dans un Tableau l'Autofill n'a pas lieu d'être) :

Code:
Sub Macro6()    Range("AJ4").Formula = "=IF(OR(RC41<>3,RC6="""",ISTEXT(RC6)),"""",LEFT(RC5,5)&""-""&YEAR(RC6)&""-""&TEXT(SUM(IF(ISNUMBER(R4C[-30]:RC[-30])*SUBTOTAL(3,OFFSET(R3C[-31],ROW(INDIRECT(""1:""&ROWS(R4:R))),)),(R4C[-31]:RC[-31]=RC[-31])*(R4C[5]:RC[5]=3)*(YEAR(R4C[-30]:RC[-30])=YEAR(RC[-30])))),""00""))"
    Range("AJ4").Select
End Sub

A+ à tous
 

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet