J'espère que tout le monde va bien.Diviser le classeur en plusieurs classeurs basés sur deux colonnes
Je cherche de l'aide. Je cherche à automatiser un classeur qui sépare les données du fichier principal aux classeurs individuels basés sur la colonne H. Ce qui doit être fait en premier est que la colonne T doit être filtrée à 'Possédé' ou 'Impacté'. La colonne H doit ensuite être divisée en deux classeurs distincts. en fonction de ce qui peut être dans la colonne H. Sur chaque nouveau classeur créé, tout ce qui est sous la colonne H doit comporter deux onglets, un onglet pour 'Possédé' et un autre pour 'Impacté'. Cela devrait être sauvegardé alors quel que soit le nom de la cellule et la date. Le bit difficile supplémentaire se trouve dans la colonne H, dans chaque cellule, il peut y avoir des cellules individuelles A, B, C, D, E, F, mais il peut également y avoir des cellules avec plusieurs lettres. S'ils ont plusieurs lettres, chacun doit aller dans tous les classeurs mentionnés dans la cellule. Donc, par exemple s'il y a une cellule avec A, B, C, D, cela voudrait dire qu'il faudrait aller dans le classeur pour les classeurs individuels pour A, B, C et D.
J'ai joint l'image du fichier et j'ai le code ci-dessous que j'ai utilisé. Cela fonctionne, cependant en raison du problème ci-dessus avec les critères multiples dans les cellules, il divise les classeurs plus loin dans des classeurs individuels. Est-ce que quelqu'un sait si une liste déroulante peut être ajoutée où je peux sélectionner les critères de la colonne H et T, ou un autre travail autour s'il vous plaît. Je suis heureux d'essayer un autre code si nécessaire. Exemple de classeur joint également.
Option Explicit
Sub ParseItems()
'Based on selected column, data is filtered to individual workbooks
'workbooks are named for the value plus today's date
Dim LR As Long, Itm As Long, MyCount As Long, vCol As Long
Dim ws As Worksheet, MyArr As Variant, vTitles As String, SvPath As String
'Sheet with data in it
Set ws = Sheets("Master")
'Path to save files into, remember the final \
SvPath = "\\My Documents\New folder\"
'Range where titles are across top of data, as string, data MUST
'have titles in this row, edit to suit your titles locale
vTitles = "A1:V1"
'Choose column to evaluate from, column A = 1, B = 2, etc.
vCol = Application.InputBox("What column to split data by? " & vbLf _
& vbLf & "(A=1, B=2, C=3, etc)", "Which column?", 8, Type:=1)
If vCol = 0 Then Exit Sub
'Spot bottom row of data
LR = ws.Cells(ws.Rows.Count, vCol).End(xlUp).Row
'Speed up macro execution
Application.ScreenUpdating = False
'Get a temporary list of unique values from key column
ws.Columns(vCol).AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=ws.Range("HH1"), Unique:=True
'Sort the temporary list
ws.Columns("HH:HH").Sort Key1:=ws.Range("HH2"), Order1:=xlAscending,
Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom,
DataOption1:=xlSortNormal
'Put list into an array for looping (values cannot be the result of
formulas, must be constants)
MyArr = Application.WorksheetFunction.Transpose(ws.Range("HH2:HH" &
Rows.Count).SpecialCells(xlCellTypeConstants))
'clear temporary worksheet list
ws.Range("HH:HH").Clear
'Turn on the autofilter, one column only is all that is needed
ws.Range(vTitles).AutoFilter
'Loop through list one value at a time
For Itm = 1 To UBound(MyArr)
ws.Range(vTitles).AutoFilter Field:=vCol, Criteria1:=MyArr(Itm)
ws.Range("A1:A" & LR).EntireRow.Copy
Workbooks.Add
Range("A1").PasteSpecial xlPasteAll
Cells.Columns.AutoFit
MyCount = MyCount + Range("A" & Rows.Count).End(xlUp).Row - 1
ActiveWorkbook.SaveAs SvPath & MyArr(Itm) & Format(Date, " MM-DD-YY") &
".xlsx", 51 'use for Excel 2007+
ActiveWorkbook.Close False
ws.Range(vTitles).AutoFilter Field:=vCol
Next Itm
'Cleanup
ws.AutoFilterMode = False
MsgBox "Rows with data: " & (LR - 1) & vbLf & "Rows copied to other sheets:
" & MyCount & vbLf & "Hope they match!!"
Application.ScreenUpdating = True
End Sub
Toute aide serait appréciée. Merci d'avance
Que faites-vous moi un par "il divise les classeurs plus loin en cahiers individuels"? Pourriez-vous élaborer? Crée-t-il un classeur nommé "A, B, C" au lieu de simplement entrer dans le classeur A, le classeur B et le classeur C? – dwirony
Oui, c'est correct, il est en train de le créer dans les classeurs A, B, C au lieu d'aller dans le classeur A, le classeur b etc. – Tan3157
Vous devrez probablement utiliser 'Split()' et délimiter ces valeurs par ',' vous pouvez le casser. – dwirony