Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraire des données les classer et les trier

9 réponses
Avatar
Pierre F.
Bonjour à toutes et à tous!

Dans un tableau, je souhaiterais, en fonction de données situées dans 4
colonnes, récupérer les données correspondantes d'une 5e colonne... et
trier le tout!

Voir le cjoint, ce sera plus clair :-)

http://cjoint.com/?gCrGzxZhHW

Macro ou soluce par fomule me conviendront; je suis totalement perdu :-(

Merci

Cordialement,
Pierre F.

9 réponses

Avatar
laurent.daures
Bonjour,
Il faut tout simplement utiliser les filtres.
Pour cela,
sélectionne les cellules D5 à M5
Puis dans le menu Données
Filtrer
Filtre Automatique
Tu as désormais de D5 à M5 des petites flèches, ce sont les filtres.
Là , en manipulant le filtre (la petite flèche) de chaque colonne,
tu peux filtrer uniquement Den chu ou Aeg,
en pensant à "ouvrir" le filtre à chaque fois
que tu en actives un sur une autre colonne, car les filtrages
s'"additionnent".
Amicalement
Siesting Hoax

"Pierre F." a écrit dans le message de news:
c92dc$486659d1$55da2ea5$
Bonjour à toutes et à tous!

Dans un tableau, je souhaiterais, en fonction de données situées dans 4
colonnes, récupérer les données correspondantes d'une 5e colonne... et
trier le tout!

Voir le cjoint, ce sera plus clair :-)

http://cjoint.com/?gCrGzxZhHW

Macro ou soluce par fomule me conviendront; je suis totalement perdu :-(

Merci

Cordialement,
Pierre F.


Avatar
Pierre F.
laurent.daures a écrit :
Bonjour,
Il faut tout simplement utiliser les filtres.
Pour cela,
sélectionne les cellules D5 à M5
Puis dans le menu Données
Filtrer
Filtre Automatique
Tu as désormais de D5 à M5 des petites flèches, ce sont les filtres.
Là , en manipulant le filtre (la petite flèche) de chaque colonne,
tu peux filtrer uniquement Den chu ou Aeg,
en pensant à "ouvrir" le filtre à chaque fois
que tu en actives un sur une autre colonne, car les filtrages
s'"additionnent".



Merci pour ta réponse...

mais ça ne me me convient pas car les Aeg, ... peuvent apparaître dans
plusieurs colonnes et je souhaite une "addition" des résultats alors que
les filtres successifs amènent une soustraction :-)

En fait, je souhaite recomposer tout le tableau, mais sous une autre
forme...
Comme il comporte en réalité 130 lignes, je cherche à trouver une
solution "rapide".

Cordialement,
Pierre F.
Avatar
isabelle
bonjour Pierre,

par exemple sélectionne A2 de Feuil2 et exécute cette macro.
on pourrait aussi ajouter une autre boucle pour traiter toutes les informations de la colonne A de Feuil2

Sub Macro1()
x = 1
For Each c In Sheets("Feuil1").Range("E6:E17,G6:G17,I6:I17,K6:K17,M6:M17")
If LCase(c) = LCase(Sheets("Feuil2").Range("A" & Selection.Row)) Then
x = x + 1
Sheets("Feuil2").Cells(Selection.Row, x) = Sheets("Feuil1").Range("B" & c.Row)
End If
Next
End Sub

isabelle

Pierre F. a écrit :
Bonjour à toutes et à tous!

Dans un tableau, je souhaiterais, en fonction de données situées dans 4
colonnes, récupérer les données correspondantes d'une 5e colonne... et
trier le tout!

Voir le cjoint, ce sera plus clair :-)

http://cjoint.com/?gCrGzxZhHW

Macro ou soluce par fomule me conviendront; je suis totalement perdu :-(

Merci

Cordialement,
Pierre F.


Avatar
Pierre F.
isabelle a écrit :
bonjour Pierre,

par exemple sélectionne A2 de Feuil2 et exécute cette macro.
on pourrait aussi ajouter une autre boucle pour traiter toutes les
informations de la colonne A de Feuil2

Sub Macro1()
x = 1
For Each c In Sheets("Feuil1").Range("E6:E17,G6:G17,I6:I17,K6:K17,M6:M17")
If LCase(c) = LCase(Sheets("Feuil2").Range("A" & Selection.Row)) Then
x = x + 1
Sheets("Feuil2").Cells(Selection.Row, x) = Sheets("Feuil1").Range("B" &
c.Row)
End If
Next
End Sub




Merci pour cette macro... mais elle ne fonctionne pas chez moi (Rien ne
se passe)

Pourquoi faut-il sélectionner A2 de feuil2 ?

Cordialement,
Pierre F.
Avatar
MichDenis
2 façons illustrées pour obtenir ce que tu désires
à l'aide de ce fichier exemple utilisant le filtre élaboré

http://cjoint.com/?gCvGSaVGzD



"Pierre F." a écrit dans le message de news: c92dc$486659d1$55da2ea5$
Bonjour à toutes et à tous!

Dans un tableau, je souhaiterais, en fonction de données situées dans 4
colonnes, récupérer les données correspondantes d'une 5e colonne... et
trier le tout!

Voir le cjoint, ce sera plus clair :-)

http://cjoint.com/?gCrGzxZhHW

