Filtrage en fonction d'une liste déroulante

Bonjour à tous,

Je souhaiterai trier et afficher les lignes d'un tableau en fonction d'un critère précis.

Je vous fait parvenir en pièce jointe un fichier PowerPoint pour vous expliquer plus facilement mon problème.

Je vous remercie!

Bonjour Richard, bonjour le forum,

Quand tu as ta télé en panne est-ce que tu amènes ton frigo chez le réparateur ?!...

ThauThème a écrit :

Bonjour Richard, bonjour le forum,

Quand tu as ta télé en panne est-ce que tu amènes ton frigo chez le réparateur ?!...

Bonjour ThauThème.

C'est un fichier Powerpoint pour vous aider à comprendre et pour vous aider à m'expliquer pour que je comprenne et que je sache le faire tout seul, mais si tu veux je balance mon fichier Excel et je dis "modifiez mon fichier Excel svp" et tu fais la modification sans que je comprenne rien.

Tu veux le faire? au moins ça m'arrangera à court terme.

Re,

Quand je propose un code j'ai l'habitude de le commenter afin de permettre au demandeur de le comprendre, de le modifier et de le retenir... Mais, c'est toi qui demande, pas moi. Tu fais ce que bon te semble...

Très bien pas de soucis autant pour moi alors. Je pensais pas que quelqu'un ferai ça je connais pas bien le forum encore.

Je t'envoi mon fichier Excel.

Pour rappel, mon but est d'afficher dans les tableaux de l'onglet "synthèse mois", que les lignes où la liste déroulante en A5 de l'onglet "synthèse mois" correspond avec les autres listes déroulantes des cellules I10, L10, O10, R10.... des autres onglets.

Je te remercie.

Re,

J'ai commencé à m'y pencher dessus mais malheureusement je vais devoir partir et je ne rependrai que plus tard... Avec ton PowerPoint en complément, le problème est clair. Du peu que j'ai vu, il ne me semble pas y avoir de difficultés particulières.

Je te remercie

Re,

J'ai d'abord commencé par créer deux plages nommées dans l'onglet Synthèse Mois. La première, Jour, correspond à la plage A10:H35. La seconde, Nuit, correspond à la plage A45:H70...

Le code se trouve dans la macro événementielle Change de cet onglet. Cela signifie qu'il va réagir automatiquement à chaque changement dans l'onglet. Mais son action est volontairement limitée à une unique cellule : A5.

Le code commenté :

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim S As Worksheet 'déclare la variable S (onglet Synthèse)
Dim J As Worksheet 'déclare la variable J (onglet Journée)
Dim N As Worksheet 'déclare la variable N (onglet Nuit)
Dim APL As String 'déclare la variable APL (Adresse PLage)
Dim I As Byte 'déclare la variable I (Incrément)
Dim PJ As Range 'déclare la variable PJ (Plage Jour)
Dim PN As Range 'déclare la variable PN (Plage Nuit)
Dim TVJ As Variant 'déclare la variable TVJ (Tableau des Valeurs Jour)
Dim TVN As Variant 'déclare la variable TVN (Tableau des Valeurs Nuit)
Dim DJ As Range 'déclare la variable DJ (cellule de Destination Jour)
Dim DN As Range 'déclare la variable DN (cellule de Destination Nuit)

