Recherche de date (VBA)
Bonjour forum.
J'ai un fichier de planning qui fonctionne plutôt pas mal... mais:
Un problème réside dans le code de l'USF2.
Voici le fichier:
Dans la feuille Bdd, plage M6:P13, un double clique déclenche un objet Calendar pour saisir des dates non plannifiables.
Grâce à Banzai64, j'ai pu obtenir un code pour trouver la correspondance entre la personne définie et les dates pour afficher l'indisponibilité dans la feuille Plg_mgr.
Résumé: Dans la feuille Bdd, je saisi une date d'indispo (CP par exemple) pour une personne et toute la période est marquée "CP" dans la feuille Plg_mgr.
Le problème, c'est que j'ai l'impression que le code fait comme s'il faisait la recherche sur le jour sans prendre en compte le mois indiqué.
Y a-t-il possibilité de modifier cela?
Le fichier joint est prévu pour le mois de mai 2011. Si je saisis une indisponibilité du 10/03/2011 au 15/03/2011, les dates sont affichées quand même alors que ça ne devrait pas.
J'ai donc besoin d'améliorer le code bien que celui fourni soit très bien pour moi parce que je sais comment il fonctionne, mais d'autres doivent l'utiliser.
Voici le code en question:
Private Sub CommandButton1_Click()
Dim Cel As Range 'Recherchde la cellule où apparait le nom du mgr
Dim Lg As Long
Dim Cl As Integer
Dim J As Integer
Dim rs As String
rs = ListBox1.Value
Select Case rs
Case Is = "Congés payés"
rs = "CP."
Case Is = "Arrêt maladie"
rs = "'AM."
Case Is = "Indisponibilité"
rs = "ind"
Case Is = "Mise à pied"
rs = "'MP."
Case Is = "Examen"
rs = "'Ex."
End Select
With Sheets("Plg_mgr")
'On recherche le nom du mgr de la feuille bdd pour reporter sur la ligne du mgr dans la feuille Plg_mgr
Set Cel = .Range("A8:A17").Find(what:=Cells(ActiveCell.Row, "L"), LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Lg = Cel.Row
' On recherche la date correspondant à la cellule du début de l'indispo
Set Cel = .Range("C6:AR6").Find(what:=Day(ActiveCell.Offset(0, -1)), LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Cl = Cel.Column
For J = 0 To ActiveCell - ActiveCell.Offset(0, -1)
.Cells(Lg, Cl + J) = rs
.Cells(Lg, Cl + J).Interior.ColorIndex = 35
Next J
Else
MsgBox "Pas trouvé la date du 1er jour de congé"
End If
Else
MsgBox "Nom inconnu"
End If
End With
Unload Me
End SubEn espérant avoir été clair.. Pas sur.
Bonjour
Essayes
Private Sub CommandButton1_Click()
Dim Cel As Range 'Recherchde la cellule où apparait le nom du mgr
Dim Lg As Long
Dim Cl As Integer
Dim J As Integer
Dim rs As String
If (Month("1 " & Range("F1")) = Month(ActiveCell.Offset(0, -1))) And _
(Year(ActiveCell.Offset(0, -1)) = Range("G1")) Then
rs = ListBox1.Value
Select Case rs
Case Is = "Congés payés"
rs = "CP."
Case Is = "Arrêt maladie"
rs = "'AM."
Case Is = "Indisponibilité"
rs = "ind"
Case Is = "Mise à pied"
rs = "'MP."
Case Is = "Examen"
rs = "'Ex."
End Select
With Sheets("Plg_mgr")
'On recherche le nom du mgr de la feuille bdd pour reporter sur la ligne du mgr dans la feuille Plg_mgr
Set Cel = .Range("A8:A17").Find(what:=Cells(ActiveCell.Row, "L"), LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Lg = Cel.Row
' On recherche la date correspondant à la cellule du début de l'indispo
Set Cel = .Range("C6:AR6").Find(what:=Day(ActiveCell.Offset(0, -1)), LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Cl = Cel.Column
For J = 0 To ActiveCell - ActiveCell.Offset(0, -1)
.Cells(Lg, Cl + J) = rs
.Cells(Lg, Cl + J).Interior.ColorIndex = 35
Next J
Else
MsgBox "Pas trouvé la date du 1er jour de congé"
End If
Else
MsgBox "Nom inconnu"
End If
End With
Else
MsgBox "Le mois ou l'année ne correspond pas"
End If
Unload Me
End SubBonne journée
Bonjour Banzai64
Merci beaucoup pour cette proposition. Ca semble mieux fonctionner.
A une prochaine