Macro ou soluce par fomule me conviendront; je suis totalement perdu :-(

Merci

Cordialement,
Pierre F.
Avatar
laurent.daures
Bonsoir,
si tu veux, voici une macro adaptée à ton fichier joint,

Sub extraire_prof()
Range("N1:N500").ClearContents
For Each prof In Array("aeg", "gui", "tra", "rod", "chu", _
"dup", "rac", "den", "mad", "sch")
For Each cell In Range("E6:M17")
If UCase(cell.Value) = UCase(prof) Then
If nom_élève = "" Then
nom_élève = Range("A" & cell.Row) & _
" " & Range("B" & cell.Row)
Else
nom_élève = nom_élève & ", " & _
Range("A" & cell.Row) & " " & Range("B" & cell.Row)
End If
End If
Next
Range("N500").End(xlUp)(2) = prof & " : " & _
nom_élève
nom_élève = ""
Next
End Sub


Elle te donne tous les profs suivis des noms et prénoms de la ligne.
A toi de l'adapter si tu veux, en ajoutant des noms dans l'Array Prof.
Amicalement
Siesting Hoax

"Pierre F." a écrit dans le message de news:
6be00$486682c4$55da2ea5$
laurent.daures a écrit :
Bonjour,
Il faut tout simplement utiliser les filtres.
Pour cela,
sélectionne les cellules D5 à M5
Puis dans le menu Données
Filtrer
Filtre Automatique
Tu as désormais de D5 à M5 des petites flèches, ce sont les filtres.
Là , en manipulant le filtre (la petite flèche) de chaque colonne,
tu peux filtrer uniquement Den chu ou Aeg,
en pensant à "ouvrir" le filtre à chaque fois
que tu en actives un sur une autre colonne, car les filtrages
s'"additionnent".



Merci pour ta réponse...

mais ça ne me me convient pas car les Aeg, ... peuvent apparaître dans
plusieurs colonnes et je souhaite une "addition" des résultats alors que
les filtres successifs amènent une soustraction :-)

En fait, je souhaite recomposer tout le tableau, mais sous une autre
forme...
Comme il comporte en réalité 130 lignes, je cherche à trouver une solution
"rapide".

Cordialement,
Pierre F.


Avatar
Pierre F.
MichDenis a écrit :
2 façons illustrées pour obtenir ce que tu désires
à l'aide de ce fichier exemple utilisant le filtre élaboré

http://cjoint.com/?gCvGSaVGzD



Mille mercis à tous; vos macros et filtres élaborés m'ont débloqués; je
peux enfin avancer :-)

Cordialement,
Pierre F.
Avatar
Youky
Voici qui répond parfaitement à la demande.....
Me suis pris le bec avec . . . .
c'est pourquoi je l'envoie même tardivement
Youky

Sub bibi()
Feuil2.Cells.Clear
lg = Feuil1.[A65536].End(3).Row
Feuil2.Select
For k = 5 To 13 Step 2
x = [B65000].End(3).Row + 1
Range(Cells(x, 2), Cells(lg - 6 + x, 2)).Value =
Feuil1.Range(Feuil1.Cells(6, k), Feuil1.Cells(lg, k)).Value
Next
[A1] = "NOM": [B1] = "NOM"
For k = 2 To [B65000].End(3).Row
Cells(k, 2) = UCase(Cells(k, 2))
Next
Columns("B:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
"A:A"), Unique:=True
Columns("B:B").Clear
x = 2
For youky = 2 To Feuil2.[A65000].End(3).Row
col = 2
nom = Feuil2.Cells(youky, 1)
For lig = 6 To lg
For k = 5 To 14 Step 2
If UCase(Feuil1.Cells(lig, k)) = nom Then
Feuil2.Cells(x, col) = Feuil1.Cells(lig, 2)
col = col + 1
Exit For
End If
Next
Next
x = x + 1
Next
Feuil2.Range("A:A").Font.Bold = True
End Sub
Avatar
Pierre F.
Youky a écrit :
Voici qui répond parfaitement à la demande.....
Me suis pris le bec avec . . . .
c'est pourquoi je l'envoie même tardivement
Youky



Merci pour le temps passé et pour le projet qui est tip top!
Désolé pour la prise de bec :-)
Le fait que la macro élimine les doublons, c'est vraiment génial!
J'ai pu ajouter un petit module de tri à la fin et l'affaire est belle.

Cordialement,
Pierre F.

Sub bibi()
Feuil2.Cells.Clear
lg = Feuil1.[A65536].End(3).Row
Feuil2.Select
For k = 5 To 13 Step 2
x = [B65000].End(3).Row + 1
Range(Cells(x, 2), Cells(lg - 6 + x, 2)).Value =
Feuil1.Range(Feuil1.Cells(6, k), Feuil1.Cells(lg, k)).Value
Next
[A1] = "NOM": [B1] = "NOM"
For k = 2 To [B65000].End(3).Row
Cells(k, 2) = UCase(Cells(k, 2))
Next
Columns("B:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
"A:A"), Unique:=True
Columns("B:B").Clear
x = 2
For youky = 2 To Feuil2.[A65000].End(3).Row
col = 2
nom = Feuil2.Cells(youky, 1)
For lig = 6 To lg
For k = 5 To 14 Step 2
If UCase(Feuil1.Cells(lig, k)) = nom Then
Feuil2.Cells(x, col) = Feuil1.Cells(lig, 2)
col = col + 1
Exit For
End If
Next
Next
x = x + 1
Next
Feuil2.Range("A:A").Font.Bold = True
End Sub