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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
Sub Chercher_habilitations()
Dim Nom_famille As String
Dim Prénom As String
Dim Poste As String
Dim Date_formation_initiale As Date
Dim Date_recyclage As Date
Dim Date_prochaine_formation As Date
Dim Compteur As Integer
Dim Nom_feuille_carte_générée As Variant
'Définit les 2 fichiers Excel que l'on utilise (fichier pour fabriquer les cartes d'habilitations et le fichier de suivi rempli par les RH)
'Il faut changer dans cette macro le chemin des fichiers au cas où l'on change les noms, chemins d'accès...
Dim Fichier_génération_carte As Workbook
Dim Fichier_RH As Workbook
Dim Chemin_fichier_RH As String
Set Fichier_génération_carte = ThisWorkbook
Chemin_fichier_RH = "Commun\HABILITATIONS\suivi habilitations et autorisations.xls"
'Workbooks.Open Filename:=Chemin_fichier_RH
'Set Fichier_RH = Activeworbook
'Les valeurs des cellules E1, E2 et E3 (autre feuille du fichier où est écrit le code sont prises en compte ; on lance déjà la macro depuis le fichier donc pas besoin de l'ouvrir à nouveau
Windows(Fichier_génération_carte).Activate
Nom_famille = Cells(1, 5).Value
Prénom = Cells(2, 5).Value
Poste = Cells(3, 5).Value
' Les 3 Loop sont peut-être inutiles vu qu'on utilise Application.Inputbox mais faîtes quand-même pour avoir de la pratique
Do While Len(Nom_famille) = 0
Compteur = Compteur + 1
If Compteur = 4 Then GoTo TropDeFautes
MsgBox "Vous devez obligatoirement renseigner le nom de famille dans la cellule E1. Plus que " & 4 - Compteur & " essais."
Nom_famille = Application.InputBox("Entrez le nom de famille en faisant attention à la casse", "Nom de la personne habilitée", Type:=2)
Cells(1, 5).Value = Nom_famille
Loop
Do While Len(Prénom) = 0
Compteur = Compteur + 1
If Compteur = 4 Then GoTo TropDeFautes
MsgBox "Vous devez obligatoirement renseigner le prénom dans la cellule E2. Plus que " & 4 - Compteur & " essais."
Prénom = Application.InputBox("Entrez le prénom en faisant attention à la casse", "Prénom de la personne habilitée", Type:=2)
Cells(2, 5).Value = Prénom
Loop
Do While Len(Poste) = 0
Compteur = Compteur + 1
If Compteur = 4 Then GoTo TropDeFautes
MsgBox "Vous devez obligatoirement renseigner le poste dans la cellule E3. Plus que " & 4 - Compteur & " essais."
Poste = Application.InputBox("Entrez le poste de la personne en faisant attention à la casse", "Poste principal de la personne habilitée", Type:=2)
Cells(3, 5).Value = Poste
Loop
MsgBox "La personne sélectionnée pour la génération de la carte est :" & Nom_famille & Prénom & ". Elle occuppe le poste de " & Poste
Sheets("Modèle carte").Select
'utiliser worksheets.count si ce qui est en-dessous ne fonctionne pas ; copy After:=Worksheets (Z)
'Vérifier si un code de ce type existe pour aller directement à la fin des onglets
Sheets("Modèle carte").Copy After:=lastsheet
ActiveSheet.Name = (Nom_famille & " " & Prénom)
Nom_feuille_carte_générée = ActiveSheet.Name
'Prévoir un cas où on aurait une feuille avec le même nom (carte déjà générée par exemple)
'On reporte les infos sur la première face de la carte
Range("M7:Q7").Select
ActiveCell.FormulaR1C1 = Nom_famille
Range("M8:Q8").Select
ActiveCell.FormulaR1C1 = Prénom
Range("M10:Q10").Select
ActiveCell.FormulaR1C1 = Poste
Range("X15:AB15").Select
'Pour boucle for qui balaye toutes les feuilles
Dim i As Integer
'Pour boucle nous permettant de remplir chacune des lignes de la carte en page 2 et 3
Dim k As Integer
'Pour avoir le numéro de ligne et de colonne de la cellule qui correspond à la recherche du nom dans la feuille
Dim Num_ligne As Integer
Dim Num_colonne As Integer
Dim Nom_formation As Variant
Dim Ligne_carte_Page2 As Integer
Dim Colonne_carte_Page2 As Integer
Dim Ligne_carte_Page3 As Integer
Dim Colonne_carte_Page3 As Integer
Dim nombre_feuilles As Integer
'dispo en haut déjà Workbooks.Open Filename:= _
'Chemin_fichier_RH
nombre_feuilles_fichier_RH = Worksheets.Count
k = 15
'For k = 15 To 21
For i = 1 To nombre_feuilles_fichier_RH
Sheets(i).Select
'On cherche une cellule contenant le nom entré
Cells.Find(What:=Nom_famille, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
'Pas sûr que ce soit une erreur - Boîte de message
On Error GoTo Nom_sans_habilitation_correspondante
'On enregistre les numéros ligne et colonne de la première cellule qui correspond à ce nom
Num_ligne = ActiveCell.Row
Num_colonne = ActiveCell.Column
'On teste si le prenom correspondant au premier nom trouvé est bien le même que celui entré au début (homonymes)
'While plus adapté?
If Cells(Num_ligne, Num_colonne + 1).Value = Prénom Then
Date_formation_initiale = Cells(Num_ligne, Num_colonne + 3)
Date_recyclage = Cells(Num_ligne, Num_colonne + 4)
Date_prochaine_formation = Cells(Num_ligne, Num_colonne + 5)
Nom_formation = Cells(Num_ligne, Num_colonne + 2)
Windows(Fichier_génération_carte).Activate
Else: Cells.Find(What:=Nom_famille, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
On Error GoTo Nom_sans_habilitation_correspondante
Num_ligne = ActiveCell.Row
Num_colonne = ActiveCell.Column
Date_formation_initiale = Cells(Num_ligne, Num_colonne + 3)
Date_recyclage = Cells(Num_ligne, Num_colonne + 4)
Date_prochaine_formation = Cells(Num_ligne, Num_colonne + 5)
Nom_formation = Cells(Num_ligne, Num_colonne + 2)
End If
Nom_sans_habilitation_correspondante:
MsgBox "La personne concernée n'est pas habilitée en tant que " & ActiveSheet.Name & " ou il y a une erreur dans le nom."
Next i
'Next k
Exit Sub
TropDeFautes:
MsgBox "Veuillez relire les explications SVP."
End Sub |
Partager