Macro VBA pour split une feuille de calcul en plusieurs classurs en fonction du nombre de lignes dans la feuille de calcul

Je désintégrais datatables de contact dans une feuille de calcul Excel afin de download en gros dans SalesForce. SalesForce, cependant, ne peut gérer que 100 fiches de travail. Je veux une macro qui peut split une feuille de travail de 700 lignes, par exemple, en sept classurs, chacun contenant 100 references de cellules.

J'ai fait des searchs sur la façon de procéder et je crois que c'est la seule reference sur StackOverflow pour aider à cette fin: Solution pour split la feuille de travail en plusieurs files avec vba / excel / c #

De plus, cette solution semble prometteuse, mais je ne comprends pas assez de VBA pour la saisir encore: https://superuser.com/questions/57157/can-i-split-a-semployer-dans-la-multiple-files-based -on-a-column-in-excel-2007

Cependant, la réponse sélectionnée ne répond pas vraiment à mes besoins. Quelqu'un peut-il me pointer dans la bonne direction / énumérer les commands pour ce faire?

Voici ce que j'ai jusqu'ici … Cela semble générer le bon nombre de classurs. Maintenant, j'ai juste besoin de savoir comment couper et coller 100 lignes dans chacune d'elles.

Sub Macro12() Dim wb As Workbook Dim p As Double Dim p_quotient As Double Application.ScreenUpdating = False p = ActiveSheet.UsedRange.Rows.Count p_quotient = p / 100 p_quotient = Application.WorksheetFunction.RoundUp(p_quotient, 0) For i = 1 To p_quotient Workbooks.Add Set wb = ActiveWorkbook ThisWorkbook.Activate wb.SaveAs ThisWorkbook.Path & "test" & i wb.Close Next i Application.ScreenUpdating = True Set wb = Nothing End Sub 

Voici le code que j'utilise maintenant:

 Sub Macro12() Dim wb As Workbook Dim ThisSheet As Worksheet Dim NumOfColumns As Integer Dim RangeToCopy As Range Dim WorkbookCounter As Integer Dim myDate As Ssortingng myDate = Format(Date, "yyyy.mm.dd") Set ThisSheet = ThisWorkbook.ActiveSheet NumOfColumns = ThisSheet.UsedRange.Columns.Count WorkbookCounter = 1 For p = 1 To ThisSheet.UsedRange.Rows.Count Step 101 Set wb = Workbooks.Add Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + 100, NumOfColumns)) RangeToCopy.Copy wb.Sheets(1).Range("A1") wb.SaveAs ThisWorkbook.Path & "\Salesforce Lead Conversion " & myDate & " Part " & WorkbookCounter & ".xls" wb.Close WorkbookCounter = WorkbookCounter + 1 Next p Application.ScreenUpdating = True Set wb = Nothing End Sub 

Selon votre logique, cela devrait le faire:

  Sub Macro12() Dim wb As Workbook Dim ThisSheet As Worksheet Dim NumOfColumns As Integer Dim RangeToCopy As Range Dim WorkbookCounter As Integer Application.ScreenUpdating = False Set ThisSheet = ThisWorkbook.ActiveSheet NumOfColumns = ThisSheet.UsedRange.Columns.Count WorkbookCounter = 1 For p = 1 To ThisSheet.UsedRange.Rows.Count Step 101 Set wb = Workbooks.Add Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + 100, NumOfColumns)) RangeToCopy.Copy wb.Sheets(1).Range("A1") wb.SaveAs ThisWorkbook.Path & "\test" & WorkbookCounter wb.Close WorkbookCounter = WorkbookCounter + 1 Next p Application.ScreenUpdating = True Set wb = Nothing End Sub 

Bien qu'il existe de nombreuses façons de le faire (certains sont même extrêmement faciles à utiliser avec VBA). Ce qui me semble être le plus simple qui ne nécessite pas de VBA serait de faire ce qui suit:

  • Ajouter une colonne "helper" supplémentaire
  • Dans cette colonne, mettez la formule suivante =FLOOR(ROW()/100,1)
  • Faites un filter sur datatables

Maintenant, filterz pour chaque nombre 0,1,2,3, …, 7 dans votre colonne d'assistance.

Chaque set aura les cent prochains loggings – Copiez et collez-les dans un nouveau classur et enregistrez-le au besoin. Aussi, à partir de ce point, il est TRÈS un cas sortingvial pour save une macro rapide pour faire cette dernière partie.

Bien que ce ne soit pas exactement ce que vous avez demandé, j'espère que la simplicité est utile.