Comment insérer un sous-total en vba

rcan7412

XLDnaute Occasionnel
Bonjour,

Quelqu'un pourrait-il m'aider pour ajouter des sous-totaux en vba ?

Le code ci-après me génère un tableau en xl de 8 colonnes avec des données filtrées récupérées d'une base de données.
Je souhaiterais qu'à chaque changement de catégorie (colone M), un sous-total soit créé sur les colonnes Q et R.
Je sais qu'il est possible de le faire en xl mais je préfèrerais obtenir un valeur calculée par le code vba.

Code:
Sub ChoixAF1()
Dim AFclient As String
Dim AFexercice As String
Dim AFcategorie As String
Dim AFdonnees As Variant
Dim Item As Integer
Dim Col As Byte
Dim AFclientCompare As String
Dim AFexerciceCompare As String
Dim AFcategorieCompare As String
Dim ligneReport As Integer
Application.ScreenUpdating = False
With Worksheets("AF") 'avec la feuille "AF"
    AFclient = .Range("K2") 'on affecte les valeur aux variables
    AFexercice = .Range("L2")
    AFcategorie = .Range("M2")
      AFdonnees = .Range("B8:I" & .Range("B1048576").End(xlUp).Row) 'on remplit un tableau
             .Range("K8:R" & .Range("K1048576").End(xlUp).Row + 1).ClearContents 'on efface les données
 For Item = 1 To UBound(AFdonnees, 1) 'pour chaque ligne de ce tableau
 
       AFclientCompare = AFdonnees(Item, 1) 'on récupére les valeurs à comparer
       AFexerciceCompare = AFdonnees(Item, 2)
       AFcategorieCompare = AFdonnees(Item, 3)
   If AFclientCompare = AFclient And AFexerciceCompare = AFexercice And AFcategorieCompare = AFcategorie Then 'si egalité
        ligneReport = .Range("K1048576").End(xlUp).Row + 1 'on détecte la derniere ligne vide de la colonne K
           For Col = 1 To UBound(AFdonnees, 2) 'pour chaque colonne du tableau
                                 .Cells(ligneReport, Col + 10) = AFdonnees(Item, Col) 'sinon on colle telquel
                        Next Col
   End If
Next Item
 End With
  Application.ScreenUpdating = True
End Sub

Merci d'avance pour une piste.
 

Victor21

XLDnaute Barbatruc
Re : Comment insérer un sous-total en vba

Bonjour, rcan7212

Une piste : l'enregistreur de macros :
On l'active, (Outils, Macros, Nouvelle macro)
on effectue l'opération manuellement, (Sélection de la zone concernée, Données, Sous-totaux)
on l'arrête, (Outils, Macros, Arrêter l'enregistrement)
on accède au code, (Alt+F11)
on corrige le code, (Suppression des select inutiles, redéfinition de la zone...)
et on l'intègre.
:)
 

rcan7412

XLDnaute Occasionnel
Re : Comment insérer un sous-total en vba

Merci pour ta réponse Victor21.
J'y avais pensé et l'ai même testé.
Mais je dois encore "retoucher" le formatage du résultat.

Ce que j'aurais souhaité, c'est d'obtenir une rupture à chaque changement de catégorie avec une ligne de titre et une ligne de total formatée sans total général.

Pour une meilleure perception du problème, je joins le fichier xl.

Dans l'onglet AF, les données + le filtrage réalisé par VBA.
Dans l'onglet AF2, ce que je souhaiterais obtenir.

Je cherche partout mais je ne trouve pas encore de solution satisfaisante :confused:

Je me demande également si l'option suivante ne faciliterait pas les choses :
A l'encodage des enregistrements dans la base de données, encoder une ligne titre + une ligne total ???
 

Pièces jointes

  • test.xlsm
    40.5 KB · Affichages: 243
  • test.xlsm
    40.5 KB · Affichages: 242
  • test.xlsm
    40.5 KB · Affichages: 277
Dernière édition:

Discussions similaires

Réponses
3
Affichages
101

Statistiques des forums

Discussions
312 229
Messages
2 086 425
Membres
103 206
dernier inscrit
diambote