Bonjour,

Je suis sous Excel 2007. J’ai une macro qui me génère X onglets excel à partir d'une feuille excel (en fait la macro 'split' la feuille Sheet n°1 en autant d'onglets excel qu'il y a termes différents dans la colonne B de Sheet n°1).

1/ La macro fonctionne bien mais je voudrai que la mise en page de Sheet n°1 soit conservée sur tous les onglets créés.

J’ai vu le post de Vadorblanc (http://www.developpez.net/forums/d10...onglets-crees/) sur la mise en page, mais je ne parviens pas à voir dans le code ce qui concerne la mise en page et donc ce que je devrai adapter à mon code.
Pouvez-vous m’aider ? Merci !

2/ J’ai m’interroge également sur le nombre maximum de lignes sur Sheet n°1 que je peux avoir et/ou nombre maximum d’onglets à générer sans faire beugger la macro.
Pour les lignes, j’ai lu que la limite est de 65536 lignes et que le nombre d’onglets générés dépends de la taille de la mémoire disponible.

J’ai testé avec 65 000 lignes (qui doivent me créer 300 onglets) et ça plante. Même chose pour 30 000 lignes. A partir de 20 000 lignes, la macro s’exécute bien en moins d’une minute.
Une idée de pourquoi ça plante ?

Lorsque l’on dit que le nombre d’onglets générés dépends de la taille de la mémoire disponible, savez-vous de combien est cette taille pour un fichier excel 2007 ?

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub Etape_1_Creation_Onglets()
Dim Ws As Worksheet
Dim trouve As Boolean
Dim contenu As String
Dim lig, derlig As Integer
With Sheets("Sheet n°1") 'feuille ou sont les données
derlig = .Range("A65536").End(xlUp).Row 'A = colonne contenant le séparateur d'onglet
For lig = 1 To derlig
contenu = .Cells(lig, 1).Value '1 = 1ère col cf A ci dessus
For Each Ws In ThisWorkbook.Worksheets
trouve = False
        If StrComp(Ws.Name, contenu, vbTextCompare) = 0 Then
            trouve = True
            Exit For
        End If
Next Ws
If trouve = True Then
        .Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0)
         Worksheets("PATIENT").Range("A2:E2").Copy Ws.Range("A1:E1")
    Else
        Sheets.Add
        ActiveSheet.Name = contenu
        .Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0)
End If
Next lig
End With
End Sub
Encore une fois merci pour votre aide !

aude_alti