SOMMEPROD sur une plage définie par le numéro de dernière ligne en VBA

Bonjour,

Je vous joins la macro créée par l'enregistreur de macro.

Je voudrai la modifier en introduisant
- le numéro de dernière ligne de la feuille "Ecritures" dans la formule SOMMEPROD calculée dans la feuille "Balance",
- et le numéro de la dernière ligne de la feuille "Balance" dans la fonction FillDown à exécuter dans "Balance".

J'ai déjà déclaré les variables "dernières lignes" et mis leur calcul en attente en lignes de commentaires.

Option Explicit
Sub Balance()
'dlB dernière ligne de Balance
'dlE dernière ligne d'Ecritures

Dim dlB As Integer, dlE As Integer

'dlB = Sheets("Balance").Range("A" & Rows.Count).End(xlUp).Row 'dlB = numéro de la dernière ligne non vide de la colonne A de la feuille Balance
'dlE = Sheets("Ecritures 223").Range("A" & Rows.Count).End(xlUp).Row 'dlE = numéro de la dernière ligne non vide de la colonne A de la feuille Ecritures 223

'Calculs de Somme des Débits, Somme des Crédits, Solde débiteur, Solde créditeur sur la 1ère ligne (auto)
    Range("C4").Select
    ActiveCell.Formula = "=SUMPRODUCT(('Ecritures 223'!R3C3:R226C3='Balance'!RC[-2])*('Ecritures 223'!R3C8:R226C8))"
    Range("D4").Select
    ActiveCell.FormulaR1C1 = _
        "=SUMPRODUCT(('Ecritures 223'!R3C3:R226C3='Balance'!RC[-3])*('Ecritures 223'!R3C9:R226C9))"
    Range("E4").Select
    ActiveCell.FormulaR1C1 = "=IF((RC[-2]-RC[-1])>0,RC[-2]-RC[-1],0)"
    Range("F4").Select
    ActiveCell.FormulaR1C1 = "=IF((RC[-2]-RC[-3])>0,RC[-2]-RC[-3],0)"

'Recopie vers le bas des calculs dans le tableau (auto)
    Range("C4:F71").Select
    Selection.FillDown

'Calculs des totaux de colonnes (auto)
    Range("C72").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-68]C:R[-1]C)"
    Range("C72:F72").Select
    Selection.FillRight

End Sub

Merci de me proposer la syntaxe correcte, ou une façon plus appropriée de réaliser cette tache.

Cordialement,

Wally

Bonjour,
Joins un fichier pour une aide adaptée du forum.
Cdlt.

bonjour Wally27, Jean-Eric,

un pari, je suppose que vous voulez remplacer ce 226 par dlE !

ActiveCell.Formula = "=SUMPRODUCT(('Ecritures 223'!R3C3:R226C3='Balance'!RC[-2])*('Ecritures 223'!R3C8:R226C8))"

devient

ActiveCell.Formula = "=SUMPRODUCT(('Ecritures 223'!R3C3:R" & dlE & "C3='Balance'!RC[-2])*('Ecritures 223'!R3C8:R" & dlE & "C8))"

Range("C4:F71").Select

devient

Range("C4:F" & dlB &"").Select

Bonjour à tous,
Et si les données étaient sous la forme d'un tableau structuré ?
On pourrait peut-être éviter l'utilisation de VBA.
Cdlt.

Bonjour Bart, Bonjour Jean-Eric,

Merci beaucoup pour vos réponses si rapides.

Bart, votre solution est parfaite, encore merci, je bloquais sur la syntaxe...

Jean-Eric, je me suis orienté vers le VBA car j'effectue d'autres taches dans cette macro que celle exposée dans ce post. Et VBA me semblait plus simple que les TCD par exemple pour les réaliser.

Cordialement,

Wally

Rechercher des sujets similaires à "sommeprod plage definie numero derniere ligne vba"