Sub GenererFichiersPersonnalises()
Dim ClassIndex As Workbook
Dim FeuilleIndex As Worksheet
Dim NumColIndex As Long
Dim ColonneIndex As Range
Dim NumLigneTitre As Long 'Numéro de la ligne contenant les titres de colonnes
Dim FeuilleModele As Worksheet
Dim CelluleDestination As Range
Dim ModeleProtege As Boolean 'Vrai si la feuille modèle a une protection
Dim Rep As String
Dim CellCour As Range
Dim i As Long
Set ClassIndex = ActiveWorkbook
Set FeuilleIndex = ClassIndex.Sheets("Feuil1")
Set FeuilleModele = ClassIndex.Sheets("Feuil2")
Rep = ClassIndex.Path
NumColIndex = 1
NumLigneTitre = 1 'Devrait être calculé s'il existe un filtre avancé
Set ColonneIndex = FeuilleIndex.Columns(NumColIndex)
Set CelluleDestination = FeuilleModele.Range("C3")
'Gestion de la protection de la feuille modèle
ModeleProtege = FeuilleModele.ProtectContents
'On reduit la taille de la colonne index aux cellules utiles
Set ColonneIndex = ColonneIndex.Range(FeuilleIndex.Cells(NumLigneTitre, NumColIndex), FeuilleIndex.Cells(FeuilleIndex.UsedRange.Rows.Count, NumColIndex))
If ColonneIndex.Cells.Count <= NumLigneTitre Then GoTo GestionErreurs
i = 1
For Each CellCour In ColonneIndex.SpecialCells(xlCellTypeVisible)
If CellCour.Row <= NumLigneTitre Then GoTo CellCourSuivante 'Ligne titre ou avant, on ne fait rien
If CellCour.value = "" Then GoTo CellCourSuivante 'Cellule vide, on ne fait rien
If ModeleProtege Then FeuilleModele.Unprotect 'On déprotège pour pouvoir travailler avec la feuille modèle
CellCour.Copy 'On copie la cellule
CelluleDestination.PasteSpecial xlPasteValuesAndNumberFormats 'On colle dans la cellule index
Application.DisplayAlerts = False
FeuilleModele.SaveAs Filename:=Rep & "\FeuillleSauvee_" & i, FileFormat:=ClassIndex.FileFormat
Application.DisplayAlerts = True
If ModeleProtege Then FeuilleModele.Protect 'On rétrabli la protection de la feuille modèle
i = i + 1
CellCourSuivante:
Next CellCour
GoTo SortiePropre
GestionErreurs:
On Error GoTo 0 'On annule la gestion des erreurs
If Err.Number > 0 Then Resume 'On redéclenche l'erreur pour pouvoir exécuter le débogage là où a lieu l'erreur
SortiePropre:
If ModeleProtege Then FeuilleModele.Protect 'On rétrabli la protection de la feuille modèle
End Sub