IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Conservation mise en page + nombre limite de ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 50
    Par défaut Conservation mise en page + nombre limite de ligne
    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

  2. #2
    Membre éclairé Avatar de Efgé2
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Par défaut
    Bonjour aude_alti
    Peut être en soulageant la mémoire:
    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
    Sub Etape_1_Creation_Onglets()
    Dim Ws As Worksheet, contenu As String
    Dim lig As Long, derlig As Long
    Application.ScreenUpdating = False
    With Sheets("Sheet n°1") 'feuille ou sont les données
        derlig = .Range("A65536").End(xlUp).Row
        For lig = 1 To derlig
            contenu = .Cells(lig, 1).Value
            On Error Resume Next
            Set Ws = Sheets(contenu)
            If Err Then
                Err.Clear
                Sheets.Add(After:=Sheets(Sheets.Count)).Name = contenu
                Set Ws = Sheets(contenu)
                Worksheets("PATIENT").Range("A2:E2").Copy Ws.Range("A1:E1")
            End If
            .Range(.Cells(lig, 1), .Cells(lig, 5)).Copy Ws.Range("A65536").End(3)(2)
            Set Ws = Nothing
        Next lig
        .Activate
    End With
    Application.ScreenUpdating = True
    End Sub
    Peut être.....

    Cordialement

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 50
    Par défaut
    Merci Efgé2, je vais tester ça demaim.

    Une idée pour le point 2/? Merci.

  4. #4
    Membre éclairé Avatar de Efgé2
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Par défaut
    Bonjour aude_alti, le fil
    Je ne comprend pas ce qui t'inquiète concernant le nombre de lignes disponibles.
    Sous 2003 tu as 65 536 lignes, à partir de 2007 tu as 1 048 576 lignes, c'est comme ça....
    Pour la taille mémoire insuffisante :
    Il me semble que 300 onglets dans un classeur ne puisse qu'être source de problèmes.

    Si tu désire créer quand même un tel nombre d'onglets, il faudra, je pense, passer par un classeur "Modèle" qui comportera uniquement la feuille à copier et que nous pourrons importer (cette méthode, bien que plus longue se révèle souvent efficace).

    A te relire

    Cordialement

Discussions similaires

  1. afficher un nombre limité par page
    Par chamardal dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 27/02/2009, 10h40
  2. Longueur de page (nombre de ligne)
    Par Ivanild dans le forum Excel
    Réponses: 3
    Dernier message: 09/04/2008, 23h06
  3. Conserver la mise en page lors du copy/colle
    Par swissmade dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2007, 05h09
  4. [MySQL] retour à la ligne et mise en page dans textarea
    Par Tee shot dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/03/2007, 22h41
  5. Nombre limite de formulaire par page html/php
    Par asmouma dans le forum Langage
    Réponses: 3
    Dernier message: 06/02/2007, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo