OK, Zon, je ne sais si c'est à moi que tu causes, mais voilà ma Sub.
Une question subsidiaire avant d'envoyer : l'utilisatrice est un peu perturbée par les "machins qui clignotent", cad la zone sélectionnée dans la feuille. J'ai essayé "Unselect" mais ça n'existe pas. Y a-t-il aut'chose ?
Voici mon code
' Sauvegarde d'un bulletin de paye
' dans la feuille de l'année correspondante
Sub Sauve_bulletin()
Application.ScreenUpdating = False
' Mois, Année de paye et nom du salarié
Dim Mois, Ligne, Col, NumBulletin, N As Integer
Dim NomMois, An, Personne As String
Dim Ajout As Boolean
With Sheets("bulletins")
Mois = Range("N6").Value
NomMois = Range("M6").Value
An = CStr(Range("M5").Value)
Personne = Range("M8").Value
' Copie du bulletin de paye (partie utile)
Range("C8:H51").Select
Selection.Copy
End With
' Afficher et déprotéger la feuille correspondant à l'année
Sheets(An).Visible = True
' Déterminer où coller le bulletin
' Chercher l'onglet correspondant à l'année
N = Numer
nglet(An)
' Si l'onglet n'a pas été trouvé, on le crée à la suite de l'année précédente
If (N > Sheets.Count) Then
Nouvel_An_Archives (An)
Ligne = 0
Col = 0
Ajout = True
NumBulletin = 0
' Si l'onglet est trouvé on cherche où y coller le bulletin
Else:
' On commence par l'afficher
Sheets(An).Visible = True
Ajout = True
Ligne = (Mois - 1) * 45
Sheets(N).Select
' On cherche s'il y a déjà des bulletins
' c'est indiqué par un n° sous le nom du mois
If Range("B5").Offset(Ligne, 0).Value = "" Then
NumBulletin = 0
Else: NumBulletin = Range("B5").Offset(Ligne, 0).Value
End If
' On cherche d'abord si on n'a pas déjà un bulletin de cette personne
If NumBulletin > 0 Then
N = Cherche_Bulletin(Personne, NumBulletin, "D6", Ligne)
If N < NumBulletin Then
Ajout = False
End If
Col = N * 7
Else: Col = 0
End If
End If
' On colle maintenant notre bulletin
Range("C3").Offset(Ligne, Col).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
If Ajout = True Then
NumBulletin = NumBulletin + 1
Range("B5").Offset(Ligne, 0).Value = NumBulletin
End If
' On contrôle que le bulletin est bien là
N = Cherche_Bulletin(Personne, NumBulletin, "D6", Ligne)
If N = NumBulletin Then
MsgBox ("Le bulletin de salaire de " & Personne & " n'a pu être sauvegardé. Veuillez en aviser le responsable du programme")
End If
' On masque l'onglet
Sheets(An).Visible = False
' Et on revient à l'onglet "bulletins"
Sheets("bulletins").Select
Range("L27").Select
End Sub