Regroupement

Bonsoir a tous

Mes compétence Etant un peu limiter sur excel je sollicite votre aide

voila j'ai 20 colonne R et 20 colonne X composer de 2 valeur R qui est un indice de 0 a 20 et X est une référence qui va de 1 a 15000

je souhaiterai les regrouper par indice de 0 a 20 comment procéder? je joint le model et par avance merci a toute les bonnes volontés

20model.xlsx (45.51 Ko)

Bonsoir,

Je pense que le plus simple est de ne faire que 2 colonnes, donc couper/coller vos 19 colonnes sous la 1ère. Puis sélectionner A1 et B1 : Accueil/Edition/Trier et filtrer/Filtrer. Clic sur la flèche à côté de B1 : Trier du plus petit au plus grand. Clic sur la flèche à côté de A1 : Trier du plus petit au plus grand.

Vous aurez ainsi toutes vos valeurs regroupées. Après libre à vous niveau présentation de reformer des groupes par indice en faisant couper/coller comme au début.

Bonne soirée!

Cindy

bonsoir

merci de votre réactivité mais je souhaiterai 20 macro comme sur le model en BI pour Toute les ref a 0 en BJ pour toute les ref a1 ...etc

car chaque colonnes contient 15000 ref!

voila j'espere que ce petit éclaircissement vous aidera a m'aider Bonne nuit

Bonjour MARHOU, Cindy,

je te retourne ton fichier modifié :

16model.xlsm (56.44 Ko)

Ctrl e ➯ travail effectué !


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour

Merci Dhany pour ton travail cela fonctionne mais trop trop lentement surement dut a la taille des colonnes peut on calculer les colonnes 1 A 1,

par exemple R0 PUIS R1.. etc?

merci beaucoup pour votre aide

??? sur mon PC, qui a un processeur i5 à 3.10 GHz, ça fait l'travail en moins d'une seconde :

screen

ton PC est peut-être infecté par un virus qui le ralentit ? fais avec ton antivirus une analyse complète et approfondie de ton PC !


dans ton vrai fichier, tu as bien 21 colonnes de résultats de BI à CC, pour R0 à R20, n'est-ce pas ?

et pour ton tableau gauche initial, c'est bien des colonnes A à BG ?

toutes ces colonnes A à BG sont de 182 lignes ; est-ce qu'il y a toujours le même nombre de lignes ? ou est-ce qu'une colonne peut être plus longue ou plus courte qu'une autre ?

combien de lignes as-tu en tout ? est-ce beaucoup plus que 182 lignes ? là aussi : est-ce qu'il y a toujours le même nombre de lignes ? donc par exemple, si ta colonne A est de 2000 lignes, tes colonnes B à BG sont toutes de 2000 lignes aussi ?

merci de répondre très clairement à toutes ces questions : c'est important pour faire le prochain code VBA.

dhany

détail

le classeur a 3 feuille chaque feuille a 20 colonne et 14065 ligne exactement

tu n'as pas répondu aux autres questions, notamment la principale :

est-ce que toutes tes colonnes ont le même nombre de lignes ?

donc maintenant est-ce 14000 lignes pour A à BG ?

peur-être as-tu plus de colonnes ? si oui : de A à quelle colonne ?

le tableau des résultats devra alors être plus à droite !

et les indices : toujours R0 à R20 ou y'en a plus ?

si tu réponds pas à mes questions, j'peux pas avancer ton dossier !

dhany

tu a écrit :

le classeur a 3 feuilles ; chaque feuille a 20 colonnes et 14065 ligne exactement

bon, alors j'vais supposer qu'c'est les 2 seules différences avec ton fichier exemple initial :

3 feuilles au lieu d'une seule ; des colonnes qui ont toutes 14065 lignes.

pour plus d'une feuille, j'vais pas changer la macro : elle s'exécutera comme actuellement

pour la feuille active.

peux-tu me confirmer que tu n'as pas de virus qui ralentit ton PC ?

peux-tu m'envoyer ton fichier actuel ?

dhany

est-ce que toutes tes colonnes ont le même nombre de lignes ?

oui

donc maintenant est-ce 14000 lignes pour A à BG ?

oui

peur-être as-tu plus de colonnes ? si oui : de A à quelle colonne ?

le tableau des résultats devra alors être plus à droite !

non

et les indices : toujours R0 à R20 ou y'en a plus ?

oui

si tu réponds pas à mes questions, j'peux pas avancer ton dossier !

