Bonsoir à toutes et à tous,
Je consulte votre forum, les tutoriels et les cours très régulièrement en revanche c'est la première fois que je suis amenée à poster, je m'excuse donc par avance si je ne suis pas claire. N'hésitez pas à me le faire savoir, je reformulerai afin d'éclaircir mes propos
Voici le contexte :
Un tableau renseigne pour chaque commercial, et par produits, les sites de ventes à fournir (il y en a 4 en tout, renseignés sur trois colonnes sachant que leur ordre est important, un produit est d'abord envoyé sur le site1, puis le site2, puis le 3. A noter également, un site n'apparaît qu'une fois sur une ligne). Ce tableau fait maintenant plus de 1000 lignes, je voudrai donc pouvoir filtrer sur les sites. L'utilisation des filtres automatiques ne m'arrange pas parce que ça filtre sur une seule colonne à la fois. Or, je voudrai voir apparaître la totalité des lignes où figure le site que je sélectionne.
J'ai d'abord créé dans une cellule un menu déroulant dans lequel apparaît le nom de chaque site, ainsi que "TOUS", parce que je voudrai pouvoir faire apparaître le tableau en totalité si aucun site n'est sélectionné.
Après des essais infructueux par l'utilisation de AutoFilter, j'ai fouillé ici et ai trouvé le tuto sur les filtres avancés (2012 de Philippe Tulliez). J'ai donc créé un critère sous forme de formule où C1 est la cellule du menu déroulant et C3;D3;E3 les premières lignes renseignées du tableau de données (la formule étant : =OU(C3=$C$1;D3=$C$1;E3=$C$1)).
Pour ensuite écrire le code suivant qui marche mais qui m'affiche, au fur et à mesure que je l'utilise, de moins en moins de lignes. Pour finir par un message d'erreur 1004 d'abord sur l'événement ShowAllData et ensuite sur la nécessité d'avoir au moins deux lignes dans le fichier source pour pouvoir exécuter la macro. Et c'est là où je bute et que je sollicite votre aide, parce que je n'arrive pas à trouver dans ce que j'ai écris, ce qui peut créer perte (ou ce que je n'écris pas, comme une condition pour arrêter la macro mais à quel moment ?)
Bref, voici le code :
Je suis désolée d'avoir été un peu longue, j'ai essayé de circonstancier la situation. Dans tous les cas, je remercie par avance ceux qui reprendront le temps de lire, et parmi eux, ceux qui prendront le temps de répondre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Sub Worksheet_Change(ByVal Target As Range) Dim menu As String If Not Intersect(Target, Range("C1")) Is Nothing Then Application.ScreenUpdating = False menu = Range("C1").Value If menu = "TOUS" Then ActiveSheet.ShowAllData Else Range("A2:E" & [A65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("G2:G3"), Unique:=False End If Application.ScreenUpdating = True End If End Sub
Merci
Didi
Partager