Bonjour,
J'ai un planning, lorsque je clique dans une cellule située en-dessous de la ligne 49 le Userform USF_Planification s'affiche (voir image).
Si la cellule active n'a pas de "g" le label date de début est complété avec la valeur de la date de la ligne 49.
Lorsque je clique sur OK, j'aimerai que toutes les cellules comprises entre les dates de début et de fin soient complétées par "g", sauf les weekend et les jours fériés.
J'ai réussi à placer le premier "g", mais j'ai besoin de votre aide pour placer les autres "g"
Merci pour votre précieuse collaboration
Philippe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 Option Explicit Dim LigneCelluleActive As Variant Dim ColonneCelluleActive As Variant Dim Ligne_49 As Variant Dim Colonne_A As Variant Dim Colonne_C As Variant Dim Colonne_E As Variant Private Sub Btn_Calculer_Date_de_fin_Click() Dim Start_Date As Date, DateFin As Date, Days As Long, Week As String, Holydays As Range If LabelDateDebut = "" Then MsgBox "La date début doit être complétée.", vbInformation, "! Oups ! Action interrompue" Else If MsgBox("Remplacer la date de fin ?", vbYesNo + vbQuestion, "Calculer la date de fin") = vbYes Then Start_Date = LabelDateDebut If TextBoxDuree = "" Then LabelDateFin = LabelDateDebut LabelJourSemDebut = Format(LabelDateDebut, "ddd") 'Afficher le jour de la semaine devant la date LabelJourSemFin = Format(LabelDateFin, "ddd") 'Afficher le jour de la semaine devant la date Else Days = TextBoxDuree 'nombre de jour Week = "0000011" On Error GoTo Description_erreur 'Si problème avec jours fériés Set Holydays = Sheets("DATA Jours Fériés").Range("Jours_Feries_Ponts") 'Vérifier les dates dans le tableau de la feuille DATA DateFin = CDate(Application.WorkDay_Intl(Start_Date, Days, Week, Holydays)) LabelDateFin = DateFin LabelJourSemDebut = Format(LabelDateDebut, "ddd") 'Afficher le jour de la semaine devant la date LabelJourSemFin = Format(LabelDateFin, "ddd") 'Afficher le jour de la semaine devant la date End If 'Fin du calcul de la date de fin si la date de début existe End If End If Exit Sub Description_erreur: MsgBox _ vbCrLf & vbCrLf & _ "- Il y a un problème avec le tableau des jours fériés." & vbCrLf & vbCrLf & _ "- Erreur VBA : " & vbCrLf & " " & Err.Description & vbCrLf & vbCrLf & _ "", vbExclamation, "! Oups ! Action interrompue" End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Private Sub Label_Ecart_Date_en_jrs_Click() Dim Start_Date As Date, DateFin As Date, Days As Long, Week As String, Holydays As Range, Duree As Variant If LabelDateDebut = "" Or LabelDateFin = "" Then MsgBox "Les dates de début et de fin doivent être complétées.", vbInformation, "! Oups ! Action interrompue" Else Start_Date = LabelDateDebut DateFin = LabelDateFin Week = "0000011" On Error GoTo Description_erreur 'Si problème avec jours fériés Set Holydays = Sheets("DATA Jours Fériés").Range("Jours_Feries_Ponts") 'Vérifier les dates dans le tableau de la feuille DATA Duree = WorksheetFunction.NetworkDays_Intl(Start_Date, DateFin, Week, Holydays) - 1 Label_Ecart_Date_en_jrs.Caption = Duree End If Exit Sub Description_erreur: MsgBox _ vbCrLf & vbCrLf & _ "- Il y a un problème avec le tableau des jours fériés." & vbCrLf & vbCrLf & _ "- Erreur VBA : " & vbCrLf & " " & Err.Description & vbCrLf & vbCrLf & _ "", vbExclamation, "! Oups ! Action interrompue" End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub Btn_Feries_Click() Unload Me Sheets("DATA Jours Fériés").Select Range("A1").Select End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub LabelDateDebut_Click() USF_Calendar_Planif_Debut.Show End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub LabelDateFin_Click() USF_Calendar_Planif_Fin.Show End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub LabelJourSemDebut_Click() USF_Calendar_Planif_Debut.Show End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub LabelJourSemFin_Click() USF_Calendar_Planif_Fin.Show End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub TextBoxDuree_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'Autorise la saisie de certains caractères Select Case KeyAscii Case 48 To 57 'Accepte de 0 à 9 Case Else KeyAscii = 0 End Select End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Private Sub UserForm_Initialize() Dim PlageDeRecherche As Variant Dim Trouve As Variant Dim AdresseTrouvee As Variant Dim ID_et_indice_du_CFC As String Dim ID_du_CFC As String Ligne_49 = 49 Colonne_A = 1 Colonne_C = 3 LigneCelluleActive = ActiveCell.Row ID_et_indice_du_CFC = Cells(LigneCelluleActive, Colonne_A).Value ID_du_CFC = Left(ID_et_indice_du_CFC, InStr(ID_et_indice_du_CFC, "-") - 1) 'Extraire ID du CFC ID_et_indice_du_CFC = ID_du_CFC & "-10001" 'Rechercher et sélectionner la cellule contenant ID Set PlageDeRecherche = ActiveSheet.Columns(1) Set Trouve = PlageDeRecherche.Cells.Find(what:=ID_et_indice_du_CFC, LookAt:=xlWhole) 'Ne pas masquer la plage de recherche sinon ne trouve pas 'traitement de l'erreur possible : Si on ne trouve rien : If Trouve Is Nothing Then 'ici, traitement pour le cas où la valeur n'est pas trouvée MsgBox ID_du_CFC & " La recherche demandée n'éxiste pas.", vbExclamation, "! Oups ! Action interrompue" Else 'ici, traitement pour le cas où la valeur est trouvée AdresseTrouvee = Trouve.Address LabelCFC.Caption = Range(AdresseTrouvee).Offset(rowOffset:=0, columnOffset:=12) End If FrameDate.Caption = "Nous sommes le " & Format(Now, "dddd dd.mm.yyyy") If ActiveCell = "" Then ColonneCelluleActive = ActiveCell.Column LabelDateDebut = Cells(Ligne_49, ColonneCelluleActive).Value LabelJourSemDebut = Format(LabelDateDebut, "ddd") 'Afficher le jour de la semaine devant la date LabelDateFin = Cells(Ligne_49, ColonneCelluleActive).Value LabelJourSemFin = Format(LabelDateFin, "ddd") 'Afficher le jour de la semaine devant la date End If End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub BT_Annuler_Click() Unload Me End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Private Sub BT_OK_Click() Dim Trouve As Range Dim PlageDeRecherche As Range Dim Cellule_debut As Range Dim Valeur_Cherchee As Variant Dim AdresseTrouvee As String Dim ColonneTrouvee As Variant Dim Adresse_du_texte As Variant Colonne_E = 5 Valeur_Cherchee = CDate(LabelDateDebut) Set PlageDeRecherche = ActiveSheet.Range("BE49:AKD49") 'Important!!! pour les dates ou les nombres = Format de cellule ajuster au texte Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole) 'traitement de l'erreur possible : Si on ne trouve rien : If Trouve Is Nothing Then 'ici, traitement pour le cas où la valeur n'est pas trouvée MsgBox "La date recherchée n'éxiste pas dans le planning.", vbExclamation, "! Oups ! Action interrompue" Else 'ici, traitement pour le cas où la valeur est trouvée Range("BE" & ActiveCell.Row & ":AKD" & ActiveCell.Row).ClearContents 'Effacer l'ancienne planification ColonneTrouvee = Trouve.Column LigneCelluleActive = ActiveCell.Row Adresse_du_texte = Cells(LigneCelluleActive, Colonne_E).Address Cells(LigneCelluleActive, ColonneTrouvee) = "g" Cells(LigneCelluleActive, ColonneTrouvee - 1).Formula = "=" & Adresse_du_texte Cells(LigneCelluleActive, ColonneTrouvee - 1).Font.Name = "Calibri" End If Unload Me End Sub
Partager