* colonnes A à BG, toutes de 14065 lignes : ok

* pas de colonnes en plus : ok

* indices : oui quoi ? oui à « R0 à R20 », n'est-ce pas ? ou oui à « y'en a plus » ?

* t'as pas répondu à propos d'un éventuel virus ! si ton PC est infecté, optimiser l'code VBA servira à rien !

en plus, si tu as un virus et que tu le déloge, la macro actuelle devrait suffire !

* peux-tu envoyer ton fichier actuel sans données confidentielles ? si oui, ça s'ra plus simple

pour moi de travailler sur l'vrai fichier, et pouvoir juger d'la vitesse de la macro !

* relis ce post, car tu as dû le manquer :

https://forum.excel-pratique.com/viewtopic.php?p=708305#p708305

dhany

excuse moi pour le temps de latence

non y a pas de virus; les indice il y a que 20

le fichier sont des donnée brut d'un fichier csv identique au model sauf il n'est pas trier et de 14 000 LIGNES

Voila j’espère avoir répondu au question et desolé pour le manque de detail et merci ;

screen

mais envoie-moi un fichier Excel, pas un fichier csv !

j'ai pu télécharger ton fichier, MAIS :

* Feuil2 et Feuil3 sont vides !

* pour Feuil1 : colonnes A à BD ➯ il manque les 2 colonnes BF et BG !

heureusement qu'j'avais précisé que j'voulais ton fichier réel pour pouvoir juger des vraies performances de la macro !

dhany

ajout : j'ai pas d'temps à perdre à inventer des données et à ajouter des colonnes manquantes, alors à toi d'm'envoyer un fichier correct !

dhany

Bonsoir Dhany

voici le fichier original complet .j'espere ne pas vous avoir enlever votre enthousiasme

sinon votre 1er version fonctionne je l'utilise actuellement il faut 3h45 pour le calcul et nous les vieux on a le temps

merci pour tout.

https://drive.google.com/file/d/1yZUVgKM8AQYnyCYY_RAEJH3KwW85jICN/view?usp=sharing

Bonsoir MARHOU,

Salut dhany

Pour le fun, on peut associer un arraylist aux différentes clés d'un dictionnaire

En bouclant sur toutes les feuilles et toutes les colonnes, on constituera un tableau de références (arraylist) pour chacun de tes indices (les clés du dictionnaire)

Puis on restituera les différents tableaux de références via la méthode exists du dictionnaire

Pour l'exemple, ici je n'ai traité qu'une colonne.

Option Explicit
Sub test()
Dim a, i As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    a = Sheets(1).Range("a1").CurrentRegion.Value
    For i = 2 To UBound(a, 1)
        If Not dico.exists("R" & a(i, 1)) Then
            Set dico("R" & a(i, 1)) = CreateObject("System.Collections.ArrayList")
        End If
        dico("R" & a(i, 1)).Add a(i, 2)
    Next
    'ici on restitue R6
    Sheets(4).Cells(1).Resize(dico("R6").Count) = Application.Transpose(dico("R6").toarray)
    Set dico = Nothing
End Sub

Edit : visiblement il faut traiter les feuilles une par une, soit une restitution distincte pour chaque feuille.

Il faut aussi utiliser la méthode Removeall du dictionnaire

klin89

Bonjour

je suis aux ange! Çà fonctionne super je vous remercie du fond du cœur

je vous souhaite une excellente journée

MERCI

re MARHOU

Juste pour le fun

On constate la présence de doublons dans les listes de références restituées, on les garde ou pas

Option Explicit
Sub test()
Dim a, i As Long, j As Long, x As Byte, r As Range, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    Application.ScreenUpdating = False
    For x = 1 To 3
        With Sheets(x)
            a = .Range("a1:bg14066").Value
            For j = 1 To UBound(a, 2) Step 3
                For i = 2 To UBound(a, 1)
                    If Not dico.exists("R" & a(i, j)) Then
                        Set dico("R" & a(i, j)) = CreateObject("System.Collections.ArrayList")
                    End If
                    dico("R" & a(i, j)).Add a(i, j + 1)
                Next
            Next
            For Each r In .Range("bl1", .Range("IV1").End(xlToLeft))
                If dico.exists(r.Value) Then
                    r(2).Resize(dico(r.Value).Count).Value = Application.Transpose(dico(r.Value).ToArray)
                End If
            Next
            dico.RemoveAll
        End With
    Next
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub

C'est un peu long

klin89

Rechercher des sujets similaires à "regroupement"