Classement sous plusieurs conditions

kounflex

XLDnaute Nouveau
Bonsoir à toutes et à tous,

Avant de vous exposer mon problème, un grand merci à tous les membres d'avoir pris la peine de lire mon post!
Je vais essayer d'être le plus succint possible :

En préambule,
Toutes les données se trouvent dans un seul onglet [data], et les simulations se font dans un autre onglet [Simul].
L'idée est de sélectionner les données d'une colonne qui respectent 3 conditions et de les classer en fonction des valeurs d'une autre.

Dans l'onglet [Simul]: 4 listes déroulantes.
=> les 3 premières (grises) correspondent aux 3 conditions à respecter (pour la sélection des données à classer)
=> la 4ème (en jaune) correspond au libellé de la colonne en fonction des valeurs de laquelle va s'opérer le classement.
=> Je cherche à classer les données d'une seule et même colonne E de l'onglet [data].

Textuellement, ma requête serait :
Sélectionner les données de la colonne E de l'onglet [data] lorsque les 3 conditions sont remplies et les classer en fonction des valeurs de la colonne qui a pour libellé le titre de la 4e liste déroulante.

J'ai bien trouvé une manière de le faire avec des formules excel en 2 étapes, je vous laisse juger par vous même!
Mais j'aimerai autant le faire via une macro. En effet les formules sont hyper lourdes et font ramer le fichier comme pas permis, lorsque je change les conditions dans les listes déroulantes :(

A votre avis, y a-t-il un moyen d'y arriver par le biais d'une macro?
Si oui, l'idée serait d'arriver directement au résultat de l'étape 2 (cf fichier) ... en fonction des conditions choisies!

Encore un grand merci à vous toutes et à vous tous!
 

Pièces jointes

  • Kounflex.xlsm
    198.2 KB · Affichages: 78

kounflex

XLDnaute Nouveau
Re : Classement sous plusieurs conditions

Re-Bonjour à toutes et à tous,

En fait, ce que j'ai réalisé par le biais de formules excel est en réalité un moyen détourné d'arriver à mes fins, mais je suis sur qu'on peut l'optimiser par une macro...
En effet, avec les formules, je classe d'abord les valeurs de la colonne qui a pour libellé le titre de la 4e liste déroulante et qui respectent les 3 conditions des 3 autres listes déroulantes (etape 1) ... puis je vais chercher dans la colonne E les noms des villes qui se rapportent aux valeurs classées (étape 2)

Etape 1:
En cellule D16 :
= LARGE(IF((data!$A:$A=$A$4)*(data!$C:$C=$A$7)*(data!$F:$F=$A$10);INDIRECT($B$1&"!$"&alphacol(MATCH(A$13;data!$1:$1;0))&":"&"$"&""&alphacol(MATCH(A$13;data!$1:$1;0))));$C16)
Cette formule me renvoie un classement décroissant des valeurs de la colonne G (sélection de 1 à 25)
Condition 1 : data!$A:$A=$A$4
Condition 2 : data!$C:$C=$A$7
Condition 3 : data!$F:$F=$A$10
Condition 4 : les valeurs à classer se trouvent dans la colonne qui a pour libellé le titre de la 4e liste déroulante.


Etape 2:
En cellule F16 :
=INDEX(data!$E:$E;MATCH(D16;INDIRECT($B$1&"!$"&alphacol(MATCH($A$13;data!$1:$1;0))&":"&"$"&alphacol(MATCH($A$13;data!$1:$1;0)));0);1)
Me renvoie le nom de la ville qui correspond à la valeur classée.

Je me demande bien comment pourrais je par le biais d'une macro avoir directement le résultat de l'étape 2 :
Classement des données de la colonne E de l'onglet [data] en fonction des valeurs de la colonne qui a pour libellé le titre de la 4e liste déroulante, si et seulement si les 3 conditions sont remplies.

J'espere m'être mieux fait comprendre ce matin!
Un grand merci et bonne journée!
 
G

Guest

Guest
Re : Classement sous plusieurs conditions

Bonjour,

Tu trouveras dans le fichier joint une macro d'extraction largement commentée et nommée "ExtractionDatas"

Ton fichier est bien lourd pour si peu de données et augmente rapidement. Si tu dois le joindre de nouveau, essai d'en faire un à partir d'un classeur vierge.


A+
 

kounflex

XLDnaute Nouveau
Re : Classement sous plusieurs conditions

Bonsoir à toutes et à tous,

Excellent Hasco,
c'est exactement ce que je voulais!

