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
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 SubCordialement
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