Liste onglets si condition remplie

Bonjour à tous,

J'ai un problème.

J'aimerais faire une liste d'onglet sur excel s'ils respectent une condition : pour chaque onglet dont la cellule K1 est "OUI", il faut que le nom de tous ces onglets soient répertorié par ordre alphabétique sur le premier onglet de mon classeur. Idéalement, la liste de ces onglets devrait commencer en E5 dans le premier onglet du classeur.

Il y a environ 80 onglets au total et 10 onglets qui répondent à ce critère, mais je voudrais que si jamais un ''NON'' en K1 devient un "OUI", que le nom de cet onglet s'ajoute automatiquement dans la liste.

Merci pour aide qui me sera précieuse

Bonsoir momnes, le forum,

Un essai....fonctionnel mais pas optimisé,

  • La macro se lance à l'activation du premier onglet (Liste)
Sub listeOnglets()
 Dim i  As Integer

  Application.ScreenUpdating = False

  With Sheets("Liste")
   .Range("E5:E100").ClearContents
   .Range("E5").Select

    For i = 2 To Sheets.Count
     If Sheets(i).Range("K1") Like "OUI" Then
        ActiveCell.Value = Sheets(i).Name
        ActiveCell.Offset(1, 0).Select
     End If
    Next i
  End With

  Application.ScreenUpdating = True

End Sub
4classeur1.xlsm (21.84 Ko)

Cordialement,

Salut Momnes,

Salut Xorsankukai,

une macro à coller dans le module VBA de 'ThisWorkbook' qui ne réagira qu'à un changement de valeur en [K1] !

Il faut donc, IMPERATIVEMENT, pour initialiser cette liste une première fois, encoder un changement en [K1] dans une feuille quelconque (puis remettre la valeur originelle, hein !!).

Cela dit, With Sheets(1) ne me plaît pas : possible d'avoir le nom de cette feuille 1 recevant cette liste d'onglets ?

La liste d'onglets est ensuite triée.

Code non-testé, évidemment, puisque... comme d'hab... pas de fichier joint !

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
If Sh.Index > 1 Then
    If Not Intersect(Target, Sh.[K1]) Is Nothing Then
        With Sheets(1)
            .Range("E5:E" & .Range("E" & Rows.Count).End(xlUp).Row).Value = ""
            For x = 2 To Sheets.Count
                If UCase(Sheets(x).[K1]) = "OUI" Then .Range("E" & .Range("E" & Rows.Count).End(xlUp).Row + 1).Value = Sheets(x).Name
            Next
            iRow = .Range("E" & Rows.Count).End(xlUp).Row
            If iRow > 5 Then .Range("E5:E" & iRow).Sort key1:=.Range("E5"), order1:=xlAscending, Orientation:=xlByColumns
        End With
    End If
End If
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

A+

Bonjour xorsankukai

Ton code fonctionne ! Merci beaucoup pour ton aide !

Et merci à ceux qui m'ont aidés

Morgan

Rechercher des sujets similaires à "liste onglets condition remplie"