Classement de données

Bonjour à tous,

Je cherche de l'aide pour classer des données dans un fichier EXCEL. Pour m'expliquer, j'ai un fichier avec une liste de noms dans la colonne A, puis des attributs à certains noms, des fois 1 seul, des fois jusqu'à une 15zaine ...

Je souhaite classer par attributs pour voir quels noms reviennent dans chaque attributs.

J'ai essayé avec diverses formules mais je suis bloqué quand les noms reviennent dans plusieurs attributs différents ...

Je joins un fichier pour m'expliquer mieux.

Quelqu'un peut-il me dépanner ?

Merci d'avance

9exemple-tri.xlsx (9.15 Ko)

Bonjour,

Avec une macro

Si vous voulez automatiser la procédure (à chaque nouvelle saisie de nom par exemple, demandez moi.

Cordialement

Un grand MERCI tout d'abord à toi besoin_d_aide !

j'ai lancé ta macro (qui marche parfaitement sur le fichier exemple) sur mon fichier de travail (qui contient environ 3000 noms en colonne A et jusqu'à une trentaine de colonnes pour les sport1, 2, 3 etc ...) .... et mon excel a planté.

Il faut sans doute que j'adapte des choses dans ta macro, je vais m'y plonger pour tenter de comprendre, si j'y arrive, je ferai un retour

Evidemment, je veux bien des explications si tu as du temps !

Re,

Sub classement()
Dim sport As String
Dim cel As Range, place As Range, cellule As Range
Dim lig As Long
lig = Range("a" & Rows.Count).End(xlUp).Row 'trouver la dernière ligne de la colonne A
'peut être à adapter ici --> le début des sport ne commencent peut-être pas en K1 dans ton fichier (ou alors sont dans un autre onglet)
For Each cel In Range("K1:" & Range("K1").End(xlToRight).Address) 'pour chaque cellule de la plage qui va de  K1 à la dernière cellule non vide de la ligne
 sport = cel.Value 'la variable sport prend la valeur de la cellule 1
    For Each place In Range("B1:D" & lig) 'là, c'est pour éviter que la macro ne prenne trop de temps --> la plage de recherche est définie de B1 à la dernière ligne
    If place.Value = sport Then 'si on retrouve le sport dans la cellule --> donc la personne est inscrite
    Set cellule = Range(Cells(Rows.Count, cel.Column).Address).End(xlUp).Offset(1, 0) 'on recherche la dernière cellule vide de la colonne sous le noms du sport --> là ou il doit y avoir la liste de nom
    If Range(cel.Address & ":" & cellule.Address).Cells.Find(Range("A" & place.Row).Value) Is Nothing Then 'si le nom n'existe pas déjà dans cette colonne
    cellule.Value = Range("A" & place.Row).Value 'le rajouter
    Else 'sinon
    End If 'ne rien faire (la personne est déjà référencée
    End If
    Next place 'passer à la cellule suivante de la plage de recherche
Next cel 'passer au sport suivant (quand toute la plage de recherche a été parcourue bien sûr)
End Sub

Cordialement

Un énorme merci à toi !

Non seulement pour la solution, mais surtout pour les explications qui me font faire un grand pas en avant dans VBA (je pars de loin ...)

J'espère à bientôt (ou pas, ça voudrait dire que j'apprends très vite )

Merci aussi à Excel-Pratique pour le forum

Rechercher des sujets similaires à "classement donnees"