figer une partie de classeur et filtrer une autre partie

FranQuent

XLDnaute Nouveau
Bonjour à tous,

J'aimerai filtrer une colonne dans un onglet mais le problème est que j'ai deux tableau dans cet onglet et quand je filtremon tableau de gauche cela cache des zones de mon tableau de droite alors que je veux que cela reste visible
Avez vous la solution svp?
 

job75

XLDnaute Barbatruc
Re : figer une partie de classeur et filtrer une autre partie

Bonjour FranQuent, ERIC S,

On peut faire ça mais c'est vraiment pour le fun.

La macro vaut le coup d'oeil :

Code:
Private Sub Worksheet_Calculate()
Dim P As Range, derlig&, n As Byte
Dim i&, P1 As Range, s As Range
Application.ScreenUpdating = False
1 Set P = Range([Table1], [Table2])
derlig = P.Row + P.Rows.Count - 1
n = n + 1
If Me.AutoFilterMode Then n = _
  IIf(Intersect(AutoFilter.Range, [Table1]) Is Nothing, 1, 2)
Set P = Range("table" & n)
With Workbooks.Add.Sheets(1) 'nouveau document
  '---copie du tableau ligne par ligne---
  i = 1
  While P.Rows(i).Row <= derlig
    If P.Rows(i).EntireRow.Hidden Then .Cells(i, 1) = 1
    If i <= P.Rows.Count Then P.Rows(i).Copy .Cells(i, 2)
    i = i + 1
  Wend
  Set P1 = Intersect(.[B:IV], .UsedRange)
End With
'---suppression des lignes vides---
Set s = Nothing
For i = 1 To P1.Rows.Count
  If Application.CountA(P1.Rows(i)) = 0 Then _
    Set s = Union(P1.Rows(i), IIf(s Is Nothing, P1.Rows(i), s))
Next
If Not s Is Nothing Then s.Delete xlUp
'---insertion de lignes---
2 For i = 1 To P1.Rows.Count
  If P1(i, 0) * Application.CountA(P1.Rows(i)) Then
    P1.Rows(i).Insert xlDown
    If i = 1 Then Set P1 = P1.Parent.Range(P1(0, 1), P1)
    GoTo 2
  End If
Next
'---nouveau tableau---
Application.EnableEvents = False
P.Clear
P1.Copy P(1, 1)
P(1, 1).Resize(P1.Rows.Count, P1.Columns.Count).Name = "Table" & n
P1.Parent.Parent.Close False 'fermeture du nouveau document
If Not Me.AutoFilterMode And n = 1 Then GoTo 1
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
La fonction SOUS.TOTAL dans les cellules B4 et G6 crée l'événement Calculate quand on filtre.

Fichier joint.

Edit : j'ai ajouté Application.ScreenUpdating = True à la fin (pour Excel 2007/2010) .

A+
 

Pièces jointes

  • Filtre bizarre(1).xls
    51 KB · Affichages: 52
Dernière édition:

job75

XLDnaute Barbatruc
Re : figer une partie de classeur et filtrer une autre partie

Re,

J'irai voir sur Excel 2010 quand ma tendre moitié aura fini de l'utiliser.

En attendant peux-tu me dire Eric sur quelle ligne ça coince ?

Edit : peut-être mettre Application.ScreenUpdating = True à la fin ??

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : figer une partie de classeur et filtrer une autre partie

Re,

Testé sous Excel 2010, il faut en effet Application.ScreenUpdating = True à la fin.

Je corrige le post #3.

En général cette instruction est inutile, mais il faut tester...

A+
 

job75

XLDnaute Barbatruc
Re : figer une partie de classeur et filtrer une autre partie

Re,

Le résultat n'était pas bon quand on filtre "a1" puis "a2".

Au lieu de définir la plage P1 par :

Code:
Set P1 = Intersect(.[B:IV], .UsedRange)
il faut :

Code:
Set P1 = .Range("B1", Intersect(.[B:IV], .UsedRange))
Pas simple cette macro.

Fichier (2).

A+
 

Pièces jointes

  • Filtre bizarre(2).xls
    48.5 KB · Affichages: 61

job75

