Listes dynamiques en cascades

Bonjour,

Bien que parcourant depuis longtemps ce site et son forum pour ses bons conseils, je poste aujourd'hui pour la première fois :

Je poste ici pour avoir une idée sur la faisabilité de mon problème et des moyens à utiliser pour y arriver.

Je m'explique : (je fourni également un fichier simplifié pour développer mes propos, ayant du mal à décrire mon problème)

Afin de simplifier la saisie d'un tableau, un utilisateur va commencer par renseigner une Base de données avec au minimum 4 colonnes la composant.

Les problèmes commencent avec la mise en place du tableau : il faut en effet que je créé des listes dynamiques (car la BDD n'est pas fixe) en fonction d'une première sélection dans le tableau puis une deuxième liste dynamique en fonction à partir de la case précédente (cf fichier joint).

Après de nombreuses recherches j'ai trouvé une solution se rapprochant de mon problème : un fichier réalisé par Jacques BoisGontier et utilisant VBA (voir l'onglet masqué Cascade3Niveaux).

Néanmoins dans ce cas, il n'y a "que" 3 colonnes, alors que dans mon cas il y a les 3 colonnes avec lesquelles mes listes se construiront PLUS des données à extraire selon les éléments sélectionnés (le problème est là).

Voilà donc mes premières questions :

- Y-a-t-il obligation d'utiliser du VBA pour des cascades de ce niveau?

Si oui, que me conseillez comme moyens à utiliser sur VBA ? Méthode citée précédemment, ou existe-il d'autres moyens d'y arriver ?

- Sera-t-il possible de faire une recherche pour aller chercher un prix dans mon fichier ( possibilité de la double recherche V ou via VBA ? )

Ou suis-je obligé de passer par une recherche dans un tableau croisé dynamique que je devrais créer en plus?

Je suis désolé si mes explications manquent de clarté, mon problème étant assez complexe à expliquer, je reste donc à votre disposition pour toute demande de précision.

Cordialement,

OlivierZ

bonjour

un essai

apres avoir trier la bdd par ordre alpha (par genre) voir colonnes masquée puis avoir nommé les colonnes en dynamique

on utilise DECALER pour les listes de validation en tenant compte de la position et du nb de val concernées

128olivierz.zip (8.26 Ko)

cordialement

Bonsoir,

cf pj

Ceuzin

Bonjour à tous les deux,

j'ai commencé à regarder vos 2 propositions, je reviens vers vous dès que je les ai plus détaillées.

(avec une petite préférence pour la deuxième: je ne connaissais pas le système des matrices, les possibilités offertes sont très intéressantes).

Tulipe-4, merci pour ta proposition qui est très complète et je t'en remercie mais je penses malgré tout me tourner vers le VBA (cela me permet notamment de créer une liste qui va s'agrandir toute seule sans avoir besoin d'étendre tes formules cachées à droite du tableau et le tri automatique est visible par l'utilisateur).

Ta proposition, Ceuzin, se rapproche en effet de celle que j'ai citée dans mon premier message (mais en plus simple et surtout avec des listes qui s'adaptent immédiatement sans avoir besoin de re-sélectionner les choix dans les listes : un grand merci pour cette possibilité de simplification).

Néanmoins j'y retrouve le même problème avec lequel je me suis débattu en essayant d'adapter la première méthode : les colonnes de droites (prix et d'autres que je voudrais rajouter) ne suivent pas lorsque le tri alphabétique automatique se fait.

Macro concernée :

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect([A4:C1000], Target) Is Nothing And Target.Count = 1 Then
   [A4:C1000].Sort Key1:=[A2], Key2:=[B2], Key3:=[C2]
   [A3:C1000].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[G3], Unique:=True
   [A3:C1000].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[I3:J3], Unique:=True
 End If
End Sub

Même en modifiant la cible de la macro ([A4:C1000]) en modifiant le C par D, E ou autre et en modifiant en conséquence les formules suivantes, la macro bug sur la ligne annonçant les "Key" (c'est l'ajout de Key4, etc qui ne semble pas être reconnu par VBA).

Est-il impossible de mettre plus de 3 variantes avec Range.Méthode Sort ? (cf aide sous excel)

à la place de

[A4:C1000].Sort Key1:=[A2], Key2:=[B2], Key3:=[C2]

Je pensais utiliser quelque chose comme :

ActiveWorkbook.Worksheets("BDD").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("BDD").Sort.SortFields.Add Key:=Range("A4"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets("BDD").Sort
        .SetRange Range("A4:D1000")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

    End With

(faite en partie à partir de l'enregistreur)

Le problème est qu'elle ne tri que par rapport à la première ligne et pas la deuxième dans un second temps (contrairement au Range.Méthode Sort )

Autre solution peut-être, grâce à l'enregistreur et le système de filtre : filtrer la colonne C, puis la B, puis A, et enlever le filtre (à faire dès qu'une modification est apportée, donc assez lourd).

bojour

je ne suis pas un grand specialiste mais je crois qu'en utilisant le nom de cette plage qui aura ete nomé en dynamique au prealable comme pour des formules , cela devrait etre un bon compromis

pour en revenir a ma proposition

le tableau bd est dynamique ; le tri ne l'est pas mais si tu incermente en prevoyant large cela fera ,tout le reste est dynamique

par contre il y a un truc qui me chiffonne ;c'est l'utilisation car pour un type ;il peut y avoir plusieurs reponses qui seront fatalement redondantes dans l'extraction des sous listes ;ce qui fait que tu risques assez rapidement ,de te retrouver avec des listes a rallonge tartinées de doublons ; une liste de 15 val c'est digeste mais 50 avec 10fois les memes ;ça l'est moins alors ; un tri sans doublon de cette matrice classeé par genre ne serait eventuellement pas du luxe

et peut etre meme demarrer d'un tableau pre etabli ;dans ce cas quid de la saisie manuelle

cordialement

En définitive, j'ai utilisé l'enregistreur de macros et effectué 3 tris consécutifs sur les 3 premières colonnes (de droite à gauche) afin d'obtenir un tri prenant en compte les nombreuses autres colonnes de mon tableau.

Bonjour,

Procédure de tri sur x colonnes simplifiée..

Sub Trie4Colonnes()
Dim DerLig As Long
    DerLig = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row
    With Sheets("BDD").Sort
        With .SortFields
            .Clear
            .Add Key:=Range("A4:A" & DerLig), Order:=xlAscending
            .Add Key:=Range("B4:B" & DerLig), Order:=xlAscending
            .Add Key:=Range("C4:C" & DerLig), Order:=xlAscending
            .Add Key:=Range("D4:D" & DerLig), Order:=xlAscending
            '.Add Key:=Range("E4:E" & DerLig), Order:=xlAscending 'Etc....
        End With
        .SetRange Range("A4:D" & DerLig)
        .Header = xlNo 'Titre non compris dans la plage de tri
        '.MatchCase = True 'Pour respecter la case (Maju/Minus)
        .Orientation = xlTopToBottom
        '.SortMethod = xlPinYin 'Uniquement pour le chinois
        .Apply
    End With
End Sub

Si ajout/suppression de clé pas oublier d'adapter SetRange

Pour ton problème de liste, ça pourrait pas être avec un UserForm et des combobox ?

A+

Rechercher des sujets similaires à "listes dynamiques cascades"