Décortiquer un code VBA

Bonjour les amis,

il m'a été amené d'essayer de décortiquer un code vba, je dois absolument saisir son fonctionnement .. Pourriez vous m'aider à l'analyser svp ?

Sub function()
Dim Fin As Long, Liste As Range, Liste1 As Range, Liste2 As Range, Liste3 As Range

  Sheets("feuil1").Activate
  [A4].AutoFilter field:=4, Criteria1:=" "
   Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
   Rows.Count - 1).SpecialCells(xlCellTypeVisible).DELETE Shift:=xlUp
   ActiveSheet.ShowAllData

   Fin = Columns("G").Find("*", , , , , xlPrevious).Row
Set Liste = Range("G2:G" & Fin)
Sheets("feuil2").Range("H300:M300").ClearContents
Sheets("feuil2").Range("H300") = Application.Sum(Liste)
Set Liste1 = Range("H2:H" & Fin)
Sheets("feuil2").Range("M300") = Application.Sum(Liste1)
Set Liste2 = Range("I2:I" & Fin)
Sheets("feuil2").Range("I300") = Application.Sum(Liste2)
Set Liste3 = Range("J2:J" & Fin)
Sheets("feuil2").Range("J300") = Application.Sum(Liste3)
Set Liste4 = Range("K2:K" & Fin)
Sheets("feuil2").Range("K300") = Application.Sum(Liste4)

End Sub

Bonjour

En premier vous ne pouvez pas utiliser le FUNCTION pour une SUB car ce mot est utilisé par excel. Changer le par FONCTION par exemple

Votre code expliqué :

Sub fonction()
Dim Fin As Long, Liste As Range, Liste1 As Range, Liste2 As Range, Liste3 As Range 'déclaration des variables
Sheets("feuil1").Activate 'On active la feuille 1
[A4].AutoFilter field:=4, Criteria1:=" " 'filtre automatique sur colonne D
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp 'suppression des lignes
ActiveSheet.ShowAllData 'on réaffiche toutes les données

Fin = Columns("G").Find("*", , , , , xlPrevious).Row 'Recherche de la dernière ligne de la colonne G dans feuille 1
Set Liste = Range("G2:G" & Fin) 'attribution du nom LISTE pour déclarer la plage G2 à G et dernière colonne (fin)
Sheets("feuil2").Range("H300:M300").ClearContents 'suppression des données dans la plage H300 à M300 de la feuille 2
Sheets("feuil2").Range("H300") = Application.Sum(Liste) 'somme de la plage Liste en H300
Set Liste1 = Range("H2:H" & Fin) 'attribution du nom LISTE pour déclarer la plage H2 à H et dernière colonne (fin)
Sheets("feuil2").Range("M300") = Application.Sum(Liste1) 'somme de la plage Liste1 en M300
....

Si vous souhaitez garder ce code plutôt que celui ci-dessous, vous pouvez remplacer Liste1, liste2, liste3 et liste4 par le mot LISTE

Votre code un peu simplifié

Sub fonction()
Dim Fin As Long
With Sheets("feuil1")
    .Activate
    .Range("A4").AutoFilter field:=4, Criteria1:=" "
    .Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
    Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
    .ShowAllData

    Fin = .Columns("G").Find("*", , , , , xlPrevious).Row
    Sheets("feuil2").Range("H300:M300").ClearContents
    Sheets("feuil2").Range("H300") = Application.Sum(.Range("G2:G" & Fin))
    Sheets("feuil2").Range("M300") = Application.Sum(.Range("H2:H" & Fin))
    Sheets("feuil2").Range("I300") = Application.Sum(.Range("I2:I" & Fin))
    Sheets("feuil2").Range("J300") = Application.Sum(.Range("J2:J" & Fin))
    Sheets("feuil2").Range("K300") = Application.Sum(.Range("K2:K" & Fin))
End With
End Sub

Moyennant votre fichier on pourrait probablement simplifier encore

Si ok, merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER lors de votre réponse

Cordialement

Merci bcp pour votre aide .. j'arrive à comprendre le fonctionnement de la macro ..

Sauf que là .. lorsque je l'exécute ça m'affiche l'erreur suivante :

Erreur d'exécution 1004, pas de cellules correspondantes

La ligne du code concernée est :

.Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
        Rows.Count - 1).SpecialCells(xlCellTypeVisible).DELETE Shift:=xlUp

Je tiens à vous remercier pour votre collaboration !

Re

Oui je me doutais de cela.

Il faudrait savoir à quoi correspond ce nom --> "_FilterDataBase"

Regardez dans les noms attribués au fichier

Cordialement

Oui effectivement; une telle variable n'existe même pas dans la feuille ..

Peut être qu'elle se crée juste après activation du filtre ?

Re

Non du tout. Il faut définir la plage concernée, genre Range("A1:O10000") ou alors peut être enlever cette instruction ?

Si vous avez copié ce code quelque part, il faut l'adapter à votre fichier

Cordialement

Rechercher des sujets similaires à "decortiquer code vba"