XL 2010 Gestion absence enseignant

  • Initiateur de la discussion Initiateur de la discussion snoop974
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

snoop974

XLDnaute Nouveau
Bonjour ! Voilà mon problème. J'ai un planning de gestion des absences, en colonne j'ai les dates et en ligne le non des enseignants. Pour chaque enseignant je met dans la cellule ou il est absent et je met une lettre représentant le motif d’absence (C, RDVP, P...). Je souhaiterais dans une autre feuille faire un tableau de suivis des absences. C'est a dire une feuille avec pour chaque enseignant les date sou il sera absent, avec nom enseignant avec ces dates d'absence.

Toto | 01/05/2024 | 26/08/2024 | 14/11/2024 ...........

je vois à peu près ce qu'il faudrait faire mais je trouve pas les fonction à mélanger, genre rechercher les colonne non vide correspondant à enseignant et remonter la colonne(date), mais bon je tourne en rond. peut être si possible une autre ligne avec le motif si possible, mais bon c'est pas le plus important.

Merci d'avance pour vos idées
 
Bonjour snoop974, le forum,

Voyez le fichier joint et le code de la feuille Filtre (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [B1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim critere$, lig&, i&
critere = UCase([B1]) & "*"
lig = 1
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
If Target.Address = "$B$1" Then [B1].Select
Rows("2:" & Rows.Count).Delete 'RAZ
With Sheets("Source")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    .Cells(1, 3).Resize(, .Columns.Count - 2).Copy Cells(1, 3)
    For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
        If UCase(.Cells(i, 2)) Like critere And Application.CountA(.Cells(i, 3).Resize(, .Columns.Count - 2)) Then
            lig = lig + 1
            .Rows(i).Copy Cells(lig, 1)
        End If
    Next i
End With
For i = Cells(1, Columns.Count).End(xlToLeft).Column To 3 Step -1
    If Application.CountA(Columns(i)) < 2 Then Columns(i).Delete
Next i
With [B1].Validation 'liste de validation
    .Delete 'RAZ
    .Add xlValidateList, Formula1:="=B2:B" & lig
    .ShowError = False
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Il s'exécute quand on active la feuille ou qu'on modifie une cellule.

La feuille est filtrée à partir du texte entré en B1 qui contient une liste de validation.

A+
 

Pièces jointes

Au lieu d'une liste de validation on peut utiliser une ComboBox (liste déroulante) :
VB:
Private Sub Worksheet_Activate()
ComboBox1_Change 'lance la macro
End Sub

Private Sub ComboBox1_GotFocus()
ComboBox1_Change 'lance la macro
End Sub

Private Sub ComboBox1_Change()
Dim critere$, lig&, i&
critere = UCase(ComboBox1) & "*"
lig = 1
Application.ScreenUpdating = False
Rows("2:" & Rows.Count).Delete 'RAZ
With Sheets("Source")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    .Cells(1, 3).Resize(, .Columns.Count - 2).Copy Cells(1, 3)
    For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
        If UCase(.Cells(i, 2)) Like critere And Application.CountA(.Cells(i, 3).Resize(, .Columns.Count - 2)) Then
            lig = lig + 1
            .Rows(i).Copy Cells(lig, 1)
        End If
    Next i
End With
For i = Cells(1, Columns.Count).End(xlToLeft).Column To 3 Step -1
    If Application.CountA(Columns(i)) < 2 Then Columns(i).Delete
Next i
If lig > 1 Then ComboBox1.List = Range("B2:C" & lig).Value Else ComboBox1.Clear
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
488
Réponses
9
Affichages
574
Réponses
10
Affichages
273
Retour