• Initiateur de la discussion Initiateur de la discussion eduraiss
  • 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 !

eduraiss

XLDnaute Accro
Bonjour le forum

J'ai un fichier excel qui me permet de gerer les "conges, rtt, maladie ect" du personnel

J'aimerais si possible avoir la visu des personnes a compétences égales sont en absence le même jour,

Je joins un fichier cela sera plus clair

Merci
Cordialement
 

Pièces jointes

Re : Planning conges

Bonjour eduraiss,

Pas trop étudié le fichier, mais il me semble que le filtre élaboré (avancé) devrait faire l'affaire.

La seule difficulté est d'écrire la bonne formule pour la zone de critères.

A+
 
Re : Planning conges

Bonjour le forum,
Merci pour vos réponses, le fichier de Bebere m'intéresse l'userform s'ouvre bien lorsque je clique sur le nom, mais les personnes qui on prit une journée et qui on la même conpétence ne s'affiche pas en entier
Je renvoie le ficher, j'ai modifié la compétence de certaine personnes "faire un clique sur AMEQRAME C"

Merci
 

Pièces jointes

Re : Planning conges

Bonjour eduraiss, Bebere,

Puisque j'ai parlé du filtre élaboré, voici une solution.

Double-clic sur un nom en colonne N.

Pour désactiver le filtre, re-double-clic ou touche <Echap>.

Dans le code de la feuille :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim c
c = Target.Offset(, 2) 'compétence
If Intersect(Target, [N:N]) Is Nothing Or c = "" Then Exit Sub
Cancel = True
[A5].Formula = "=AND(P5=" & c & ",OR(Q5<0,LEFT(R5)=""-""))" 'critères
Rows("4:" & [B65536].End(xlUp).Row).AdvancedFilter xlFilterInPlace, [A4:A5]
Application.OnKey "{ESC}", "DesactiveFiltre"
End Sub
Dans Module1 :

Code:
Sub DesactiveFiltre()
Feuil1.Cells.AdvancedFilter xlFilterInPlace, ""
Application.OnKey "{ESC}"
End Sub
Quant à ceci :

mais il y a un truc, l'userform doit me donner les absences de la journée uniquement, cela doit être plus compliqué je pense

de quelle journée voulez-vous parler ??

Edit : ne pas tester le fichier en ligne, mais après l'avoir téléchargé...

A+
 

Pièces jointes

Dernière édition:
Re : Planning conges

Re,

Pour désactiver le filtre, il vaut peut-être mieux cliquer sur une cellule quelconque :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.AdvancedFilter xlFilterInPlace, ""
End Sub
Version (2), là on peut tester le fichier en ligne.

Je crois avoir compris pour "la journée", vous voulez masquer les journées où il n'y a rien, c'est ça ?

Alors il faut masquer ces colonnes, je regarde ça.

A+
 

Pièces jointes

Re : Planning conges

Re,

On arrive maintenant à une solution assez différente :

- le filtrage est inversé

- le filtre est retiré dès que les lignes à masquer sont repérées

- on masque effectivement les lignes et les colonnes.

Toujours double-clic sur un nom en colonne N, et clic sur une cellule pour tout afficher :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim c, plage As Range, filtre As Range, dercol As Range, col As Range
c = Target.Offset(, 2) 'compétence
If Intersect(Target, [N:N]) Is Nothing Or c = "" Then Exit Sub
Cancel = True
Application.ScreenUpdating = False
[A5].Formula = "=OR(P5<>" & c & ",AND(Q5=0,LEFT(R5)<>""-""))" 'critères
Set plage = Rows("4:" & [B65536].End(xlUp).Row)
plage.AdvancedFilter xlFilterInPlace, [A4:A5]
Set filtre = plage.Offset(1).SpecialCells(xlCellTypeVisible)
plage.AdvancedFilter xlFilterInPlace, "" 'désactivation du filtre
On Error Resume Next 'sécurité
Application.EnableEvents = False
'---masquage des lignes---
filtre.EntireRow.Hidden = True
'---masquage des colonnes---
Set filtre = plage.Offset(1).SpecialCells(xlCellTypeVisible)
Set dercol = [IV4].End(xlToLeft).EntireColumn
For Each col In Range(Columns("V"), dercol)
  If Application.CountA(Intersect(col, filtre)) = 0 Then col.EntireColumn.Hidden = True
Next
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Rows("5:65536").Hidden = False
Columns("V:IV").Hidden = False
End Sub
Fichier (3).

