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
| Sub CutData()
Dim MotCle
Dim a As Byte
Dim i As Byte
Dim c As Range
Dim F As String
Dim Ligne As Long
Dim Nom As String
Dim d As Range
Dim n As Byte
Const lideb = 1
Const lifin = 30
Dim plage As Range
Dim li As Long
'On supprime toutes données dans la feuille MonthsExtract
Worksheets("MonthsExtract").Range("A1:A65536").ClearContents
'On supprime la sheet1 (2) qui est la copie des données d'origines
On Error Resume Next
Application.DisplayAlerts = False
Sheets("sheet1 (2)").Delete
Application.DisplayAlerts = True
'On copie la feuille de données
a = Sheets.Count
Sheets("sheet1").Select
Sheets("sheet1").Copy After:=Sheets(a)
'On copie les mois existants en supprimant les doublons dans un onglet MonthsExtract
Range("A11:A" & Range("A65536").End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("MonthsExtract").Range("A1"), Unique:=True
With ThisWorkbook.Worksheets("MonthsExtract").Range("A1")
If .Value = "(%)" Then .EntireRow.Delete
End With
'On crée nouvelle feuille pour chaque mois existant
With ActiveSheet.Name = Sheets("MonthsExtract")
For li = 1 To Range("A" & Rows.Count).End(xlUp).Row 'JE VOUDRAIS QUE LA BOUCLE S'ARRETE QUAND LE CODE RENCONTRE UNE CELLULE EN A VIDE
Sheets.Add
ActiveSheet.Name = Sheets("MonthsExtract").Range("A" & li)
plage.Copy .Range("A" & li)
Next li
End With
Application.DisplayAlerts = False 'deactive les messages autorisation d'effacer
For Each Sh In Sheets
'On supprime les feuilles qui commencent par Feuil
If Left(Sh.Name, 5) = "Feuil" Then Sh.Delete
Next
Application.DisplayAlerts = True 'reactive les messages autorisation d'effacer
'On copie les entetes
' For Each Sh In Worksheets
Sheets("sheet1").Range("A7:Z11").Copy
Sheets("APR 2018").Range("A1").PasteSpecial Paste:=xlPasteFormulas 'JE VOUDRAIS COPIER SUR CHAQUE FEUILLE CREEE PEU IMPORTE SON NOM (EN GROS CHAQUE FEUILLE QUI CORRESPOND A UN MOIS), JE NE SAIS PAS SI ON PEUT UTILISER LA LISTE MONTHSEXTRACT ?
Sheets("APR 2018").Range("A1").PasteSpecial Paste:=xlPasteFormats
'On définit les mots clés
MotCle = Array("MAY 17", "JUN 17", "JUL 17", "AUG 17", "SEP 17", "OCT 17", "NOV 17", "DEC 17", "JAN 18", "FEB 18", "MAR 18", "APR 18", "MAY 18", "JUN 18", "JUL 18", "AUG 18", "SEP 18", "OCT 18", "NOV 18", "DEC 18")
'On effectue la recherche de chaque mot clé dans la colonne A de la sheet1
For i = 0 To UBound(MotCle)
Do
Set c = Worksheets("sheet1 (2)").Columns(1).Find(MotCle(i), LookIn:=xlValues, lookat:=xlPart)
'Si le mot clé est trouvé
If Not c Is Nothing Then
'On définit le nom de la feuille où sera effectuée la copie
F = "sheet" & (i + 2) 'JE VOUDRAIS COPIER LES DONNEES DANS LES ONGLETS PRECEDEMMENT CREES EN FONCTION DU MOT CLE MAIS JE NE SAIS PAS COMMENT LES APPELER ICI
With Worksheets(F)
'On définit la ligne où sera effectué le collage
Ligne = .Range("A" & Rows.Count).End(xlUp).Row + 1
'On effectue le copier / coller
c.EntireRow.Copy .Range("A" & Ligne)
'On supprime la ligne dans la sheet1
c.EntireRow.Delete
End With
End If
Loop While Not c Is Nothing
Next i
End Sub |
Partager