Sub mensuel()
Dim Num_Feuille As Integer
Dim Ligne_Mensualisation As Long
Dim Ligne_Feuille_Mois_Actif As Long
Dim Première_Ligne As Long
' on identifie le mois actif qui est égal à l'index de la feuille active => feuille 1 = janvier = index 1
Num_Feuille = ActiveSheet.Index
' sur la feuille système on vérifie si la mensualisation est déjà faite ou pas : Num_feuille = mois actif décalé d'une ligne vers le bas (+1)
' car dans le tableau de la feuille système il y a une entête, donc janvier est en ligne 2 (etc pour les autres mois)
If Sheets("Système").Cells(Num_Feuille + 1, 4).Value <> "inscrite" Then ' si ce n'est pas encore fait
' comme on met en place la mensualisation
' on enlève la mise à jour de l'écran, la surveillance événementielle, le calcul automatique
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlManual
' on enlève la protection sur les deux feuilles utilisées
Sheets(Num_Feuille).Unprotect
Sheets("Mensualisation").Unprotect
' numéro de ligne de la première donnée du tableau mensualisation
Ligne_Mensualisation = 4
' détermination de la première ligne vide de la feuille de suivi mensuel
Première_Ligne = Cells(Rows.Count, 2).End(xlUp).Row
' ligne de la feuille du mois en cours est égal à la première ligne vide
Ligne_Feuille_Mois_Actif = Première_Ligne
' début de la boucle Do Loop
Do
' on test la valeur de la cellule qui se trouve en colonne 2 de la feuille "Mensualisation"
' et en ligne 4 (donc Ligne_Mensualisation) de cette même feuille
' en faite s'il y a une date = il y a une mensualisation
If Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 2).Value <> "" Then ' si la cellule est non vide
' il y a bien une date mais il faut vérifier s'il y a bien une valeur en fonction du mois où l'on se trouve
' ce mois est égal à Num_Feuille et les colonnes mois sont après la colonne 7
' et on est toujours sur la ligne 4 (au premier tour de la boucle) c'est à dire Ligne_Mensualisation
If (Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 7 + Num_Feuille).Value <> "") Then ' si la cellule est non vide
' alors le décalage de la cellule active de la feuille du mois en cours est égal sa valeur + 1 donc au premier tour
' de la boucle à Décal_Ligne_Feuille_Mois_Actif + 1 = 0 + 1 = 1
Ligne_Feuille_Mois_Actif = Ligne_Feuille_Mois_Actif + 1 ' on incrémente de 1 le décalage pour le remplissage du suivi de compte du mois en cours de traitement
' ensuite il suffit de recopier les valeurs des colonnes de la feuille "Mensualisation" sur les colonnes correspondantes
' de la feuille du mois en cours
' écriture de la date : la date est en colonne 2 sur les deux feuilles
' en ligne Ligne_Feuille_Mois_Actif
' en ligne Ligne_Mensualisation pour la feuille "Mensualisation"
[B]Cells(Ligne_Feuille_Mois_Actif, 2).Value = Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 2).Value[/B]
' écriture de l'intitulé Catégorie
Cells(Ligne_Feuille_Mois_Actif, 3).Value = Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 3).Value
' écriture de l'intitulé Etablissement
Cells(Ligne_Feuille_Mois_Actif, 4).Value = Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 4).Value
' écriture de l'intitulé Qui/Quoi
Cells(Ligne_Feuille_Mois_Actif, 5).Value = Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 5).Value
' écriture de l'intitulé Type
Cells(Ligne_Feuille_Mois_Actif, 6).Value = Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 6).Value
' écriture de la valeur des débits crédits
' ici on teste la colonne 7 de la feuille "Mensualisation" afin de savoir si c'est un débit ou un crédit
If Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 7).Value = "Débit" Then ' si c'est un débit
Cells(Ligne_Feuille_Mois_Actif, 9).Value = Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 7 + Num_Feuille).Value
Else
Cells(Ligne_Feuille_Mois_Actif, 8).Value = Worksheets("Mensualisation").Cells(Ligne_Mensualisation, 7 + Num_Feuille).Value
End If
End If
Else ' si la cellule testée est = rien (si pas de date = plus de mensualisation à inscrire)
' on sort de la boucle
Exit Do
End If
' si on arrive à ces lignes c'est qu'il y avait une mensualisation à écrire, alors
' on passe, pour les tests de la prochaine boucle, la variable Ligne_Mensualisation à +1 pour tester la ligne suivante de la feuille "Mensualisation"
Ligne_Mensualisation = Ligne_Mensualisation + 1
Loop
' on est sortie de la boucle, on test si on a écrit une mensualité sur la feuille du mois en cours
' dans d'autres termes Première_Ligne <> Ligne_Feuille_Mois_Actif
If Ligne_Feuille_Mois_Actif <> Première_Ligne Then ' on vérifie qu'il y avait au moins une mensualisation pour mettre la valeur du mois en cour de traitement à "inscrite"
' on met le valeur de la feuille "Système" à "déjà effectuée" en face du mois concerné (Num_Feuille)
Sheets("Système").Cells(Num_Feuille + 1, 4).Value = "inscrite"
' on masque le bouton de mensualisation vu qu'il ne sert plus
'Call affiche_masque_bouton_mensuel
' recherche de la première ligne de rentrée de données
'Call tri_date(Sheets(ActiveSheet.Index).Name)
' la variable la_ligne_de_donnee est égal à la première ligne vide du suivi du mois en cours
la_ligne_de_donnee = Cells(Rows.Count, 2).End(xlUp).Row + 1
End If
' on remet la protection sur les deux feuilles utilisées
Sheets(Num_Feuille).Protect
Sheets("Mensualisation").Protect
' une tout fait on remet à jour les trois événement d'application en marche
' on remet la mise à jour de l'écran, la surveillance événementielle, le calcul automatique
Application.Calculation = xlAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub