almas
XLDnaute Occasionnel
Bonjour le forum
j 'ai fait un classeur de gestion du personnel très complexe et on c 'est aperçus qu ' une de mes macros ne donnais pas exactement le résultat attendu.
la macro permet de parcourir tous les onglets "nom du perssonnel" et d 'afficher des données lies au absences du mois choisis
j 'ai donc une date de début et une date de fin mais j 'ai extrait le mois que sur la 1er date
donc pour les absences à cheval sur 2 mois mon extraction n 'est pas complète
ex: si je demande mars je n 'ai pas les donnée qui ont une date de début en février
j 'ai donc extrait le mois de la date de fin également et fait que la macro recherche sur les 2
ça marche bien sauf que ça me double toute les données
je sais plus trop comment faire ....si quelqu un a la solution le l 'en remercie d avance
code:
Public flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$E$3" Then Exit Sub mois choisis
Application.EnableEvents = False
tx = [E3]
lig = 8
[A8:J400].ClearContents
'Stop
Set plage = Sheets("base de donnée").Range("T2:T90")
For Each cel In plage
flag = 0
k = cel.Value
If k = "" Then Application.EnableEvents = True: Exit Sub
'Stop
For Each sh In ActiveWorkbook.Sheets
If sh.Name = k Then a = sh.Name: flag = 1: Exit For
Next sh
If flag = 0 Then MsgBox ("La feuille " & k & " n'existe pas, Faire les modif nécessaires"): Application.EnableEvents = True: Exit Sub
With Sheets(k).[L17:M96] colones L et M = mois de debut de date et fin de date
Set a = .Find(tx, LookIn:=xlValues)
If Not a Is Nothing Then
firstAddress = a.Address
Do
Cells(lig, 1) = Sheets(k).Cells(a.Row, 1)
Cells(lig, 2) = Sheets(k).Cells(a.Row, 2)
Cells(lig, 3) = Sheets(k).Cells(a.Row, 3)
Cells(lig, 4) = Sheets(k).Cells(a.Row, 4)
Cells(lig, 5) = Sheets(k).Cells(a.Row, 5)
Cells(lig, 6) = Sheets(k).Cells(a.Row, 6)
Cells(lig, 7) = Sheets(k).Cells(a.Row, 7)
Cells(lig, 8) = Sheets(k).Cells(a.Row, 8)
Cells(lig, 9) = Sheets(k).Cells(a.Row, 9)
lig = lig + 1
Set a = .FindNext(a)
Loop While Not a Is Nothing And a.Address <> firstAddress
End If
End With
'End If
Next
Application.EnableEvents = True
End Sub
j 'ai fait un classeur de gestion du personnel très complexe et on c 'est aperçus qu ' une de mes macros ne donnais pas exactement le résultat attendu.
la macro permet de parcourir tous les onglets "nom du perssonnel" et d 'afficher des données lies au absences du mois choisis
j 'ai donc une date de début et une date de fin mais j 'ai extrait le mois que sur la 1er date
donc pour les absences à cheval sur 2 mois mon extraction n 'est pas complète
ex: si je demande mars je n 'ai pas les donnée qui ont une date de début en février
j 'ai donc extrait le mois de la date de fin également et fait que la macro recherche sur les 2
ça marche bien sauf que ça me double toute les données
je sais plus trop comment faire ....si quelqu un a la solution le l 'en remercie d avance
code:
Public flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$E$3" Then Exit Sub mois choisis
Application.EnableEvents = False
tx = [E3]
lig = 8
[A8:J400].ClearContents
'Stop
Set plage = Sheets("base de donnée").Range("T2:T90")
For Each cel In plage
flag = 0
k = cel.Value
If k = "" Then Application.EnableEvents = True: Exit Sub
'Stop
For Each sh In ActiveWorkbook.Sheets
If sh.Name = k Then a = sh.Name: flag = 1: Exit For
Next sh
If flag = 0 Then MsgBox ("La feuille " & k & " n'existe pas, Faire les modif nécessaires"): Application.EnableEvents = True: Exit Sub
With Sheets(k).[L17:M96] colones L et M = mois de debut de date et fin de date
Set a = .Find(tx, LookIn:=xlValues)
If Not a Is Nothing Then
firstAddress = a.Address
Do
Cells(lig, 1) = Sheets(k).Cells(a.Row, 1)
Cells(lig, 2) = Sheets(k).Cells(a.Row, 2)
Cells(lig, 3) = Sheets(k).Cells(a.Row, 3)
Cells(lig, 4) = Sheets(k).Cells(a.Row, 4)
Cells(lig, 5) = Sheets(k).Cells(a.Row, 5)
Cells(lig, 6) = Sheets(k).Cells(a.Row, 6)
Cells(lig, 7) = Sheets(k).Cells(a.Row, 7)
Cells(lig, 8) = Sheets(k).Cells(a.Row, 8)
Cells(lig, 9) = Sheets(k).Cells(a.Row, 9)
lig = lig + 1
Set a = .FindNext(a)
Loop While Not a Is Nothing And a.Address <> firstAddress
End If
End With
'End If
Next
Application.EnableEvents = True
End Sub