Erreur dans macro sous-totaux

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

flocolombia

XLDnaute Nouveau
Bonjour à tous,

J'ai une macro qui fonctionne depuis que je l'ai créée (il y 8 mois) et voici qu'elle ne fonctionne plus...
Je ne sais pas d'où cela vient et j'avais vraiment galéré à la faire, je ne sais pas d'où vient l'erreur.
Ce code me permettait de mettre une ligne "Sous total nomduclient" en faisant un regroupement des clients en prenant la partie avant le "/" de leur nom. Par exemple je peux avoir des clients avec les nom :
client1
client1/ab
client1 /bc
client1
et je fais un sous-total (des montants associés) pour "client1"
Le problème est que depuis aujourd'hui, la macro fait le sous-total seulement pour le dernier client de mon tableau et supprime tous les autres.

Voici le code :

Sub CommandButton1_Click()
Dim i&, j&, X&
Dim D As Object, DTmp As Object, DCode As Object
Dim TReport As Variant, TTmp As Variant, TData As Variant
Dim Code$, Plg As Range

Set D = CreateObject("Scripting.dictionary")
Set DTmp = CreateObject("Scripting.dictionary")
Set DCode = CreateObject("Scripting.dictionary")
ReDim TReport(0)

With Sheets("Feuil1")
Set Plg = .Range(.Cells(2, 1), .Cells(Rows.Count, 5).End(3))
End With

TData = Plg
For i = LBound(TData, 1) To UBound(TData, 1)
If InStr(TData(i, 1), "Sous Total ") = 0 Then
Code = Split(TData(i, 4), "/")(0)
If Not DCode.Exists(Code) Then
ReDim Preserve TReport(1 To UBound(TReport) + 1)
ReDim TTmp(2)
Set TTmp(1) = CreateObject("Scripting.dictionary")
TTmp(2) = Code
TReport(UBound(TReport)) = TTmp
DCode(Code) = UBound(TReport)
End If
Set DTmp = TReport(DCode(Code))(1)
X = DTmp.Count
ReDim TTmp(1 To UBound(TData, 2))
For j = LBound(TData, 2) To UBound(TData, 2)
TTmp(j) = CStr(TData(i, j))
Next j
TReport(DCode(Code))(0) = TReport(DCode(Code))(0) + TData(i, 5)
DTmp(X) = TTmp
Set TReport(DCode(Code))(1) = DTmp
End If
Next i
Application.ScreenUpdating = False
Plg.ClearContents
With Sheets("Feuil1")
For i = LBound(TReport) To UBound(TReport)
Set DTmp = TReport(i)(1)
.Cells(.Rows.Count, 1).End(3)(2).Resize(DTmp.Count, 5).FormulaLocal = Application.Index(DTmp.Items, , 0)
With .Cells(.Rows.Count, 1).End(3)(2)
.Value = "Sous Total " & TReport(i)(2)
.Offset(, 4) = TReport(i)(0)
End With
Next i
End With
End Sub

Merci à toute personne pouvant m'aider!
 
Re : Erreur dans macro sous-totaux

Désolé c'est vrai que c'est mieux avec un fichier!

Les données sont confidentielles et pour mon travail donc j'ai supprimé toutes les autres macros et mis de faux noms mais voici en pj l'exemple avec la macro concernée.
Comme vous pourrez le voir, quand j'exécute ma macro, les sous totaux ne sont appliqués que pour le dernier client.
J'ai mis en image le résultat que j'obtenais avant, quand ma macro fonctionnait encore!

Merci de votre aide,
 

Pièces jointes

  • Résultat final.jpg
    Résultat final.jpg
    60.3 KB · Affichages: 36
  • Résultat final.jpg
    Résultat final.jpg
    60.3 KB · Affichages: 42
  • Résultat final.jpg
    Résultat final.jpg
    60.3 KB · Affichages: 48
  • Exemple.xlsm
    Exemple.xlsm
    38.5 KB · Affichages: 48
  • Exemple.xlsm
    Exemple.xlsm
    38.5 KB · Affichages: 61
  • Exemple.xlsm
    Exemple.xlsm
    38.5 KB · Affichages: 62
Re : Erreur dans macro sous-totaux

Re


