XL 2010 Fonction imbriquée à mettre en code VBA

Romain31

XLDnaute Occasionnel
Bonjour à tous,

je travaille sur un fichier de compte bancaire.
Pas mal de choses sont déjà automatisées (peut-être que ce fichier test en PJ pourra donner des idées à d'autres).

La feuille détail récapitule les différentes entrées/sortie par mois.
En cellule B2 une fonction SOMME imbriqué unique (par l'utilisation de références absolues et relatives) me permet par recopie incrémentée horizontale et verticale de remplir la feuille (macro Recopie_B2 à cet effet).

Voici cette formule

=SOMME(SOMME.SI.ENS(Banque!$C$2:$C$998;Banque!$F$2:$F$998;$A2;Banque!$G$2:$G$998;B$1);SOMME.SI.ENS(Banque!$D$2:$D$998;Banque!$F$2:$F$998;$A2;Banque!$G$2:$G$998;B$1))

Je souhaiterai intégrer cette formule assez complexe en code VBA
Worksheets("Détail").Range("B2").FormulaLocal = ???
dans mon code de Recopie_B2.

je suis conscient que ce n'est pas simple pais ce forum est tellement formidable que je ne désespère pas.
Merci à tous les courageux qui pourront m'aider et très bonne journée à tous
 

Pièces jointes

  • test.xlsm
    91.5 KB · Affichages: 7

Romain31

XLDnaute Occasionnel
Honnêtement, je n'y ai pensé et je trouve que ces formules écrites "en dur" dans le code associé à un bouton sont bien faciles à remettre en place.

Par contre je me suis fait ce code pour récupérer certaines données qu'il faudrait que je reprenne éventuellement pour les formules :

Sub Récup()
Application.ScreenUpdating = False

Dim TabData() As Variant
Dim Fin As Long
Dim i, j As Long
Dim deb As Long 'timer

deb = Timer: Application.ScreenUpdating = False

With Sheets("Détail")
Fin = .UsedRange.Rows.Count
TabData = .Range("A1:M" & Fin).Value 'on récupère la première ligne de titres
End With
For i = LBound(TabData, 1) To UBound(TabData, 1)
If TabData(i, 13) = "" Then
For j = LBound(TabData, 2) To UBound(TabData, 2)
TabData(i, j) = ""
Next j
End If
Next i

MsgBox "Durée construction du tableau résultat r = " & Format(Timer - deb, "0.0000\ sec.")

With Sheets("Test")
.Range("A1").Resize(UBound(TabData, 1), UBound(TabData, 2)) = TabData
.Range("A1").Resize(UBound(TabData, 1), UBound(TabData, 2)).Columns(4).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End With
Application.ScreenUpdating = True

End Sub
 

TooFatBoy

XLDnaute Barbatruc
Tu peux utiliser la balise code=vb dans tes messages pour rendre ton code plus facilement lisible ; et n'hésite pas à utiliser également l'indentation pour encore plus de lisibilité. ;)

VB:
Sub Récup()
'
Dim TabData() As Variant
Dim Fin As Long, i As Long, j As Long
Dim deb As Long 'timer

    Application.ScreenUpdating = False

    deb = Timer

    With Sheets("Détail")
        Fin = .UsedRange.Rows.Count
        TabData = .Range("A1:M" & Fin).Value    ' On récupère la première ligne de titres
    End With

    For i = LBound(TabData, 1) To UBound(TabData, 1)
        If TabData(i, 13) = "" Then
            For j = LBound(TabData, 2) To UBound(TabData, 2)
                TabData(i, j) = ""
            Next j
        End If
    Next i

    MsgBox "Durée construction du tableau résultat r = " & Format(Timer - deb, "0.0000\ sec.")

    With Sheets("Test")
        .Range("A1").Resize(UBound(TabData, 1), UBound(TabData, 2)) = TabData
        .Range("A1").Resize(UBound(TabData, 1), UBound(TabData, 2)).Columns(4).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End With

End Sub
 

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 185
Messages
2 086 010
Membres
103 090
dernier inscrit
Createlier