Dernière ligne pleine dans macro

Bonjour, je n'arrive pas à utiliser le "End(xlUp).Row" pour détecter la dernière cellule non vide d'une colonne.

J'aimerais coller une formule en S2 et T2 et la "glisser" jusqu'à la dernière ligne non vide de la colonne A. ( la deuxième formule est une fonction matricielle pour info ).

Ma question : Comment écrire le code en utilisant "End(xlUp).Row" dans le code ci-dessous ? J'ai testé plusieurs codes sans réel succès

Sub formules()

    Range("S2").Select
    ActiveCell.FormulaR1C1 = _
        "=OR(LEFT(TRIM(RC6),2)=""OA"",LEFT(TRIM(RC6),3)=""POA"")*1"
    Range("S2").Select
    Selection.AutoFill Destination:=Range("S2:S20"), Type:=xlFillDefault
    Range("S2:S20").Select
    Range("T2").Select
    Selection.FormulaArray = _
        "=IF(RC[-4]>=0,"""",SMALL(IF((R2C2:R100000C2=RC2)*(R2C19:R100000C19=1)*(R2C[-12]:R100000C8>=RC8),R2C[-12]:R100000C8),SUMPRODUCT((R2C2:RC2=RC2)*(R2C[-4]:RC16<0))))"
    Selection.AutoFill Destination:=Range("T2:T20"), Type:=xlFillDefault
    Range("T2:T19").Select
End Sub

Bonsoir,

Code à tester :

Sub formules()
    Range(("S2"), "S" & Range("S" & Application.Rows.Count).End(xlUp).Row).FormulaR1C1 = _
        "=OR(LEFT(TRIM(RC6),2)=""OA"",LEFT(TRIM(RC6),3)=""POA"")*1"
    Range(("T2"), "T" & Range("T" & Application.Rows.Count).End(xlUp).Row).FormulaArray = _
        "=IF(RC[-4]>=0,"""",SMALL(IF((R2C2:R100000C2=RC2)*(R2C19:R100000C19=1)*(R2C[-12]:R100000C8>=RC8),R2C[-12]:R100000C8),SUMPRODUCT((R2C2:RC2=RC2)*(R2C[-4]:RC16<0))))"
End Sub

Il y a bien les deux formules en S2 et T2 mais le "glissement" des formules ce fait dans le mauvais sens. Il remonte au lieu de descendre.

Bonjour Geoffrey90 Raja le forum

il va de soi que avec ce code cela ne peut fonctionner que sur la feuille active est-ce le cas??

a+

papou

Re,

Essaye comme ça, si ce n'est pas ce que tu attends, envoi le fichier qui va avec pour tester :

Sub formules()
    Range(("S2"), "S" & Range("S" & Application.Rows.Count).End(xlUp).Row).FormulaR1C1 = _
        "=OR(LEFT(TRIM(RC6),2)=""OA"",LEFT(TRIM(RC6),3)=""POA"")*1"
    Range(("T2"), "T" & Range("T" & Application.Rows.Count).End(xlUp).Row).FormulaR1C1 = _
        "=IF(RC[-4]>=0,"""",SMALL(IF((R2C2:R100000C2=RC2)*(R2C19:R100000C19=1)*(R2C[-12]:R100000C8>=RC8),R2C[-12]:R100000C8),SUMPRODUCT((R2C2:RC2=RC2)*(R2C[-4]:RC16<0))))"
End Sub

NB : Sur mon ordi, cela incrémente bien dans le bon sens

Bonjour,

Etrange ça part toujours dans le mauvais sens. Il y a toujours la solution d'appliquer la formule de ligne 2 à 104 000 pour tout couvrir mais ça rame beaucoup !

Oui il n'y a qu'une seule feuille dans le tableau paritec. J'upload le fichier si je ne m'en sors pas

Après plusieurs essais, impossible de comprendre pourquoi ça part vers le haut avec le code de Raja.

Ci-joint le fichier avec explication.

J'aimerais simplement coller une formule en S2 et T2 et la "glisser" jusqu'à la dernière ligne non vide de la colonne B. ( la deuxième formule est une fonction matricielle pour info ).

16demo.xlsx (27.67 Ko)

Bonjour,

Un essai, en supposant que les formules en S2 et T2 sont fonctionnelles.

Cdlt

Option Explicit
Public Sub CopieFormules()
Dim derLigne As Long

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With

    derLigne = Range("B" & Rows.Count).End(xlUp).Row
    Range("S2").Select
    ActiveCell.FormulaR1C1 = _
        "=OR(LEFT(TRIM(RC6),2)=""OA"",LEFT(TRIM(RC6),3)=""POA"")*1"
    Range("T2").Select
    Selection.FormulaArray = _
        "=IF(RC[-4]>=0,"""",SMALL(IF((R2C2:R61826C2=RC2)*(R2C19:R61826C19=1)*(R2C[-12]:R61826C8>=RC8),R2C[-12]:R61826C8),SUMPRODUCT((R2C2:RC2=RC2)*(R2C[-4]:RC16<0))))"
    Range(Cells(2, 19), Cells(derLigne, 20)).Select
    Selection.FillDown

    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub

ça marche parfaitement, merci !

Si on préfère mettre le résultat de la formule plutôt que le code de la formule dans les cellules, il faut refaire tout le code ou c'est possible en rajoutant une fonction ?

Bonjour,

Si on préfère mettre le résultat de la formule plutôt que le code de la formule dans les cellules, il faut refaire tout le code ou c'est possible en rajoutant une fonction ?

Il faut refaire le code dans sa partie formule. Si c'est cela que tu veux, il faudrait savoir ce que tu peux avoir comme données dans les colonnes B, H, F et P

exemple : F = OA ou POA ou parfois autre chose ? P < 1 ou > 1

Sinon ton code peut encore être plus court comme ceci :

Public Sub CopieFormules()
Dim derLigne As Long

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With

    derLigne = Range("B" & Rows.Count).End(xlUp).Row
    Range("S2").FormulaR1C1 = _
        "=OR(LEFT(TRIM(RC6),2)=""OA"",LEFT(TRIM(RC6),3)=""POA"")*1"
    Range("T2").FormulaArray = _
        "=IF(RC[-4]>=0,"""",SMALL(IF((R2C2:R61826C2=RC2)*(R2C19:R61826C19=1)*(R2C[-12]:R61826C8>=RC8),R2C[-12]:R61826C8),SUMPRODUCT((R2C2:RC2=RC2)*(R2C[-4]:RC16<0))))"
    Range(Cells(2, 19), Cells(derLigne, 20)).FillDown

    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub

Si ok, merci de cloturer ton fil en cliquant sur le V vert à coté du bouton EDITER

Amicalement

J'ai opté pour faire un copier/coller valeurs. J'attends de voir le résultat avec de "gros" fichiers la rapidité

Merci encore, je valide le post.

Rechercher des sujets similaires à "derniere ligne pleine macro"