XL 2021 Trier tableau

julienha

XLDnaute Occasionnel
Bonjour,

Dans le fichier joint, j'aimerais trier le tableau A1:L19 (avec la fonction trier par éventuellement) avec les critères ci-dessous:
- la colonne L en ordre décroissant si toutes les valeurs de la colonne K sont égales à "Put"
- la colonne L en ordre croissant si toutes les valeurs de la colonne K sont égales à "Call"
- sinon trier la colonne J en ordre décroissant

Merci par avance
 

Pièces jointes

  • trier.xlsm
    18.8 KB · Affichages: 13

julienha

XLDnaute Occasionnel
Coller les données déclenche la macro.
Etant donné que parfois je n'ai pas de valeurs en colonne A:
- j'ai rajouté la formule =SIERREUR(--SI(ESTVIDE(D2);"";"1");"") en colonne A (si vs avez une autre solution avec Macro je suis preneur)
- et je colle mes données à partir de la colonne B

Ci-joint le fichier "final" avec toutes les formules BDP.
Par contre, j'ai réessayé plusieurs fois, la macro ne s'active que lorsque je rentre dans une cellule.

Merci
 

Pièces jointes

  • Last.xlsm
    38.4 KB · Affichages: 3

job75

XLDnaute Barbatruc
Etant donné que parfois je n'ai pas de valeurs en colonne A:
Alors laissez-la vide et déterminez la ligne de la dernière valeur numérique en colonne C :
VB:
With Range("A1:AG" & Application.Match([9^9], [C:C]))
Par contre, j'ai réessayé plusieurs fois, la macro ne s'active que lorsque je rentre dans une cellule.
Ben oui puisque c'est une Worksheet_Change, elle se recalcule quand on colle de nouvelles données.
 

julienha

XLDnaute Occasionnel
Alors laissez-la vide et déterminez la ligne de la dernière valeur numérique en colonne C :
VB:
With Range("A1:AG" & Application.Match([9^9], [C:C]))

Ben oui puisque c'est une Worksheet_Change, elle se recalcule quand on colle de nouvelles données.
En fait, elle ne se recalcule pas dès que je colle, mais uniquement après avoir double cliqué ds une cellule de la zone A2:AG19.
L'idéal est d'avoir le recalcule dès que les données sont collées sans avoir à double cliquer ds une cellule.
Merci encore
 

job75

XLDnaute Barbatruc
Bonjour julienha,
En fait, elle ne se recalcule pas dès que je colle, mais uniquement après avoir double cliqué ds une cellule de la zone A2:AG19.
Comment collez-vous les données, par macro ?

Dans cette macro il y a peut-être Application.EnableEvents = False qui neutralise la macro Worksheet_Change.

Sinon je le répète le collage de données dans la feuille provoque forcément son exécution.

A+
 

julienha

XLDnaute Occasionnel
Bonjour julienha,

Comment collez-vous les données, par macro ?

Dans cette macro il y a peut-être Application.EnableEvents = False qui neutralise la macro Worksheet_Change.

Sinon je le répète le collage de données dans la feuille provoque forcément son exécution.

A+
Bonjour, je colle les données vace la macro ci-dessous:

Sub Pricing()
'
' Pricing Macro
'

'
Sheets("Feuil2").Select
Range("A2:Y19").Select
Selection.ClearContents
Range("A2").Select
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
False, NoHTMLFormatting:=True
Range("B1").Select
ActiveCell.FormulaR1C1 = "N°"
Range("B2").Select
Sheets("Feuil1").Select
End Sub

Je vous envoie en PJ des exemples concrets de tri si jamais ca peut aider à clarifier et éventuellement corriger.
Merci
 

Pièces jointes

  • Exemple.xlsx
    17 KB · Affichages: 4

job75

XLDnaute Barbatruc
Votre macro est une plaisanterie.

Après l'effacement rien n'est copié donc rien ne peut être collé.

En supposant que les données à copier sont en Feuil1 utilisez :
VB:
Sub Pricing()
With Sheets("Feuil2")
    .Range("A2:Y19").ClearContents
    .Range("A2:Y19") = Sheets("Feuil1").Range("A2:Y19").Value 'copie les valeurs
    .Range("B1") = "N°"
End With
End Sub
La macro Worksheet_Change s'exécute bien.
 

job75

