Je dois créer de nouveaux onglets dans un classeur en fonction d'une plage de cellules dans un modèle de feuille de calcul. Je souhaite également supprimer les lignes de données qui ne correspondent pas au nom de l'onglet. Par exemple, dans le tableau ci-dessous, j'aurais un nouvel onglet nommé "2206 - 6" et seules les données associées resteraient, en gardant à l'esprit que cette plage de données changera chaque fois que la macro est utilisée.VBA Advanced AutoFilter + Créer de nouvelles feuilles en fonction de la plage
Avant:
Après:
Intervalle Nombre 2206-6 6304-5 4102 - 20
La table commence à la ligne 11, mais je dois conserver toutes les informations ci-dessus. J'ai un filtre avancé Macro qui se rapproche de ce que je veux, mais ce fait deux choses que je ne veux pas: créer des onglets vides et non conserver les informations ci-dessus la ligne 11.
Sub parse_data()
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
vcol = 1
Set ws = Sheets("Offshore Searches")
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = "A11:G20"
titlerow = ws.Range(title).Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
For i = 2 To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And _
Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
Sheets(myarr(i) & "").Columns.AutoFit
Next
ws.AutoFilterMode = False
ws.Activate
End Sub
J'ai aussi une macro qui crée onglets basés sur une gamme sans le filtre avancé, de sorte que chaque onglet semble identique (seulement les changements de nom de l'onglet)
Sub CreateWorkSheetByRange()
Dim WorkRng As Range
Dim ws As Worksheet
Dim arr As Variant
On Error Resume Next
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
arr = WorkRng.Value
Sheets("Offshore Searches").Select
Cells.Select
Selection.Copy
Application.ScreenUpdating = False
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
Set ws = Worksheets.Add(after:=Application.ActiveSheet)
ws.Name = arr(i, j)
ActiveSheet.Paste
Range("A1").Select
Next
Next
Application.ScreenUpdating = True
End Sub
Est-il possible à la fois créer des onglets sur la base d'une gamme tout en utilisant un filtre avancé?
Pouvez-vous également afficher un onglet? (un résultat attendu) –
Je viens de mettre à jour le post avec l'onglet "Résultats" et voici le lien: https://i.stack.imgur.com/xY4uZ.png – Aimaria
ok, je mettrai à jour votre question pour inclure les deux images - nous préférons toutes les images incluses dans la question parce que certains utilisateurs n'ont pas accès à d'autres sites –