Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Nairolf

XLDnaute Accro
Re : de formule à macro

Salut altinea,

Je t'avoue ne pas avoir tout compris dans ton besoin, mais sache que la propriété FormulaArray a une limite de 255 caractères (ta formule en compte 363).
 

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
 

altinea

XLDnaute Accro
Re : de formule à macro

Bonsoir, le forum, le fil, JCGL désolé pour le retard mais j'étais en week end prolongé au bord de l'eau, merci encore ça à l'air de fonctionner.
Bonne soirée
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…