Programme en VBA pour copier le contenu d'une liste en parts

Bonsoir,

J'aimerais avoir une solution en vba qui copie une liste dans une 1er feuille qui s'appelle Master en colonne A et me colle ces donnees en part egale dans 100 feuilles (User 001, User 002 ect..) et pour la feuille User 100 copie les donnees restantes, donc chaque feuille User XXX contiendra une partie des donnees mais pas toute la liste.

Edit : J'aimerais aussi que la solution me copie colle le header de la feuille master et colle ce header sur toutes les feuilles User XXX avant d'y inserer ensuite les donnees fractionnees.

Merci

Amelie

bonjour,

Const Nsh = 100     'nombre de feuilles

Sub Amelie()
     Dim c, N, sh As Worksheet, Nom
     With Sheets("Master")
          Set c = .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp))
     End With
     N = (c.Rows.Count - 1) \ (Nsh - 1)   'nombre d'éléments par feuille

     For i = 1 To Nsh     'toutes les feuilles "User_XX"
          Nom = "User_" & Format(i, "00")

          On Error Resume Next
          Set sh = Nothing
          Set sh = Sheets(Nom)
          On Error GoTo 0
          If sh Is Nothing Then
               Set sh = Sheets.Add(after:=Sheets(Sheets.Count))
               sh.Name = Nom
          End If

          With sh
               .Range("A1").Value = c.Cells(1).Value     'header
               Select Case i
                    Case Is < Nsh: .Range("A2").Resize(N).Value = c.Cells(2 + N * (i - 1)).Resize(N).Value     'donnees fractionnees.
                    Case Nsh:
                         reste = (c.Rows.Count - 1) Mod (Nsh - 1)
                         If reste > 0 Then .Range("A2").Resize(reste).Value = c.Cells(2 + N * (i - 1)).Resize(reste).Value
               End Select
          End With
     Next
End Sub
11amelie.xlsb (24.87 Ko)

Merci encore BsAlv, ce programme fonctionne tres bien et est performant mais je souhaiterais y avoir 3 modifications si possible.

1. Rectification par rapport a ce que je demandais a la base : Je souhaiterais que toute la ligne soit transferee pour le header par seulement la valeur en A1 et meme chose pour les donnees qui sont en dessous A2, A3 ect.., je voudrais les lignes entieres, je n'avais pas ete assez clair sur ce point, je m'en excuse.
Une copie/colle de toutes les lignes avec le header

image image

2. Je souhaiterais aussi que les donnees soient reparties en parts egales dans les feuilles User XXX, c'est a dire que si j'ai 10 000 lignes je voudrais que chaque feuilles aient 100 lignes

3. Serait-ils possible que le nom des feuilles soient User XXX avec un espace et non User_XXX ?

Merci beaucoup

bonjour,

1. si vous voulez copier les formules, c'est avec "'c.Cells(2 + N * (i - 1)).Resize(N).EntireRow.Copy .Range("A2") 'donnees fractionnees pour toutes les feuilles = copie des formules" au lieu des 2 lignes suivantes

2. il n'y a pas de problème si les lignes sont un multiple de 100, si cela n'est pas les cas ....

3. pas de problème

14amelie.xlsb (30.14 Ko)

Oui, par rapport au point numero 2, si ce n'est un nombre de ligne qui est un multiple de 10 alors par exemple utiliser la page User 001 ou User 100 et y ajouter les lignes restantes comme ca aucunes lignes n'est perdues :)

La seconde version transfere bien les lignes entieres mais elle ne l'a fait que pour 10 User et non pour 100 ? Et aussi le nom des User c'est User XXX et non User XX

Mais sinon c'est la perfection :) Merci

J'ai finalement compris comment entrer dans le code et faire les petites modifs pour le nombre de page et le nom des feuilles. 1000 merci BsAlv

nouvelle version,

shortkey CTRL+SHIFT+A = macro "Amelie" et CTRL+SHIFT+D = macro "Delete_User_Sheets"

Maintenant, par exemple 191 lignes : les 91 premières feuilles = 2 lignes & les 9 dernières = 1 ligne = 91*2 + 9*1 = 191

16amelie.xlsb (71.33 Ko)

EDIT : je n'avais pas encore lu votre dernier commentaire,

Rechercher des sujets similaires à "programme vba copier contenu liste parts"