Liste déroulante en cascade sans doublons

Bonjour à tous,

Voilà quelques heures que je me creuse la tête et j'ai tendance a pensé que ce que je souhaite est irréalisable pour Excel, je viens donc vers vous pour un avis.

Pour illustrer ma demande, je vais prendre un exemple :

Dans la feuille "Feuille de calcul", colonne D, j'ai une liste déroulante avec toutes les données que je vais directement chercher dans la feuille de données "Plan de maintenance" via une recherche V. Lorsque je sélectionne "accouplement a denture" (il y a 3 lignes différentes dans le tableau de donnée concernant cette item), je remarque que seules les données de la première ligne sont prises en compte, enfin ce n'est pas le fond du problème).

Je souhaiterais par exemple qu'il n'y ai pas de doublons dans "Désignation de l'organe", c'est à dire qu'il y ai qu'une seule fois "accouplement en denture". Et lorsque je sélectionne celui ci, je souhaiterais pouvoir faire une liste déroulante dans "libellée de la tâche de maintenance" qui reprendrait évidemment les 3 fameuses lignes, afin que je puisse sélectionner le libellé que je souhaite affiché sur la ligne entière.

J''espère avoir été assez claire, je vous remercie d'avance pour vos éventuelles réponses.

PS : Le plus simple est-il du VBA ou simplement des formules ?

Cordialement

29outil-sli.xlsx (909.49 Ko)

Bonsoir Fredo025,

Avec "Formules", j'avoue ne pas savoir faire. Avec VBA je propose de coller dans le code de la feuille "Feuille de calcul" ceci:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oSheet As Worksheet
    Dim oCell As Range, oRange As Range
    Dim sAdresses As String
    Dim lRowMin As Long, lRowMax As Long
    'On s'assure que la cellule modifiée est dans la colonne D et la ligne >=13
    If Target.Column = 4 And Target.Row >= 13 Then
        'On s'assure qu'une valeur est bien renseignée dans la colonne D
        If Len(Target.Value) > 0 Then
            'On initialise le variable sAdresses
            Set oSheet = ThisWorkbook.Worksheets("Plan de maintenance prév.")
            sAdresses = "='" & oSheet.Name & "'!"
            'On selectionne les lignes de la feuille "Plan de maintenance prev." pour la valeur contenu dans D
            Set oRange = oSheet.UsedRange
            lRowMin = 0
            lRowMax = 0
            If oRange.Rows.Count > 0 Then
                For Each oCell In oRange.Columns(5).Cells
                    If oCell.Value2 = Target.Value Then
                        If lRowMin = 0 Then
                            lRowMin = oCell.Row
                            lRowMax = oCell.Row
                        Else
                            If oCell.Row > lRowMax Then
                                lRowMax = oCell.Row
                            End If
                        End If
                    End If
                Next
                sAdresses = sAdresses & "$H" & lRowMin & ":$H" & lRowMax

                'On ajoute la validation dans la colonne "E"
                Set oCell = Target.Offset(, 2)
                With oCell.Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=sAdresses
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .ShowInput = True
                    .ShowError = True
                End With
                'S'il n'y a qu'une valeur dans la liste, on la copie dans la cellule. Sinon on vide la cellule
                If lRowMin = lRowMax And lRowMin > 0 Then
                    oCell.Value = oSheet.Range("$H" & lRowMin).Value
                Else
                    oCell.Value = ""
                End If
            End If
        End If
    End If
End Sub

sans oublier de sauvegarder ensuite avec l'extension .xlsm...

Je joins mon fichier de test.

43outil-sli-gvs.xlsm (775.41 Ko)

Merci beaucoup d'avoir pris le temps de répondre,

J'ai eu beaucoup de mal à faire correspondre votre code avec mon fichier (auquel j'ai intervertis des colonnes) mais tout est rentré dans l'ordre, le code correspond à mes attentes

Heureusement que vous avez mis des indications sinon j'y serais encore,

Encore merci et bonne journée à vous

Bonjour à tous,

Je reviens parce que je suis totalement perdu avec le VBA.

Dans la feuille Budget, je souhaiterais pouvoir modifier la colonne C12 (Formation) et aller récupérer le nombre d'organe correspondant F12 (donné qui se trouve dans la feuille plan de maintenance colonne 52 53 54 54...).

En faite, il me faudrait la main sur le nombre d'organe avec la désignation de l'organe ET la formation (actuellement le changement de la case formation ne me fait pas varier le nombre d'organe...)

Voilà mon fichier,

Merci beaucoup

29outil-sli-v2.xlsm (908.69 Ko)

J'ai règle le soucis ne vous embêtez pas bonne journée

Rechercher des sujets similaires à "liste deroulante cascade doublons"