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 :
Encore une fois merci pour votre aide !
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
aude_alti
Partager