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
| Sub Ventillation()
'Suppression des alertes et autres
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim Ws As Worksheet
For Each Ws In ActiveWorkbook.Worksheets
If Ws.Name = "Base1" Then
Ws.Delete
Exit For
End If
Next
For Each Ws In ActiveWorkbook.Worksheets
If Ws.Name = "Base2" Then
Ws.Delete
Exit For
End If
Next
'On copie la feuille "Base"
Sheets("Base").Select
Sheets("Base").Copy After:=Sheets(Sheets.Count)
Sheets("Base (2)").Select
Sheets("Base (2)").Name = "Base1"
Sheets("Base1").Select
'On supprime les modalités <> "oui" de la colonne "Courrier"
Sheets("Base1").Select
derniereLigne = ActiveSheet.UsedRange.Rows.Count
For r = derniereLigne To 5 Step -1
If Cells(r, 11) <> "oui" Then Rows(r).Delete
Next r
'On trie selon les Dept dans l'ordre décroissant
NbEnreg = Range("A5").End(xlDown).Row
Range(Cells(4, 1), Cells(NbEnreg, 11)).Select
Selection.Sort Key1:=Range("F5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
'On copie la feuille "Base1"
Sheets("Base1").Select
Sheets("Base1").Copy After:=Sheets(Sheets.Count)
Sheets("Base1 (2)").Select
Sheets("Base1 (2)").Name = "Base2"
Sheets("Base2").Select
'On récupère les zones sans doublons
Cells(4, 12).Value = "SansDoublons"
Cells(5, 12).Value = Cells(5, 6).Value
Cells(6, 12).Value = "=IF(RC[-6]<>R[-1]C[-6],VALUE(RC[-6]),"""")"
Cells(6, 12).Select
Selection.AutoFill Destination:=Range(Cells(6, 12), Cells(NbEnreg, 12)), Type:=xlFillDefault
ActiveWorkbook.Save
'On enlève les formules
Columns("L:L").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
'On supprime le cellules = 0 dans la colonne "SansDoublons" SUR 200 LIGNES
limite = 200
Dim cellule As Range
Range(Cells(6, 12), Cells(limite, 12)).Select
For Each cellule In Selection
If cellule = 0 Then cellule.Delete
Next cellule
'On ne garde que la plage des sans doublons
Rows("1:3").Delete
For r = limite To 5 Step -1
If Cells(r, 12) = "" Then Rows(r).Delete
Next r
Columns("A:K").Delete
'On enregistre les cellules non vide de la colonne "SansDoublons" dans un tableau
Dim plage As Range
Dim i As Integer
Dim Departement() As Integer
Set plage = Worksheets("Base2").Range(Cells(2, 1), Cells(limite, 1))
Sheets("Base1").Select
Range("A4:K4").Select
Selection.AutoFilter
' On vérifie l'existance du répertoire C:\TEST\Ventillation sinon on le crée
If Dir("C:\TEST", vbDirectory) = "" Then MkDir ("C:\TEST")
If Dir("C:\TEST\Ventillation", vbDirectory) = "" Then MkDir ("C:\TEST\Ventillation")
For Each cellule In plage
If cellule <> "" Then
i = i + 1
ReDim Preserve Departement(i)
Departement(i) = cellule.Value
Selection.AutoFilter Field:=6, Criteria1:=Departement(i)
Cells.Select
Cells.Copy
Workbooks.Add
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:="C:\TEST\Ventillation\Clients du " & Departement(i) & "_" & Year(Now()) & Month(Now()) & Day(Now()) & ".xls"
ActiveWorkbook.Close
Application.CutCopyMode = False
End If
Next cellule
Selection.AutoFilter
'On supprime les feuilles intermédiaires
For Each Ws In ActiveWorkbook.Worksheets
If Ws.Name = "Base1" Then
Ws.Delete
Exit For
End If
Next
For Each Ws In ActiveWorkbook.Worksheets
If Ws.Name = "Base2" Then
Ws.Delete
Exit For
End If
Next
' Réactivation des alertes et autres
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub |
Partager