Une petite modif peut être ... y a t-il un moyen de limiter l'extraction des données à un certain nombre de colonnes?
De FY à L4, en ce qui concerne les données textes?
Et pouvoir choisir les colonnes pour les valeurs numériques? Par exemple "Net intérêts" et "Total revenue" ?
(mais cela pourrait être d'autres colonnes pour les valeurs numériques "Total coûts directs", etc ...)
Le classement se fait toujours en fonction de la cellule A13, cependant.

Et encore une dernière (J'en profite!!) ... Comment dois je faire dans l'exemple que tu as mis en PJ, si je veux que les données de Barclays Patrimoine qui est de level 2, apparaissent également avec ses petites succursales qui, elles, sont de level 4?
J'ai essayé de dupliquer la dernière condition : "Level" en cellule H1 et "L2" en cellule H2 et update du module, mais je n'y arrive pas.
Une astuce consiste à ne rien mettre dans la cellule G2 et à lancer la macro :)

Mais ça ne m'aide pas si je veux par exemple sélectionner les succursales de niveau 3 de la branche "Reseau Agences" et afficher également les données de cette branche qui, elle, est de niveau 2.

Un grand merci à toi Hasco et à tous!
++
 
G

Guest

Guest
Re : Classement sous plusieurs conditions

Bonjour,

Pour ta première question: il suffit d'adapter la ligne de destination des données. Tu mets à partir de E14 le nom des colonnes désirées (il faut que ces noms soient EXACTEMENT les mêmes que dans la source) et dans la macro tu mets l'adresse des ces cellules (dans le paramètre CopyToRange):

Ex: CopyToRange:= .Range("E14:N14")

Pour le reste, je n'ai pas encore regardé.
Mais tu peux essayer de faire des extractions "Manuelle" Onglet/Données/Trier et filtrer bouton Avancé.
Sers-toi de l'aide excel pour apprendre à manipuler les filtres, et les zones de critères.

A+

[Edition] pour avoir Les Reseaux agence de L4 et L3 il faut une deuxième ligne de critères et adapter le Paramètre CriteriaRange en conséquence CriteriaRange:=.Range("E1:G3")

Ce lien n'existe plus
A+
 
Dernière modification par un modérateur:

kounflex

XLDnaute Nouveau
Re : Classement sous plusieurs conditions

Un grand merci pour ta réponse Hasco :)
Une bonne et une mauvaise nouvelle cependant ...

La bonne : J'arrive désormais à afficher la branche de niveau 2 et les agences de niveau 3! Thanks!
La mauvaise : Malgré tes conseils, je n'arrive toujours pas à limiter le nombre de colonnes que je voudrais exporter.
J'ai pourtant essayer dans tous les sens ... rien n'y fait :(

Une idée?
Merci beaucoup
 
G

Guest

Guest
Re : Classement sous plusieurs conditions

Re,

Tu as bien supprimer toutes les cellules de la zone de destination, re-créer l'entête de destination avec exactement les mêmes libellés que ceux des données voulues. Puis enfin adapter le Paramètre CopyToRange:=.....

Et cela ne retourne rien! ou cela te dit quelque chose, message d'erreur?

A+
 

kounflex

XLDnaute Nouveau
Re : Classement sous plusieurs conditions

Re Hasco,

J'ai exactement fait ce que tu m'as demandé de faire : Supprimer puis recréer l'entête (selon les colonnes désirées) avec exactement les mêmes libellés que dans l'onglet source => J'ai insérer les libellées en cellule E10 à J10
J'ai ensuite modifié le paramètre CopyToRange:=..... comme suit := ("E10:J10")
La manip ne marche pas :(
J'ai un message d'erreur : Run-time error '1004': The extract range has a missing or illegal field name

En revanche, si je clique sur Debug, que je recolle les libellées en ("E10:J10") et que je clique ensuite sur le petit bouton (play), la manip fonctionne... mais elle ne fonctionne qu'une fois. Au bout de la 2e manip, j'ai à nouveau le même message d'erreur.

Peux tu me venir en aide stp?
Merci!!
 
G

Guest

Guest
Re : Classement sous plusieurs conditions

Re,

Arf....;)C'est sûr que si tu te contentes de copier coller les exemples, sans comprendre, cela rique de ne pas fonctionner.

CopyToRange:=.Range("E10:J10")

Le fera sans doute mieux.

A+
 

kounflex

XLDnaute Nouveau
Re : Classement sous plusieurs conditions

mdrrrrrrrrrrrr!!!!
Mais non Hasco!! Tu te doutes bien que j'ai pas mis "CopyToRange:=..... " !! Je suis nul en vba, mais quand même :)
J'ai bien mis CopyToRange:=.Range("E10:J10")

Et malgré cela, le problème persiste.
 
G

Guest

Guest
Re : Classement sous plusieurs conditions

Re,

Arf..........Range("E14").ClearContents ça te dis rien?

Bon, quelques modifications dans la macro, dont la destination CopyToRange

Vois ce qui a changé et pourquoi.
Code:
Sub ExtractionDatas()
Dim idxSortKey As Variant
With Sheets("Simul") 'Travailler sur la feuille Simul
    
    'Nettoyer les éventuelles donnée présentes dans la plage d'extraction sans la ligne d'entête
    With .Range("E14").CurrentRegion
        If .Rows.Count < 1 Then .Resize(.Rows.Count - 1, .Columns.Count).ClearContents
    End With
    
    'Lancer l'extraction des données
    Sheets("data").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("E1:G3"), CopyToRange:=.Range("E14").CurrentRegion.Rows(1)
    
    'Travailler sur la plage d'extraction
    With .Range("E14").CurrentRegion
        'S'il y a au moins 3 ligne dont l'entête
        If .Rows.Count > 2 Then
            
            'Cherche la position de la clé de tri dans la première ligne d'extraction
            idxSortKey = Application.Match(.Parent.Range("A13"), .Rows(1), 0)
            
            'Si la position de clé de tri est trouvé, lancer le tri
            If Not IsError(idxSortKey) Then .Sort key1:=.Cells(1, idxSortKey), Order1:=xlAscending, Header:=xlYes
            
        End If
    End With
End With
End Sub
A+
 

kounflex

XLDnaute Nouveau
Re : Classement sous plusieurs conditions

C'est une merveille ton truc ;)
Ca marche comme sur des roulettes,
Un tout grand merci!

PS : tu n'es pas à l'abri que je revienne à la charge pour de nouvelles fonctionnalités! (toujours sur le même topic)
Bonne soirée à toi.
 

Statistiques des forums

Discussions
312 500
Messages
2 089 010
Membres
104 004
dernier inscrit
mista