Application.ScreenUpdating = False 'masque les rafraichissements d'écran
If Target.Address <> "$A$5" Then Exit Sub 'si le changement a lieu ailleurs que dans la cellule A5, sort de la procédure
Set S = Me 'définit l'onglet S
Set J = Worksheets("390 n°2114 Journée") 'définit l'onglet J
Set N = Worksheets("390 n°2114 Nuit") 'définit l'onglet N
APL = "H6:I73" 'définit l'adresse de la plage
Range("Jour").ClearContents 'efface d'éventuelles anciennes données jour
Range("Nuit").ClearContents 'efface d'éventuelles anciennes données nuit
For I = 1 To 26 'boucle sur 26 jours
    'définit la plage PJ (si I est égale à 1, PJ est la plage H6:I73, sinon, PJ est la plage PJ décalée de trois colonnes à droite)
    If I = 1 Then Set PJ = J.Range(APL) Else Set PJ = PJ.Offset(0, 3)
    'définit la plage PN (si I est égale à 1, PN est la plage H6:I73, sinon, PN est la plage PN décalée de trois colonnes à droite)
    If I = 1 Then Set PN = N.Range(APL) Else Set PN = PN.Offset(0, 3)
    TVJ = PJ 'définit le tableau des valeurs jour TVJ
    TVN = PN 'définit le tableau des valeurs nuit TVN

    'condition : si la données ligne 5 colonne 2 de TVJ est égale à la cellule cible (A5 de l'onglet S)
    If UCase(TVJ(5, 2)) = UCase(Target.Value) Then
        'définit la cellule destination jour DJ (A10 si A10 est vide, sinon, la première cellule vide de la colonne A à partir de A9)
        Set DJ = IIf(S.Range("A10").Value = "", S.Range("A10"), S.Range("A9").End(xlDown).Offset(1, 0))
        DJ.Value = TVJ(1, 2) 'récupère dans DJ la date ligne 1 colonne 2 de TVJ
        DJ.Offset(0, 1).Value = TVJ(6, 2) 'récupère dans DJ décalée d'1 colonne à droite la production ligne 6 colonne 2 de TVJ
        DJ.Offset(0, 2).Value = TVJ(10, 2) 'récupère dans DJ décalée de 2 colonnes à droite le rendement ligne 10 colonne 2 de TVJ
        DJ.Offset(0, 3).Value = TVJ(66, 2) 'récupère dans DJ décalée de 3 colonnes à droite le prix ligne 66 colonne 2 de TVJ
        DJ.Offset(0, 4).Value = TVJ(68, 2) 'récupère dans DJ décalée de 4 colonnes à droite le prix objectif ligne 68 colonne 2 de TVJ
        DJ.Offset(0, 5).Value = TVJ(65, 2) 'récupère dans DJ décalée de 5 colonnes à droite le coût ligne 65 colonne 2 de TVJ
        DJ.Offset(0, 6).Value = TVJ(67, 2) 'récupère dans DJ décalée de 6 colonnes à droite le coût objectif ligne 67 colonne 2 de TVJ
        DJ.Offset(0, 7).Value = DJ.Offset(0, 1).Value / DJ.Offset(0, 2).Value 'renvoie dans DJ décalée de7 colonnes à droite, la production divisée par le rendement
    End If 'fin de la condition
    'condition : si la données ligne 5 colonne 2 de TVN est égale à la cellule cible (A5 de l'onglet S)
    If UCase(TVN(5, 2)) = UCase(Target.Value) Then
        'définit la cellule destination jour DJ (A10 si A10 est vide, sinon, la première cellule vide de la colonne A à partir de A9)
        Set DN = IIf(S.Range("A45").Value = "", S.Range("A45"), S.Range("A44").End(xlDown).Offset(1, 0))
        DN.Value = TVN(1, 2) 'récupère dans DN la date ligne 1 colonne 2 de TVN
        DN.Offset(0, 1).Value = TVN(6, 2) 'récupère dans DN décalée d'1 colonne à droite la production ligne 6 colonne 2 de TVN
        DN.Offset(0, 2).Value = TVN(10, 2) 'récupère dans DN décalée de 2 colonnes à droite le rendement ligne 10 colonne 2 de TVN
        DN.Offset(0, 3).Value = TVN(66, 2) 'récupère dans DN décalée de 3 colonnes à droite le prix ligne 66 colonne 2 de TVN
        DN.Offset(0, 4).Value = TVN(68, 2) 'récupère dans DN décalée de 4 colonnes à droite le prix objectif ligne 68 colonne 2 de TVN
        DN.Offset(0, 5).Value = TVN(65, 2) 'récupère dans DN décalée de 5 colonnes à droite le coût ligne 65 colonne 2 de TVN
        DN.Offset(0, 6).Value = TVN(67, 2) 'récupère dans DN décalée de 6 colonnes à droite le coût objectif ligne 67 colonne 2 de TVN
        DN.Offset(0, 7).Value = DN.Offset(0, 1).Value / DN.Offset(0, 2).Value 'renvoie dans DN décalée de7 colonnes à droite, la production divisée par le rendement
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle

Application.ScreenUpdating = True affiche les rafraichissements d'écran
MsgBox "Fin du traitement des données !" 'message de fin
End Sub

Le fichier :

15richard-v01.zip (86.09 Ko)

Très bien je vais regarder tout ça.

En tout cas c'est beau je te remercie.

Bonne continuation à toi.

Rechercher des sujets similaires à "filtrage fonction liste deroulante"