Recopier une formule jusqu'en bas d'un tableau via une macro
Bonjour à tous,
Étant grand débutant en VBA, je suis confronté à un petit problème : je dois recopier des formules (de AP2 jusqu'à BB2) jusqu'en bas d'un tableau, sachant que ce tableau ne fait pas toujours la même taille.
Voici le code :
'Formule AP2
Range("AP2").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(VLOOKUP(RC[-41],'retour client'!C[-41]:C[-39],3,0),""-"")"
Range("AP3").Select
'Formule AQ2
Range("AQ2").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISNUMBER(SEARCH(""acc en l'état"",RC[-11])),""À REMETTRE EN CYCLE"",IF(ISNUMBER(SEARCH(""en attente prise en compte"",RC[-11])),""DÉRO À POSER"",IF(ISNUMBER(SEARCH(""en attente décision"",RC[-11])),""ATTENTE DÉCISION CLIENT"",IF(ISNUMBER(SEARCH(""demande solde"",RC[-11])),""ATTENTE DÉCISION CLIENT"",IF(ISNUMBER(SEARCH(""à réparer"",RC[-11])),""À RÉPARER"",IF(ISNUMBER(SEARCH(""en attente envoi"",RC[-11])),""DÉRO À POSER"",IF(ISNUMBER(SEARCH(""en attente initialisation"",RC[-11])),""DÉRO À POSER"",""--"")))))))"
Range("AQ3").Select
'Formule AR2-->AW2
Range("AR2").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISNUMBER(SEARCH(""en attente création"",RC[-9])),""ATTENTE GAMME"",IF(ISNUMBER(SEARCH(""Fiche terminée"",RC[-9])),""À RÉPARER"",IF(ISNUMBER(SEARCH(""en attente établissement"",RC[-9])),""ATTENTE GAMME"",IF(ISNUMBER(SEARCH(""en attente lancement"",RC[-9])),""ATTENTE GAMME"",IF(ISNUMBER(SEARCH(""validation client"",RC[-9])),""VALIDATION CLIENT"",0)))))"
Range("AR2").Select
Selection.AutoFill Destination:=Range("AR2:AW2"), Type:=xlFillDefault
Range("AR2:AW2").Select
Range("AW3").Select
'Formule AX2
Range("AX2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-6]<>0,RC[-6],IF(RC[-5]<>0,RC[-5],IF(RC[-4]<>0,RC[-4],IF(RC[-3]<>0,RC[-3],IF(RC[-2]<>0,RC[-2],IF(RC[-1]<>0,RC[-1],""--""))))))"
Range("AX3").Select
'Formule AY2
Range("AY2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-24]="""",""--"",""SOUS TRAITANCE"")"
Range("AY3").Select
'Formule AZ2
Range("AZ2").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(VLOOKUP(RC[-51],'valo of'!C[-51]:C[-35],17,0),0)"
Range("AZ3").Select
'Formule BA2
Range("BA2").Select
ActiveCell.FormulaR1C1 = _
"=IF(AND(RC[-10]=""déro à poser"",RC[-3]=""attente gamme""),""ATTENTE GAMME"",IF(AND(RC[-10]=""à remettre en cycle"",RC[-3]=""à réparer""),""À RÉPARER"",IF(AND(RC[-10]=""à remettre en cycle"",RC[-3]=""attente gamme""),""ATTENTE GAMME"",IF(AND(RC[-10]=""à remettre en cycle"",RC[-3]=""validation client""),""ATTENTE GAMME"",IF(AND(RC[-10]=""à réparer"",RC[-3]=""validation client""),""ATTENTE GAMME"",IF(AND(RC[-10]=""à réparer"",RC[-3]=""à réparer""),""À RÉPARER"",IF(AND(RC[-10]=""attente décision client"",RC[-3]=""validation client""),""ATTENTE DÉCISION CLIENT"",IF(AND(RC[-10]=""attente décision client"",RC[-3]=""attente gamme""),""ATTENTE DÉCISION CLIENT"",IF(AND(RC[-10]=""attente décision client"",RC[-3]=""à réparer""),""ATTENTE DÉCISION CLIENT"",IF(LEN(RC[-10])>LEN(RC[-3])=FALSE,RC[-3],RC[-10]))))))))))"
Range("BA3").Select
'Formule BB2
Range("BB2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-3]=""SOUS TRAITANCE"",RC[-3],RC[-1])"
Range("BB3").Select
'Descendre les formules
Selection.AutoFill Destination:=Range("AP2:BB3760")
Range("AP2:BB3760").Select
Range("AP2").SelectComme vous le voyez, dans la dernière étape de la macro, avec l'enregistreur, il me met BB3760, mais le tableau peut très bien parfois avoir 10 000 lignes ou 200...
En espérant avoir été assez clair, et que vous pourrez m'aider et m'expliquer,
Merci
Bonjour,
Je considère qu'il plus facile et plus rapide de mettre directement les formules dans la feuille, et de recopier par tirage, ce qui se fait en une fois. L'écriture de formules par macro prend plus de temps !
Si la recopie sur plusieurs milliers de lignes peut poser problème, dans ce cas une macro pour recopier la première ligne de formules qu'on a bêti dans la feuille est rapide à écrire.
Cordialement.