Bonjour,
Ci-joint une proposition VBA, avec le code associé ci-après.
Option Explicit
Public Sub RechercheFeuilles()
Dim wsht As Worksheet, c As Range
Dim resRefs As Object: Set resRefs = CreateObject("System.Collections.Arraylist")
Dim resShts As Object: Set resShts = CreateObject("System.Collections.Arraylist")
For Each wsht In ThisWorkbook.Worksheets
If Not (wsht.Name Like "Synth?se") Then
With wsht.Range("G1")
.Resize(1, 2).Value2 = Array("V/F", "F")
.AutoFilter 1, False
If .Offset(1, 0).End(xlDown).Row <> .Worksheet.Rows.Count Then
For Each c In Range(.Offset(1, 2), .Offset(1, 2).End(xlDown)).SpecialCells(xlCellTypeVisible)
resRefs.Add c.Value2
resShts.Add wsht.Name
Next c
End If
.AutoFilter
End With
End If
Next wsht
With ThisWorkbook.Worksheets("Synthèse").Range("D3")
Range(.Cells, .Offset(0, -1).End(xlDown)).ClearContents
.Resize(resRefs.Count).Value2 = WorksheetFunction.Transpose(resRefs.ToArray)
.Offset(0, -1).Resize(resShts.Count).Value2 = WorksheetFunction.Transpose(resShts.ToArray)
End With
End Sub
EDIT : Salut @Jacky, je viens de voir que tu t'y étais mis aussi
EDIT 2 : @Jacky très bonne solution itérative que tu proposes, il suffit ensuite de boucler sur les feuilles et tu avais tout. Juste un conseil dans ton If :
Tu vérifies .Cells(I, 7) = "Faux". C'est une source d'erreur : comme les cellules contient véritablement les booléens VRAI/FAUX, il vaut mieux écrire .Cells(I, 7) = False
Car il suffit que les options changent un peu (si on met en début de module Option Compare Binary, ou que le PC n'est pas en français) alors ton code ne marche plus. En mettant False, il fonctionne partout. (et pour les chasseurs de millisecondes comme @curulis et moi, c'est plus optimisé).