abertaud | Bonjour,
Je suis conscient que la même chose pourrait être faite en tableau croisé mais les personnes qui vont utiliser les données ne savent pas utiliser ce genre d'outil. C'est pourquoi je me suis tourné vers une solution "automatique".
Si jamais ça intéresse des personnes voilà le code que j'ai obtenu aujourd'hui ainsi que les deux points sur lesquels je bute actuellement.
• Le code crée différentes feuilles en fonction des dates qui sont présentes en colonne A de la feuille sheet1 mais je souhaiterais copier sur chaque nouvelle feuille créée un entête présent sur la feuille sheet1. En me basant sur le nom de la feuille en question j'arrive à copier l'entête mais si demain je rajoute une date et donc une feuille nouvelle mon programme ne sera pas complet et certaines feuilles n'auront pas d'entête.
• Le code copie les données en fonction du mot clé (mois) dans des feuilles nouvelles mais je voudrais les copier dans les feuilles déjà créés auparavant. Par exemple si le mot clé trouvé est JAN 18 je voudrais que le code ouvre la feuille JAN 2018 déjà existante et copie la ligne entière à cet endroit là.
Bonne journée à tous.
Code :
- 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
|
|