Bonjour
Peux tu stp poster un fichier exemple pour voir à quoi ressemble ton tableau récap?
Bonjour vgendron,le meme SANS la colonne intermédiaire
Sub Lister_Feuilles()
Dim WSh As Worksheet, DC As Object
Dim tablo(), Lgn1(), nb_Cols%, nb_Lgns%
'Mémorisation des formules de la 1ère ligne
Lgn1 = Application.[tb_Bilan].Rows(1).FormulaLocal
'Mettre des constantes dans la 1ère ligne pour éviter l'extention automatique des formules dans le tabeau
[tb_Bilan].Rows(1).Value = [tb_Bilan].Rows(1).Value
'Tableau Actuel (pour ne pas effacer les données déjà saisies) (transposer pour utiliser REDIM)
tablo = Application.Transpose([tb_Bilan].FormulaLocal)
nb_Cols = UBound(tablo, 1)
nb_Lgns = UBound(tablo, 2)
'Feuilles déjà listées dans le tableau
Set DC = CreateObject("Scripting.dictionary")
For i = 1 To UBound(tablo, 2)
DC(tablo(1, i)) = i
Next
'Collecte des nouvelles feuilles
'(hors feuilles "Bilan", feuilles déjà collectées, feuilles sans ou avec plusieurs Listobject)
For Each WSh In ThisWorkbook.Worksheets
NomSh = WSh.Name
If NomSh <> "Bilan" And Not DC.exists(NomSh) And WSh.ListObjects.Count = 1 Then
nb_Lgns = nb_Lgns + 1: ReDim Preserve tablo(1 To nb_Cols, 1 To nb_Lgns)
NomLO = WSh.ListObjects(1).Name
tablo(1, nb_Lgns) = WSh.Name
tablo(2, nb_Lgns) = "=" & NomLO & "[[#Totaux];[Total]]"
tablo(4, nb_Lgns) = "=" & NomLO & "[[#Totaux];[Montant]]"
End If
Next
'Redimensionnement du tableau
[tb_Bilan].ListObject.Resize [tb_Bilan].ListObject.Range.Resize(nb_Lgns + 2) ' +2 = lignes entête et ligne total
'Collage des formules
[tb_Bilan].FormulaLocal = Application.Transpose(tablo)
'Restitution des formule de la 1ère ligne
[tb_Bilan].Rows(1).FormulaLocal = Lgn1
'Suppression de la 1ère ligne si elle était vide
If [tb_Bilan].Cells(1, 1) = "" Then [tb_Bilan].ListObject.ListRows(1).Delete
End Sub
Sub Lister_Feuilles()
Dim WSh As Worksheet, DC As Object
Dim tablo(), Lgn1(), nb_Cols%, nb_Lgns%
'Mémorisation des formules de la 1ère ligne
Lgn1 = Application.[Tb_Bilan].Rows(1).FormulaLocal
'Mettre des constantes dans la 1ère ligne pour éviter l'extention automatique des formules dans le tabeau
[Tb_Bilan].Rows(1).Value = [Tb_Bilan].Rows(1).Value
'Tableau Actuel (pour ne pas effacer les données déjà saisies) (transposer pour utiliser REDIM)
tablo = Application.Transpose([Tb_Bilan].FormulaLocal)
nb_Cols = UBound(tablo, 1)
nb_Lgns = UBound(tablo, 2)
'Feuilles déjà listées dans le tableau
Set DC = CreateObject("Scripting.dictionary")
For i = 1 To UBound(tablo, 2)
DC(tablo(1, i)) = i
Next
'Collecte des nouvelles feuilles
'(hors feuilles "Bilan", feuilles déjà collectée, feuille sans ou avec plusieurs Listobject)
For Each WSh In ThisWorkbook.Worksheets
NomSh = WSh.Name
If NomSh <> "Bilan" And Not DC.exists(NomSh) And WSh.ListObjects.Count = 1 Then
nb_Lgns = nb_Lgns + 1: ReDim Preserve tablo(1 To nb_Cols, 1 To nb_Lgns)
NomLO = WSh.ListObjects(1).Name
tablo(1, nb_Lgns) = WSh.Name
tablo(2, nb_Lgns) = "=" & NomLO & "[[#Totaux];[Total]]"
tablo(4, nb_Lgns) = "=" & NomLO & "[[#Totaux];[Montant]]"
End If
Next
'Redimensionnement du tableau
[Tb_Bilan].ListObject.Resize [Tb_Bilan].ListObject.Range.Resize(nb_Lgns + 2) ' +2 = lignes entête et ligne total
'Collage des formules
[Tb_Bilan].FormulaLocal = Application.Transpose(tablo)
'Restitution des formule de la 1ère ligne
[Tb_Bilan].Rows(1).FormulaLocal = Lgn1
'Suppression de la 1ère ligne si elle était vide
If [Tb_Bilan].Cells(1, 1) = "" Then [Tb_Bilan].ListObject.ListRows(1).Delete
With [Tb_Bilan].ListObject.Sort
.SortFields.Clear
.SortFields.Add Key:=[tb_bilan[Projet]], DataOption:=xlSortTextAsNumbers
.Header = xlYes
.Apply
End With
End Sub
il y a une option (directement dans la table???) qui permet de désactiver cette propagation..Bonjour @vgendron,
Sur une de mes versions (2007 ou 2021 il faut que je vérifie)
La dernière formule placée par le code se propage à toute la colonne ...
Je revérifie ce soir et je reviens vers toi.
À plus