Macro création automatique d'un tableau grâce aux données d'autres feuilles

Marine64110

XLDnaute Nouveau
Bonjour à tous !

Je vous explique mon cas : j'ai un fichier Excel avec plusieurs feuilles (correspondant chacune à un type de travaux de bâtiment), avec dans chaque feuille un montant de kWh et un prix.

Je voudrais créer un onglet de "synthèse" avec un tableau qui récapitule :

  • le nom de l'onglet
    le montant de kWh
    le prix

Jusque là ça paraît tout simple. C'est ici que ça se corse : je ne veux pas avoir TOUTES les feuilles récapitulées dans ce tableau, mais seulement celles qui ont un montant de kWh différent de 0... Des idées d'un code VBA qui fasse ça ?

Mon fichier d'origine étant très lourd (65 feuilles au total, avec de nombreuses macros déjà), je vous ai fait un petit fichier très simplifié avec trois feuilles "travaux" (isolation, menuiseries et éclairage) et la feuille de synthèse qui comprend le tableau que je voudrais pouvoir remplir avec les infos des 3 autres feuilles.

J'ai essayé de simplifier au maximum le problème, mais n'hésitez pas à me demander plus d'infos si ce n'est pas clair !

Merci beaucoup :)
 

Pièces jointes

  • Exemple.xlsx
    18.7 KB · Affichages: 61
  • Exemple.xlsx
    18.7 KB · Affichages: 56
  • Exemple.xlsx
    18.7 KB · Affichages: 74

Si...

XLDnaute Barbatruc
Re : Macro création automatique d'un tableau grâce aux données d'autres feuilles

re

alors un test de plus
Code:
...
For Each Sh In Sheets
    If Sh.Name <> Me.Name And Sh.Name <> "Sommaire" And Sh.Name <> "Catégories" Then
       Set R = Sh.Cells.Find("TOTAL (kWh cumac)")
       If R(1, 2) > 0 Then                                      'là
         [TB].Rows(L).Columns(1) = Sh.Name
         [TB].Rows(L).Columns(2) = R(1, 2)
         [TB].Rows(L).Columns(3) = R(2, 2)
         L = L + 1
      End If
    End If
  Next

j'ai racourci en supposant qu'on ne pouvait avoir un négatif ;) !
 

Modeste

XLDnaute Barbatruc
Re : Macro création automatique d'un tableau grâce aux données d'autres feuilles

Re[SUP]64[/SUP],
Salut Si... :)

(Tu l'auras remarqué, je ne comprends pas grand chse à ce que je fais. Je fais des tests, je bidouille )
Ah je confirme, jeune sauvage! :D

J'ai donc dû retourner chercher "le monstre" ... pour retrouver où devaient être stockées tes données. Je me souvenais que les colonnes n'étaient pas les mêmes que dans ton exemple, mais je n'avais pas retenu que les lignes changeaient aussi. Or donc, il eût fallu adapter cette partie aussi et le 14 ne convenait plus, of course!)

Il y avait une erreur: tu avais écrit Me.Cells(lig, 3) = Sh.[A3] au lieu de Me.Cells(lig, 3) = Sh.Name
Comme les cellules A3 des différentes feuilles sont vides, la colonne C de ta synthèse le restait aussi! Or la variable ligne était précisément calculée sur base du contenu de la colonne C

La macro, adaptée au fichier d'hier sur Cjoint me semble fonctionner (je n'ai fait qu'un test!) si tu la modifies comme suit:
VB:
Private Sub Worksheet_Activate()
Me.Cells(13, 3).Resize(Application.CountA(Me.[C:C]), 3).ClearContents
For Each Sh In Sheets
    If Sh.Name <> Me.Name And Sh.Name <> Feuil1.Name And Sh.Name <> Feuil2.Name And Sh.[A1] > 0 Then
        lig = Me.Cells(Rows.Count, 3).End(xlUp).Row + 1
        Me.Cells(lig, 3) = Sh.Name
        Me.Cells(lig, 4) = Sh.[A1]
        Me.Cells(lig, 5) = Sh.[A2]
    End If
Next Sh
Me.Cells(lig + 2, 4) = Application.Sum(Me.[D13].Resize(lig - 12, 1))
Me.Cells(lig + 2, 5) = Application.Sum(Me.[E13].Resize(lig - 12, 1))
End Sub

... à tester soigneusement, donc!

[Edit:] re-salut Si... :D
 

Modeste

XLDnaute Barbatruc
Re : Macro création automatique d'un tableau grâce aux données d'autres feuilles

Bonsoir,

Mon très cher Si... tu es le plus que bienvenu (selon moi) et l'idée du tableau (que tu sembles affectionner :)) finira sans doute par venir à bout de ma résistance passive :eek:

Avec les 67 feuilles dans le classeur de Marina, c'est un peu "lourd". La version ci-dessous améliore -un peu- la vitesse d'exécution et gère le cas où aucune feuille ne serait concernée.
VB:
Private Sub Worksheet_Activate()
Dim tablo()
Me.Cells(13, 3).Resize(Application.CountA(Me.[C:C]), 3).ClearContents
For Each Sh In Sheets
    If Sh.Name <> Me.Name And Sh.Name <> Feuil1.Name And Sh.Name <> Feuil2.Name And Sh.[A1] > 0 Then
        ReDim Preserve tablo(2, x)
        tablo(0, x) = Sh.Name
        tablo(1, x) = Sh.[A1]
        tablo(2, x) = Sh.[A2]
        x = x + 1
    End If
Next Sh
lig = Me.Cells(Rows.Count, 3).End(xlUp).Row + 1
If x = 0 Then Exit Sub
Me.Cells(lig, 3).Resize(x, 3) = Application.Transpose(tablo)
Me.Cells(lig + x + 1, 4) = Application.Sum(Me.[D13].Resize(lig + x - 12, 1))
Me.Cells(lig + x + 1, 5) = Application.Sum(Me.[E13].Resize(lig + x - 12, 1))
End Sub

Bon appétit, Si... vous passez à table :)
 

Marine64110

XLDnaute Nouveau
Re : Macro création automatique d'un tableau grâce aux données d'autres feuilles

Bonjour Modeste, bonjour Si,

Désolée de ne pas avoir été très réactive, j'étais en week-end. En tous cas merci beaucoup de m'aider, vous êtes super !!

J'ai testé ton nouveau code Modeste, ça marche parfaitement :D:D Pour la cellule [A3], je ne m'étais pas trompée, c'est juste que depuis que je t'ai envoyé mon "monstre", j'ai rajouté dans chaque feuille son nom précis (plus explicite que celui que j'avais donné à mes onglets) en cellule [A3].

Maintenant tout marche super bien ! Grâce à vous je vais passer une bonne semaine :)

Et ne t'en fais pas Modeste, je reviendrai très certainement poser tout plein de questions :p

Encore un grand merci à vous deux, bonne journée :)
 

Discussions similaires

Statistiques des forums

Discussions
312 339
Messages
2 087 407
Membres
103 538
dernier inscrit
Mbolatiana Hyacinthe