je voudrai trier automatiquement la tableau dans la colonne Dossier et afficher juste la ligne dont le mot affiché dans la cellule D7 avec un macro
ça sera beaucoup mieux si ça sera fesable mais sans bouton rechercher
je vous remercie beaucoup pour votre aide
un essai par macro évènementielle, à copier dans la feuille de code de la feuille Docs:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Mot As Range
If Target.Address = "$D$7" Then
Set Plage = Range("D10:D" & Range("D" & Rows.Count).End(xlUp).Row)
Plage.EntireRow.Hidden = True
Set Mot = Plage.Find(Target)
If Not Mot Is Nothing Then Rows(Mot.Row).Hidden = False
End If
End Sub
Un autre essai avec le code suivant, logé dans le module de l'onglet "Docs" :
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal c As Range)
If c.Address = "$D$7" Then ActiveSheet.ListObjects("TPA").Range.AutoFilter Field:=3, Criteria1:=c
End Sub
Pour n'afficher que la ligne correspondant à D7, il faut bien masquer les autres ?
Si vous préférez ne masquer aucune ligne si aucune ligne ne correspond à D7:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Mot As Range
If Target.Address = "$D$7" Then
Set Plage = Range("D10:D" & Range("D" & Rows.Count).End(xlUp).Row)
Set Mot = Plage.Find(Target)
If Not Mot Is Nothing Then
Plage.EntireRow.Hidden = True
Rows(Mot.Row).Hidden = False
Else
Plage.EntireRow.Hidden = False
End If
End If
End Sub
Pour n'afficher que la ligne correspondant à D7, il faut bien masquer les autres ?
Si vous préférez ne masquer aucune ligne si aucune ligne ne correspond à D7:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Mot As Range
If Target.Address = "$D$7" Then
Set Plage = Range("D10:D" & Range("D" & Rows.Count).End(xlUp).Row)
Set Mot = Plage.Find(Target)
If Not Mot Is Nothing Then
Plage.EntireRow.Hidden = True
Rows(Mot.Row).Hidden = False
Else
Plage.EntireRow.Hidden = False
End If
End If
End Sub
Un autre essai avec le code suivant, logé dans le module de l'onglet "Docs" :
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal c As Range)
If c.Address = "$D$7" Then ActiveSheet.ListObjects("TPA").Range.AutoFilter Field:=3, Criteria1:=c
End Sub
Bonjour Double Zero,
Merci pour ton Aide, ça fonctionne aussi, le souci que j'ai eu c'est qu'une fois on efface la cellule D7 , le tableau remets pas les lignes, Paf m'a proposé la bonne solution.
Merci et Bravo à vous deux.
Pour n'afficher que la ligne correspondant à D7, il faut bien masquer les autres ?
Si vous préférez ne masquer aucune ligne si aucune ligne ne correspond à D7:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Mot As Range
If Target.Address = "$D$7" Then
Set Plage = Range("D10:D" & Range("D" & Rows.Count).End(xlUp).Row)
Set Mot = Plage.Find(Target)
If Not Mot Is Nothing Then
Plage.EntireRow.Hidden = True
Rows(Mot.Row).Hidden = False
Else
Plage.EntireRow.Hidden = False
End If
End If
End Sub
la solution fonctionne bien, j'ai eu un souci, si il y'a deux ou plus la meme valeur dans la colonne D10, il y'a que la 1er ligne dont la valeur qu'on cherche qui s'affiche.
Merci
Option Explicit
Private Sub Worksheet_Change(ByVal c As Range)
If c.Address = "$D$7" Then
Select Case c
Case "": ActiveSheet.ListObjects("TPA").Range.AutoFilter Field:=3
Case Else: ActiveSheet.ListObjects("TPA").Range.AutoFilter Field:=3, Criteria1:=c
End Select
[d7].Select
End If
End Sub
rebonsoir,
j'ai reussi à faire le filtrage à partir de la saisie dans la cellule Feuille Docs "D7", là c'était bien
le code est dans la feuille Docs
à partir de la feuille Infos je voudrais quand une celulle est active dans la colonne (B10:B), Copie la valeur de cette cellule active dans la feuille Docs (D7)
pour qu'au moins je fais pas la saisie manuel à chaque fois, malheureusement je reçois message "Erreur exécution 9" l'indice n'appartient pas à la sélection
Merci de me trouver une solution
NB : le code de filtrage dans la feuille docs fonctionne super bien
le code copie valeur active est :
Option Explicit
Private Sub Worksheet_selectionChange(ByVal Target As Range)
With Target
If .Column = 2 And .Row > 9 And .Count = 1 Then Sheets("Docs").Range("D7") = .Value
End With
End Sub
Option Explicit
Private Sub Worksheet_selectionChange(ByVal c As Range)
If c.Count > 1 Or c.Column <> 2 Or c.Row < 10 Then Exit Sub
If c <> "" Then With Sheets("Docs"): .Activate: .Range("D7") = c: End With
End Sub
Onglet "Docs" :
VB:
Option Explicit
Private Sub Worksheet_Activate()
Dim c As Range
ActiveSheet.ListObjects("TPA").Range.AutoFilter Field:=3, Criteria1:=[d7]
End Sub
Private Sub Worksheet_Change(ByVal c As Range)
If c.Address = "$D$7" Then
Select Case c
Case "": ActiveSheet.ListObjects("TPA").Range.AutoFilter Field:=3
Case Else: ActiveSheet.ListObjects("TPA").Range.AutoFilter Field:=3, Criteria1:=c
End Select
[d7].Select
End If
End Sub
Double Zero, j'ai eu un souci avec le dernier code
pourquoi quand
- j'efface la cellule D7 pour que le tableau affiche toutes ses lignes et ça marche et jy vais dans une autre feuille
- une fois que je reviens a la feuille Docs il y'a plus de tableau complet, je dois appuyer effacer cellule D7 pour que le tableau revient
je pense qu'il y'a un soucie ici
Case "": ActiveSheet.ListObjects("TPA").Range.AutoFilter Field:=3
je veux que si case est vide le filtrage est effacé
voir fichier merci pour ton aide