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
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