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 :

Macro pour création d'onglets et copie - saturation mémoire - [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2019
    Messages : 2
    Par défaut Macro pour création d'onglets et copie - saturation mémoire -
    Bonjour à tous,
    Je me vois dans l'obligation de réaliser une macro pour réaliser la chose suivante :
    - selon un critère de rupture, créer une feuille (nommé comme ce critère, ici un nom de commune)
    - copier les données de cette commune dans ce nouvel onglet

    J'ai adapté des choses trouvées ici et là, car le VBA, c'est loin !!!!
    Les données sont dans la première feuille, le critère se situe en l'espèce dans la colonne 3.
    Ma macro marche nickel, à un détail près.
    Assez vite, la RAM utilisée augmente en flèche et, bien sûr, j'ai un message mémoire insuffisante et ça plante...
    J'ai essayé de vider le presse papier, rien n'y fait.
    Pour info le fichier fait environ 150 000 lignes sur 20 colonnes.
    Il y a environ 485 valeurs différentes pour le critère (je sais ça va faire beaucoup de feuilles , mais c'est ce que dois faire).
    Mais ça coince bien avant.
    J'utilise une version 32 bits d'excel 2016.
    Voilà ma macro :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub decoup()
     
    Dim lr As Long 'étendue des données
    Dim ws As Worksheet
    Dim vcol As Long
    Dim i As Long
    Dim icol As Long
    Dim myarr As Variant 'paramètre de rupture
    Dim title As String 'étendue titres colonnes
    Dim titlerow As Long 'ligne titres colonnes
    vcol = 3 'colonne du paramètre de rupture
    Set ws = Sheets("données_source") 'feuille des données
     
    lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
    title = "A1:T1"
    titlerow = ws.Range(title).Cells(1).Row
    icol = ws.Columns.Count
    ws.Cells(1, icol) = "Unique"
    For i = 2 To lr
        On Error Resume Next
        If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
            ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
        End If
    Next
    myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
    ws.Columns(icol).Clear
     
    For i = 2 To UBound(myarr)
        ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
        If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
            Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
        Else
            Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
        End If
        ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
        Sheets(myarr(i) & "").Columns.AutoFit
    Next
    ws.AutoFilterMode = False
    ws.Activate
    MsgBox ("Fin du découpage")
    End Sub
    Je sèche là....
    Un grand merci d'avance pour vos réponses.

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Ark, et bienvenu sur ce Forum,

    A toute fin utile, tu peux consulter cette modeste contribution Alimenter des feuilles depuis une synthèse.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2019
    Messages : 2
    Par défaut
    Merci à toi, cela m'a été fort utile.

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Tant mieux.
    Tu peux aborder les notions qui y sont reportées à travers beaucoup de sources sur ce Forum.
    Notamment celles que je mentionne au post #20 de cette discussion.

    Quant à celle-ci, pense à la placer en mode "Résolue".

    A bientôt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Script de macro pour création d'onglet à chaque changement d'informations
    Par STAN60 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/12/2016, 10h39
  2. Réponses: 4
    Dernier message: 05/09/2014, 09h52
  3. Réponses: 1
    Dernier message: 27/10/2012, 19h59
  4. Macro pour imprimer un onglet different suivant une date
    Par djoumusic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/11/2009, 20h33
  5. Erreur d'éxécution d'une macro pour renommer un onglet
    Par cuterate dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/10/2009, 11h38

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