Pourquoi passer par une macro, quand Excel sait faire des sous-totaux tout seul comme un grand ?😉
(Il a juste besoin d'une colonne supplémentaire avec cette formule:
=SI(ESTERR(CHERCHE("/";E2));E2;STXT(E2;1;CHERCHE("/";E2)-1))
01STOTAL.png
PS: Pour obtenir ce résultat, utiliser Données/Sous-total
 
Re : Erreur dans macro sous-totaux

Re,

Merci pour la réponse, malheureusement je ne peux pas utilisé seulement la fonction sous-totaux d'excel.
Ma macro prend en compte cette fonction mais est beaucoup plus complexe et surtout sur mon fichier normal, j'ai une vingtaine de macros et des liens avec d'autres fichiers, donc je ne peux pas modifier le nombre de colonne ou encore le formalisme sous peine de devoir tout refaire.
Enfin, si je n'arrive pas à trouver ce qui ne fonctionne pas sur ma macro, je serai bien obligé de tout refaire !
 
Re : Erreur dans macro sous-totaux

Pour info, mon besoin est très urgent et plutôt que de mettre des "up" "up" "up" à tout va sur la discussion, j'ai posté mon message sur un autre forum simplement pour avoir un potentiel de personnes plus important pouvant m'aider le plus rapidement c'est tout.
Je suis très reconnaissant de l'aide qu'on m'apporte et je n'avais pas en tête telle idée de crosspostage ou je ne sais quoi...
 
Re : Erreur dans macro sous-totaux

Bonjour Staple1600 et bonjour flocolombia

Sous Excel 2003 pas de soucis les sous totaux sont calculés pour chaque entreprise, si ce n'est que celles pour lesquelles un espace précède le / puisqu'alors ( par exemple ) Baba et Baba+espace sont 2 entreprises différentes.

Voir copie d'écran

A+
 

Pièces jointes

  • ecran.jpg
    ecran.jpg
    69.7 KB · Affichages: 32
  • ecran.jpg
    ecran.jpg
    69.7 KB · Affichages: 33
  • ecran.jpg
    ecran.jpg
    69.7 KB · Affichages: 34
Re : Erreur dans macro sous-totaux

Re, Bonjour Paf

EDITION: Puisque tu parles de up, pourquoi ne pas simplement avoir fait de up dans le fil initial ?
https://www.excel-downloads.com/threads/macro-sous-totaux.218505/
NB:
J'ai une macro qui fonctionne depuis que je l'ai créée (il y 8 mois)
Je ne sais pas d'où cela vient et j'avais vraiment galéré à la faire, je ne sais pas d'où vient l'erreur.
Rendons à César..., c'est Efgé qui a rédigé le code initial (voir son fichier exemple dans le fil ci-dessus) 😉
Tu as donc simplement galéré à adapter ce code, ce qui n'est pas tout à fait la même chose 😉


1) Pour les messages très urgent, voir ceci (charte du forum)
2 – Tous les membres du forum répondent gracieusement aux questions. Il n’y a donc aucune obligation de résultat et de délai. Les mots URGENT, SOS, AU SECOURS sont donc à bannir.

2) Poser ta question sur plusieurs forums n'est pas le souci.
Il est simplement conseillé et apprécié de mettre un lien vers les autres questions sur les autres forums, simplement pour ne pas perdre son temps à poster une solution qui existerai déjà sur un autre forum.

Quand j'ai un souci, sur un code VBA, j'insère des MsgBox un peu partout pour voir
et là, j'observe des chose bizarres, non ?
Code:
TData = Plg
MsgBox UBound(TData, 1)
For i = LBound(TData, 1) To UBound(TData, 1)
    If InStr(TData(i, 1), "Sous Total ") = 0 Then
        Code = Split(TData(i, 4), "/")(0)
        If Not DCode.Exists(Code) Then
            ReDim Preserve TReport(1 To UBound(TReport) + 1)
            ReDim TTmp(2)
            Set TTmp(1) = CreateObject("Scripting.dictionary")
            TTmp(2) = Code
            TReport(UBound(TReport)) = TTmp
            MsgBox UBound(TReport)
            DCode(Code) = UBound(TReport)
        End If
        Set DTmp = TReport(DCode(Code))(1)
        X = DTmp.Count
        ReDim TTmp(1 To UBound(TData, 2))
        For j = LBound(TData, 2) To UBound(TData, 2)
            TTmp(j) = CStr(TData(i, j))
        Next j
        TReport(DCode(Code))(0) = TReport(DCode(Code))(0) + TData(i, 5)
        MsgBox TReport(DCode(Code))(0)
        DTmp(X) = TTmp
        Set TReport(DCode(Code))(1) = DTmp
    End If
Next i
MsgBox UBound(TReport)
Application.ScreenUpdating = False
'Plg.ClearContents
With Sheets("Feuil1")
MsgBox UBound(TReport)
 
Dernière édition:
Re : Erreur dans macro sous-totaux

Merci Staple1600 et Paf aussi.
Je suivrai tes conseils à l'avenir, c'est vrai que c'est Efgé qui était à l'origine de cette macro, même si après j'en ai fait tellement d'autres sur le même fichier que je n'avais plus souvenir sur lesquelles ont m'avait aidé.
Justement tu as bien fait de faire remonter mon ancienne discussion parce que je vois que sur l'exemple qu'il m'avait donné (ci-joint, exemple(1)), la macro ne fonctionne plus également puisque dans son exemple, seul le sous-total pour Entreprise D est donné alors qu'auparavant cela fonctionnait pour tous les clients.
Concernant les MsgBox, je ne comprends pas comment cela fonctionne et que faire avec (je précise que je toujours à un niveau débutant en VBA!)
Merci de ton aide.
 

Pièces jointes

Re : Erreur dans macro sous-totaux

Justement comme je te l'ai dit à la fin de mon message précédent, je ne comprends pas comment l'utiliser.
Mais surtout je ne comprends pas comment cette macro qui fonctionnait chez moi et pour Efgé aussi, ne fonctionne plus aujourd'hui sans avoir été modifiée!
 
Re : Erreur dans macro sous-totaux

Re


Regardes le bout de code que j'ai précédemment posté
(et insères au même endroit dans le code les lignes qui commencent par MsgBox)
Lances la macro et observes que qu'affichnt les MsgBox
Quand elle affichent 0, c'est à mon sens que quelque chose ne va pas, non ?

Sinon à l'époque, tu disais que la solution de chris (avec Sous-total + colonne comme celle que je propose) te convenait à l'époque ??
Merci vous avez trouvé la solution à mon problème!
J'ai seulement à adapter mes macros.
Je souhaitais avoir une ligne sous total avec le nom du client mais je peux faire sans et ce système de colonne est beaucoup plus simple d'utilisations.
Merci beaucoup
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
177
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
144
Réponses
10
Affichages
281
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Retour