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 :

Ligne en double transpose et regroupe ligne vers colonne [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut Ligne en double transpose et regroupe ligne vers colonne
    Bonjour à tous,

    Je souhaite lorsque j'ai un doublon sur une ligne la supprimer et transposer la valeur en double sur une même ligne.

    J'ai récupéré ce code qui fonctionne bien. Mais j'ai un problème de mémoire insuffisante lorsque je lance la macro sur 63 000 lignes.

    Pourtant avec la dimension des tableaux je pensais que cela aller m’affranchir de cette contrainte.

    Si vous avez une idée plus efficace?

    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
    42
    43
    44
    45
    46
     
    Sub Regroupe()
    Dim J As Long
    Dim I As Integer
    Dim K As Long
    Dim Indice As Long
    Dim Tablo
    Dim Nb As Integer
     
      Application.ScreenUpdating = False
      ReDim Tablo(1 To Range("A" & Rows.Count).End(xlUp).Row - 5, 1 To 2)
      Tablo(1, 1) = Range("A5")
      Tablo(1, 2) = Range("B5")
      Nb = 1
      For J = 6 To Range("A" & Rows.Count).End(xlUp).Row
        For K = 1 To UBound(Tablo)
          If Range("A" & J) = Tablo(K, 1) Then
            For I = 1 To UBound(Tablo, 2)
              If Tablo(K, I) = "" Then
                Tablo(K, I) = Range("B" & J)
                Exit For
              End If
            Next I
            If I > UBound(Tablo, 2) Then
              ReDim Preserve Tablo(1 To UBound(Tablo), 1 To UBound(Tablo, 2) + 1)
              Tablo(K, UBound(Tablo, 2)) = Range("B" & J)
            End If
            Exit For
          ElseIf Tablo(K, 1) = "" Then
            Nb = Nb + 1
            Tablo(K, 1) = Range("A" & J)
            Tablo(K, 2) = Range("B" & J)
            Exit For
          End If
        Next K
      Next J
      With Sheets("Résultat")
        .Cells.ClearContents
        .Range("A2").Resize(Nb, UBound(Tablo, 2)) = Tablo
        .Range("A1") = "Produit"
        .Range("B1") = "Col 1"
        .Range("B1").AutoFill .Range("B1").Resize(, UBound(Tablo, 2) - 1), xlFillSeries
        .Range(.Range("A1"), .Cells(1, UBound(Tablo, 2))).EntireColumn.AutoFit
        .Select
      End With
    End Sub
    Merci par avance.

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Pour info, j'ai fait d'autres test à partir de 35000 lignes j'ai mémoire insuffisante.

    Etrange

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je ne sais pas si c'est la grosse fatigue qui m'habite ou un petit soucis en regardant tes lignes 11,15 et 16

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ReDim Tablo(1 To Range("A" & Rows.Count).End(xlUp).Row - 5, 1 To 2)
        For J = 6 To Range("A" & Rows.Count).End(xlUp).Row
            For K = 1 To UBound(Tablo)
    ça me paraître être une quantité phénoménale de tour de boucle cette imbrication ? C'est voulu ?
    Trop fatigué pour me pencher sur le besoin auquel répond cette procédure, c'est l'heure du dodo on dirait

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Salut,

    Merci d'avoir répondu à mon message.

    Ben oui c'est voulu mais en effet cela fait trop de boucle et le programme indique que la mémoire n'est pas suffisante.

    J'ai cherché d'autres code pour réaliser le besoin et on passe par des boucles imbriquées aussi.

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    peux-tu mettre une copie écran montrant un exemple d'agencement de ta feuille initiale ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Pas de problémes;

    Voila deux colonnes, ou je dois pour chaque doublon creer une ligne unique avec en colonnes les doublons.

    Nom : Capture ligne colonne vba double boucle.PNG
Affichages : 735
Taille : 27,2 Ko

    ça fonctionne bien sauf avec un grand nombre de ligne > 20 000

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/09/2016, 17h03
  2. [XL-2010] Regrouper ligne en conservant visible la 1ère ligne
    Par Amso13 dans le forum Excel
    Réponses: 8
    Dernier message: 17/09/2015, 13h13
  3. table regroupant les lignes en doubles
    Par jamelie dans le forum SAS Base
    Réponses: 7
    Dernier message: 10/04/2008, 14h46
  4. Supprimer ligne en double
    Par azman0101 dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/06/2004, 17h53
  5. Lignes en double dans le résultat d'une jointure
    Par ledevelopeur dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 18h10

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