XLDnaute Barbatruc
En fait puisqu'on copie une plage sur une autre de même dimension inutile d'effacer :
VB:
Sub Pricing()
With Sheets("Feuil2")
    .Range("A2:Y19") = Sheets("Feuil1").Range("A2:Y19").Value 'copie les valeurs
    .Range("B1") = "N°"
End With
End Sub
 

oguruma

XLDnaute Occasionnel
Bonjour,

Dans le fichier joint, j'aimerais trier le tableau A1:L19 (avec la fonction trier par éventuellement) avec les critères ci-dessous:
- la colonne L en ordre décroissant si toutes les valeurs de la colonne K sont égales à "Put"
- la colonne L en ordre croissant si toutes les valeurs de la colonne K sont égales à "Call"
- sinon trier la colonne J en ordre décroissant

Merci par avance
PowerQuery ton sauveur. Il ne faut plus hésiter l'utiliser. Par 5 ou 6 étapes en PWQ on peut s'économiser des lignes de code et de la galère en maintenance.....
Le VBA est en revanche à mettre en oeuvre si tu veux automatiser les appels PWQ ou faire du PWQ dynamique. Mais là c'est du niveau 3
 

oguruma

XLDnaute Occasionnel
Votre macro est une plaisanterie.

Après l'effacement rien n'est copié donc rien ne peut être collé.

En supposant que les données à copier sont en Feuil1 utilisez :
VB:
Sub Pricing()
With Sheets("Feuil2")
    .Range("A2:Y19").ClearContents
    .Range("A2:Y19") = Sheets("Feuil1").Range("A2:Y19").Value 'copie les valeurs
    .Range("B1") = "N°"
End With
End Sub
La macro Worksheet_Change s'exécute bien.
"A2:Y19" éviter de coder en "dur" des adresses de plages de cellules. C'est galère pour la maintenance.
Utiliser les champs nommés static ou dans des cas plus complexes des champs nommé dynamic (DECALER te permet de faire cela avec NBVAL)

Idem "Feuil2" à éviter. Nommer la feuille explicitement et utiliser les noms d'onglets par des paramètres.
On nom d'onglet en paramètres dans une feuille de calcul : le nom de l'onglet change, on change sa valeur de paramètre et ainsi on ne touche pas au code.... ;)
 

julienha

XLDnaute Occasionnel
Votre macro est une plaisanterie.

Après l'effacement rien n'est copié donc rien ne peut être collé.

En supposant que les données à copier sont en Feuil1 utilisez :
VB:
Sub Pricing()
With Sheets("Feuil2")
    .Range("A2:Y19").ClearContents
    .Range("A2:Y19") = Sheets("Feuil1").Range("A2:Y19").Value 'copie les valeurs
    .Range("B1") = "N°"
End With
End Sub
La macro Worksheet_Change s'exécute bien.
Les données que je copie proviennent d'un logiciel externe.
Les données sont dans le presse-papier lorsque j'exécute la macro et ensuite collées sous format HTML.
 

julienha

XLDnaute Occasionnel
"A2:Y19" éviter de coder en "dur" des adresses de plages de cellules. C'est galère pour la maintenance.
Utiliser les champs nommés static ou dans des cas plus complexes des champs nommé dynamic (DECALER te permet de faire cela avec NBVAL)

Idem "Feuil2" à éviter. Nommer la feuille explicitement et utiliser les noms d'onglets par des paramètres.
On nom d'onglet en paramètres dans une feuille de calcul : le nom de l'onglet change, on change sa valeur de paramètre et ainsi on ne touche pas au code.... ;)
Merci pour votre suggestion. Je ne suis pas familié avec PowerQuery.
Concrétement, comment trier automatiquement la colonne L avec mes conditions sous PWQ?
Par exemple, dans le fichier ci-joint.
Merci
 

Pièces jointes

  • Test_rout.xlsm
    22.7 KB · Affichages: 2

oguruma

XLDnaute Occasionnel
Merci pour votre suggestion. Je ne suis pas familié avec PowerQuery.
Concrétement, comment trier automatiquement la colonne L avec mes conditions sous PWQ?
Par exemple, dans le fichier ci-joint.
Merci
On va à en arriver à de la prestation de services type ESN, je suis facturé bonbon tu sais ;) :D
je vois ce que je peux faire.... je ne m'engage pas sur des délais en revanche
 

Statistiques des forums

Discussions
315 088
Messages
2 116 089
Membres
112 658
dernier inscrit
doro 76