Tirer une formule sur un nombre de lignes variable

Bonjour,

je suis actuellement en train de rediger une macro qui est censée poser une formule en A2 et une autre en D2 et ensuite tirer ses formules vers le bas jusqu'en bas du tableau dont le nombre de lignes varie chaque semaine. Pour le moment j'ai remplie arbitrairement de A2 à A500 et de D2 à D500 mais c'est très laid car mon tableau se finit à la ligne 31 pour les autres colonnes.

En résumé, il faut que j'arrive à changer le A500 et le D500 en chiffre variable.

Range("A2").Select

ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[1],BU!C:C[1],2,0),"""")"

Range("A2").Select

Selection.AutoFill Destination:=Range("A2:A500")

Range("D2").Select

ActiveCell.FormulaR1C1 = _

"=IF(RC[3]=""signed"",""Signed"",IF(RC[4]>=80,""Worst Case"",""Best Case""))"

Range("D2").Select

Selection.AutoFill Destination:=Range("D2:D500")

Merci d'avance

Bonjour Jdohuu,

Je vois que tu utilises l'enregistreur de macro. Très bien. Je vais te lancer sur une piste.

Enregistre les tâches suivantes et poste le code associé :

1- Place-toi dans la toute dernière cellule de la colonne A.

2- Appuie sur CTRL + flèche du haut

3- Stoppe l'enregistrement

Bonjour,

et quand tu auras trouvé la dernière ligne avec les conseils de vba-new :

  • éviter les .select inutiles qui ralentissent
  • tu peux mettre ta formule dans une plage complète sans utiliser autofill :
Range("A2:A" & derlig).formula = "=ta_formule_ref_typeA1"

ou

Range("A2:A" & derlig).formulaLocal = "=ta_formule_ref_typeA1_fonctions_en_français"

eric

Bonjour,

Je vais essayer avec votre methode qui l'air bien efficace et réutilisable . Merci bien !

Sinon j'ai trouvé un truc qui a l'air de marcher, je sais pas ce que vous en pensez :

Dim I As Integer

I = Range("B1:B65536").Find("").Row - 1

Range("A2").Select

ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[1],BU!C:C[1],2,0),"""")"

Range("A2").Select

Selection.AutoFill Destination:=Range("A2:A" & I)

Jdohuu... Tu n'as pas fait ce que je t'ai dit !

Donne-nous pour l'instant le code associé à la manip que je t'ai proposée de faire...

On te conseillera par la suite

Pardon messirs mdr

Range("A1048576").select

Selection.End(xlUp).Select

Ca me donne ça!

Donc j'imagine que si je met

Selection.End(xlUp).Select.Row je tombe sur le bon chiffre?

Presque

On va transformer ton code comme ça :

Range("A1048576").End(xlUp).Row

et encore mieux, comme ça :

Range("A" & Rows.Count).End(xlUp).Row

car le code donné ne marchera pas sur Excel inférieur à 2007 étant donné qu'il n'y a que 65536 lignes.

Maintenant en prenant en compte la remarque d'eriiic

eriiic a écrit :

- éviter les .select inutiles qui ralentissent

- tu peux mettre ta formule dans une plage complète sans utiliser autofill :

Range("A2:A" & derlig).formula = "=ta_formule_ref_typeA1"

ou

Range("A2:A" & derlig).formulaLocal = "=ta_formule_ref_typeA1_fonctions_en_français"

et notre code ci-dessus, on va avoir quelque chose qui ressemble à ça :
derlig = Range("A" & Rows.Count).End(xlUp).Row
Range("A2:A" & derlig).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[1],BU!C:C[1],2,0),"""")"
Range("D2:D" & derlig).FormulaR1C1 = _
"=IF(RC[3]=""signed"",""Signed"",IF(RC[4]>=80,""Worst Case"",""Best Case""))"

Si on suppose que les colonnes A et D ont le même nombre de lignes.

Le code que tu avais proposé :

I = Range("B1:B65536").Find("").Row - 1

pourrait presque marcher mais dans notre cas, recourir à la méthode Find est moins optimisé que d'utiliser la méthode ci-dessus.

Ouep ça marche très bien! j'ai utilisé

derlig = Range("B" & Rows.Count).End(xlUp).Row

Car A et D sont vide à la base :p

Merci !

Rechercher des sujets similaires à "tirer formule nombre lignes variable"