Sub Extraire()
Dim r, x, y, c, i As Integer
Dim An As String
Dim ShC, ShR As Worksheet
Dim Test As Boolean
Rem definit le tableau des lignes comptables de la feuille "Comptes"
Const Lig1C As Integer = 6 ' n° de la 1ère ligne comptable
Const Col1C As Integer = 2 ' n° de la 1ère colonne comptable
Const NbCol As Integer = 10 ' nombre de colonnes comptables
Const ColDate As Integer = 4 ' n° de la colonne des dates d'opération
Rem définit le tableau des extractions dans la feuille "Récap"
Const Lig1R As Integer = 7 ' n° de la 1ère ligne des extractions
Const Col1R As Integer = 2 ' n° de la 1ère colonne des extractions
Rem définit la cellule devant recevoir comme titre l'année de l'extraction
Const CelTitre = "D5"
Rem définit les feuilles
Set ShC = ThisWorkbook.Sheets("Comptes")
Set ShR = ThisWorkbook.Sheets("Récap")
Rem demande l'année à extraire
reprise:
An = InputBox("Saisissez l'année à extraire en 4 chiffres", "EXTRACTION")
If An = "" Then
Exit Sub
ElseIf Not IsNumeric(An) Then
MsgBox "Saissez un nombre valide pour l'année à extraire !", 64, "EXTRACTION"
GoTo reprise
ElseIf Len(An) <> 4 Then
MsgBox "Saissez un nombre à QUATRE chiffres pour l'année à extraire !", 64, "EXTRACTION"
GoTo reprise
End If
Rem remplit la cellule devant recevoir l'année de l'extraction
ShR.Range(CelTitre) = "Année" & An
Rem Efface l'ancienne extraction (les données mais pas les mises en formes de la feuille Récap)
ShR.Rows(Lig1R & ":" & 65536).ClearContents
Rem Extrait les lignes voulues
r = Lig1C - 1
x = Lig1R - 1
Do
r = r + 1
' vérifie qu'il y a au moins une cellule non vide dans la ligne
Test = False
For c = Col1C To Col1C + NbCol - 1
If ShC.Cells(r, c) <> "" Then
Test = True
Exit For
End If
Next
' quitte la boucle Do s'il n'y a aucune cellule non vide
If Test = False Then Exit Do
' vérifie la présence d'une date dans la colonne des dates
If IsDate(ShC.Cells(r, ColDate)) Then
If Year(ShC.Cells(r, ColDate)) = An Then
' copie la ligne si elle correspond à l'année demandée
x = x + 1
y = Col1R - 1
For c = Col1C To Col1C + NbCol - 1
y = y + 1
ShR.Cells(x, y) = ShC.Cells(r, c)
Next
End If
End If
Loop
Rem Finale
MsgBox "Il y a " & x - Lig1C & " ligne(s) comptable(s) pour l'année " & An, 64, "EXTRACTION"
End Sub