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 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 10.08.2010 by fd151
'
' Keyboard Shortcut: Ctrl+a
'
Cells.Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("C1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
Racine = InputBox("Indiquer la racine à traiter (sanstiret) ", "RACINE")
DatesDebutFin = InputBox("Indiquer les années à considérer ", "ANNEES")
If DatesDebutFin = "" Then
DDebut = 1900
DFin = 2100
Else
DDebut = Int(Left(DatesDebutFin, 4))
DFin = Int(Right(DatesDebutFin, 4))
End If
Sheets("Travail").Select
'Elimination des lignes inutiles
Cpt = 0
Range("A1").Select
Do Until ActiveCell.Offset(1, 0).Value = "" And ActiveCell.Offset(2, 0).Value = ""
ZoneRacine = (Mid(ActiveCell.Value, 12, 3) & Mid(ActiveCell.Value, 16, 3))
If ZoneRacine = Racine Then
ZoneAnnee = Year(ActiveCell.Offset(0, 2))
If (ZoneAnnee >= DDebut And ZoneAnnee <= DFin) Then
ActiveCell.Offset(0, 13).FormulaR1C1 = "= YEAR(RC[-11])"
ActiveCell.Offset(1, 0).Select
Cpt = Cpt + 1
Else
ActiveCell.EntireRow.Delete
End If
Else
ActiveCell.EntireRow.Delete
End If
Loop
ActiveCell.EntireRow.Delete
'sortie avec message si rien dans le fichier
If Cpt = 0 Then
MsgBox "pas de racine "
Exit Sub
End If
'ajout dune ligne par annéé
Range("a1").Select
Do While ActiveCell.Value <> ""
AnneeEnCours = Year(ActiveCell.Offset(0, 2).Value)
If Year(ActiveCell.Offset(0, 2).Value) = Year(ActiveCell.Offset(1, 2).Value) Then
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Offset(1, 0).Select
Selection.EntireRow.Insert
ActiveCell.Offset(1, 0).Select
End If
Loop
Call MaFonction
End Sub
Public Function MaFonction()
Dim i As Long
Dim PremiereLigne As Long
Dim DerniereLigne As Long
Dim ShS As Worksheet 'Feuille source
Dim ShD As Worksheet 'Feuille Destination
Dim AnneeEnCours As Integer
Dim TitreClasseurAnnée As String
Dim FinFichier As Boolean
'****************************
'Initialisation des variables
'****************************
TitreClasseurAnnée = "Mes données de "
'Attribution de la feuille source à la variable ShS
Set ShS = ThisWorkbook.Sheets("Travail")
i = 2
PremiereLigne = i
DerniereLigne = i
FinFichier = False
'Récupération de l'éventuelle première année à considérer
If IsNumeric(Cells(i, 13)) Then
AnneeEnCours = Cells(i, 13)
End If
Do While Cells(i, 13) <> "" Or (i > 2 And Cells(i, 13) = "") And FinFichier = False
'Si c'est la fin du fichier => permet d'enregistrer la dernière année puis stop la boucle
If i > 2 And Cells(i, 13) = "" Then
FinFichier = True
End If
'Si Nouvelle Année à considérer
If Cells(i, 13) <> AnneeEnCours Then
DerniereLigne = i - 1
'Création d'un classeur avec 1 seule feuille
Set ShD = Workbooks.Add(xlWBATWorksheet).Sheets(1)
'******
'Titres
'******
'Copie des titres
Application.CutCopyMode = False
ShS.Activate
ShS.Range(Cells(1, 1), Cells(1, 13)).Copy
'Collage des titres
ShD.Activate
ShD.Cells(1, 1).PasteSpecial
'*******
'Données
'*******
'Copie des données
Application.CutCopyMode = False
ShS.Activate
ShS.Range(Cells(PremiereLigne, 1), Cells(DerniereLigne, 13)).Copy
'Collage des données
ShD.Activate
ShD.Cells(2, 1).PasteSpecial
'Nom de la feuille = Année considérée
ShD.Name = AnneeEnCours
'Fermeture et sauvegarde du classeur avec le titre du classeur
ShD.Parent.Close True, TitreClasseurAnnée & AnneeEnCours
'Nouvelle année à considérer
AnneeEnCours = Cells(i, 13)
'Nouveau début de sélection
PremiereLigne = i
End If
i = i + 1
Loop
'*********************
'Message d'information
'*********************
MsgBox "Traitement terminé avec succès", vbOKOnly + vbInformation, "Fin de traitement"
End Function |
Partager