XLDnaute Barbatruc
Re : figer une partie de classeur et filtrer une autre partie

Bonjour le fil, le forum,

Comme j'ai du temps à perdre voici une solution avec des images :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'création des images de chaque tableau
If Intersect(Target, Union([Table1], [Table2])) Is Nothing Then Exit Sub
Dim n As Byte
Application.ScreenUpdating = False
On Error Resume Next
Me.ShowAllData
For n = 1 To 2
  Me.Shapes("Image" & n).Delete
  Range("Table" & n).CopyPicture
  With Me.Pictures.Paste
    .Name = "Image" & n
    .ShapeRange.Fill.Visible = msoTrue
    .Visible = False
  End With
Next
[IV65536].Copy [IV65536] 'vide le presse-papier
End Sub

Private Sub Worksheet_Calculate()
Dim f As Filter, n As Byte
On Error Resume Next 'si les images n'ont pas été créées
Me.Shapes("Image1").Visible = False
Me.Shapes("Image2").Visible = False
If Me.AutoFilterMode = False Then Exit Sub
For Each f In Me.AutoFilter.Filters
  If f.On Then n = 1: Exit For
Next
If n = 0 Then Exit Sub
n = 1 - (Intersect(Me.AutoFilter.Range, [Table2]) Is Nothing)
With Me.Shapes("Image" & n)
  .Left = Range("Table" & n).Left
  .Top = Range("Table" & n).Top
  .Visible = True
End With
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Filtre bizarre avec images(1).xls
    56.5 KB · Affichages: 62

FranQuent

XLDnaute Nouveau
Re : figer une partie de classeur et filtrer une autre partie

Bonjour Job75
Je relance le sujet du filtre, car je n'ai pas saisie totalement le code, meme pas du tout:(
Pour une fois je joins à mes propos le fichier en question.
En fait je cherche à filtrer par "CND" (dans le tableau de gauche) sans que cela impact le tableau de droite.
Est-ce possible?
Merci de votre réponse
Cdlt
Regarde la pièce jointe filtre.xlsx
 

Pièces jointes

  • filtre.xlsx
    21.3 KB · Affichages: 69
  • filtre.xlsx
    21.3 KB · Affichages: 65

job75

XLDnaute Barbatruc
Re : figer une partie de classeur et filtrer une autre partie

Bonjour FranQuent,

J'accepte volontiers que vous ne compreniez pas la macro (1ère solution).

Mais l'adaptation à votre fichier est très facile, pour peu que vous lisiez mes posts :rolleyes:

Ci-joint votre fichier adapté avec la macro et le filtre appliqué au 1er tableau.

La fonction SOUS.TOTAL qui déclenche la macro est en cellule A3.

Et je rappelle que les 2 tableaux sont nommés Table1 et Table2.

A+
 

Pièces jointes

  • filtre(1).xls
    69.5 KB · Affichages: 56
  • filtre(1).xls
    69.5 KB · Affichages: 62
  • filtre(1).xls
    69.5 KB · Affichages: 61

FranQuent

XLDnaute Nouveau
Re : figer une partie de classeur et filtrer une autre partie

Merci, j'ai bien lu tout les postes mais cette histoire d'image n'allait pas car on ne voulais pas d'images mais un tableau avec des formules.
Le code adapté paraît parfait, par contre il faut que je renomme mes Table1 et Table2 car lors de l’exécution dans mon fichier d'origine il y a une erreur au niveau de:
"1 Set P = Range([Table1], [Table2])"

Merci de votre aide précieuse pour mon travail
 

FranQuent

XLDnaute Nouveau
Re : figer une partie de classeur et filtrer une autre partie

Oui c'est sur que j'ai du mal à tout comprendre, mais n'y a-t-il pas un "Selection.PasteSpecial Paste:=xlPasteFormulas" à insérer quelque part ?

C'est dommage de s'arrêter si prêt du but ... Parce que c'est une très belle macro qui fait chauffer les neurones... ;) mais il ne manque pas grand chose...
 

Discussions similaires

Statistiques des forums

Discussions
312 242
Messages
2 086 536
Membres
103 244
dernier inscrit
lavitzdecreu