A+
 

Pièces jointes

Re : Planning conges

Re,

J'aimerais si possible avoir la visu des personnes a compétences égales sont en absence le même jour

Il faut donc masquer la ligne si la personne n'a pas de jours d'absences en commun avec Target.

Alors la macro se complique, il faut 3 masquages successifs :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim c, plage As Range, filtre As Range, lig&, col%, r As Range
c = Target.Offset(, 2) 'compétence
If Intersect(Target, [N:N]) Is Nothing Or c = "" Then Exit Sub
Cancel = True
Application.ScreenUpdating = False
'---filtre élaboré (avancé)---
[A5].Formula = "=OR(P5<>" & c & ",AND(Q5=0,LEFT(R5)<>""-""))" 'critères
Set plage = Rows("4:" & [B65536].End(xlUp).Row)
plage.AdvancedFilter xlFilterInPlace, [A4:A5]
Set filtre = plage.Offset(1).SpecialCells(xlCellTypeVisible)
plage.AdvancedFilter xlFilterInPlace, "" 'désactivation du filtre
On Error Resume Next 'sécurité
Application.EnableEvents = False
'---1er masquage : des lignes filtrées---
filtre.EntireRow.Hidden = True
'---2ème masquage : des colonnes où Target n'est pas absent---
lig = Target.Row
col = [IV4].End(xlToLeft).Column 'n° dernière colonne
For col = 22 To col 'à partir de la colonne V
  If Cells(lig, col) = "" Then Columns(col).Hidden = True
Next
'---3ème masquage : des lignes si pas d'absence affichée---
For Each r In Intersect(plage.Offset(1), Columns("V:IV")).Rows
  If r.EntireRow.Hidden = False Then
    If Application.CountA(r.SpecialCells(xlCellTypeVisible)) = 0 _
      Then r.EntireRow.Hidden = True
  End If
Next
Application.EnableEvents = True
End Sub
Edit : noter en passant que je n'ai pas tenu comte des colonnes RN RC AI.

Si vous voulez les utiliser, ajouter les critères adéquats à la formule des critères du filtre.

A+
 

Pièces jointes

Dernière édition:
Re : Planning conges

Re,
Merci a vous
J'ai essayé le fichier eduraiss4 de job 75 il n'a pas l'air de fonctionner correctement

Je renvoie le fichier j'ai mis le critéres RTT en colonne AB en cliquant sur "AMEQRAME C" je n'obtiens pas la liste des personne en absence

Merci
 

Pièces jointes

Re : Planning conges

Re,

Tiens une chose m'avait échappé dans votre fichier.

Colonne R, à partir de la cellule R36, la formule change !

Elle renvoie un nombre, alors que précédemment elle renvoyait du texte (avec le signe -).

Evidemment, le critère du filtre sur la colonne R ne fonctionne plus à partir de R36...

Donc choisissez : du texte ou des nombres !

Si vous voulez des nombres il faut écrire :

Code:
[A5].Formula = "=OR(P5<>" & c & ",AND(Q5=0,R5=0))" 'critères
A+
 
Re : Planning conges

Bonjour eduraiss, le forum,

Les 2ème et 3ème masquages seront plus rapides ainsi :

Code:
'---2ème masquage : des colonnes où Target n'est pas absent---
col = [IV4].End(xlToLeft).Column 'n° dernière colonne
Cells(Target.Row, "V").Resize(, col - 21) _
  .SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
'---3ème masquage : des lignes si pas d'absence affichée---
For Each cel In Intersect(plage, [N:N]).SpecialCells(xlCellTypeVisible)
  If Application.CountA(Cells(cel.Row, "V").Resize(, col - 21) _
    .SpecialCells(xlCellTypeVisible)) = 0 Then cel.EntireRow.Hidden = True
Next
Fichier (5).

A+
 

Pièces jointes

Re : Planning conges

Re,

On a sûrement remarqué que quand on clique sur une cellule ce n'est pas joli joli : l'écran sursaute.

Pour l'éviter, utiliser le nom défini filtrage :

Code:
Me.Names.Add "filtrage", True 'mémorisation
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next 'si le nom n'existe pas
If [filtrage] Then
  Rows("5:65536").Hidden = False
  Columns("V:IV").Hidden = False
  Me.Names.Add "filtrage", False
End If
End Sub
Fichier (6).

A+
 

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
11
Affichages
540
Retour