Urgence : trier des données sur excel... très particulier

Bonjour, j'ai actuellement 60000 lignes à traiter pour vendredi.... voici en gros l'organisation du tableau :

2065 / peur / colère

2065/ tristesse /

2065 / colère / indignation

2066 / dégout /

2066 / peur / dégout /

..... et je voudrais pour mon analyse statistique tout transformer de cette manière :

2065 / 2066

peur dégout

colère peur

tristesse dégout

colère

indignation

Il me faut absolument trouver un moyen de le faire automatiquement..... je viens de passer la journée à le faire "à la main" et je n'ai fait que 100 lignes !!!!

Bonsoir,

envoie un fichier avec quelques lignes seulement.

Claude.

Bonjour

Voici le fichier de nicopsycho

https://www.excel-pratique.com/~files/doc/env4OExemple.xls

Cordialement

Merci de vous attarder un peu sur mon message.... c'est vrai que le plus simple est souvent le plus compliqué.... petite précision, ce fichier excel n'est qu'un exemple car j'ai 60 000 lignes environ à traiter.... alors imaginez si je dois tout faire manuellement !! je pense qu'il faut programmer mais ce n'est pas mon rayon... je fais surtout des analyses statistiques !!

Merci d'avance, nico

re,

nicopsycho, Désolé, mais je n'aurais pas le temps nécessaire,

Je préfère te prévenir, et laisser la place aux spécialistes.

Je regarde quand même, Tu as toujours 3 colonnes à droite du chiffre ?

amicalement

Claude.

Bonsoir,

un premier essai, regarde le fichier

J'ai considéré que tu n'avais pas de ligne de titres, comme dans l'exemple

La recopie se fait dans la feuille 3

Il y a tout d'abord un tri dans la feuille "Avant", puis un tri par colonne dans la "Feuille 3"

Reviens, si problème d'adaptation dans ton fichier

Le code :

Sub transpos()
Dim DerCol As Byte, DerCol2 As Byte
Dim DerLig As Long, DerLig2 As Long
Dim ancien As String, Cel As Range
Set HCell = Cells.Find("*", , , , xlByColumns, xlPrevious)(, 1)
DerLig = [A65000].End(xlUp).Row
Range(Cells(1, 1), Cells(DerLig, HCell.Column)).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess
For Each Cel In Range("A1:A" & DerLig)
    With Sheets("Feuil3")
        If Cel <> ancien Then
            DerCol2 = IIf(.[A1] = "", 1, .[IV1].End(xlToLeft).Column + 1)
            .Cells(1, DerCol2) = Cel
        End If
        DerCol = IIf(Cells(Cel.Row, 256).End(xlToLeft).Column = 1, 2, Cells(Cel.Row, 256).End(xlToLeft).Column)
        For Each cel2 In Range(Cells(Cel.Row, 2), Cells(Cel.Row, DerCol))
            If cel2 <> "" Then
                DerLig2 = .Cells(65000, DerCol2).End(xlUp).Row + 1
                .Cells(DerLig2, DerCol2) = cel2
            End If
        Next cel2
    End With
ancien = Cel
Next Cel
With Sheets("Feuil3")
    For Each Cel In .Range(.Cells(1, 1), .Cells(1, DerCol2))
    DerLig2 = .Cells(65000, Cel.Column).End(xlUp).Row
        .Range(.Cells(1, Cel.Column), .Cells(DerLig2, Cel.Column)).Sort Key1:=.Cells(1, Cel.Column), Order1:=xlAscending, Header:=xlGuess
    Next Cel
End With
End Sub

Le fichier :

https://www.excel-pratique.com/~files/doc/nico_v1.xls

Edit : Oupssss, coller le code 2 fois....

Bonjour à tous,

Bravo felix, ton code marche parfaitement et en plus, il est "beau".

J'essaye d'analyser ligne par ligne, mais j'ai du mal ! notamment la 4 ème.

Set HCell = Cells.Find("*", , , , xlByColumns, xlPrevious)(, 1) 

Pourrait-tu développer cette ligne.

amicalement

Claude.

Bonjour Claude

Merci

pour cette ligne de code, comme on ne sait pas sur combien de colonnes sont éparpillées ses données, on calcule donc la dernière colonne occupée.

Dans l'exemple joint, on obtient 4.

Si tu rajoutes une donnée en colonne L de la ligne 15, par exemple, tu obtiendras 12

Ceci permet de prendre toutes les données lors du tri initial.

Bonne journée

Merci felix, bonne journée,

Pour nicopsycho, apparemment c'était pas si "urgent" que çà !!

Claude.

Rechercher des sujets similaires à "urgence trier donnees tres particulier"