XL 2010 Max dans TCD

J

JPHI

Guest
Bonjour

Dans le TCD ci-joint, je voudrais pouvoir trouver en VBA la valeur Max en colonne C et qu'une fouis la valeur trouvée, une nouvelle feuille s'ouvre avec les lignes correspondant à ce nombre max
Quelqu'un a une idée SVP?
Merci
 

Pièces jointes

  • MAX.xlsx
    168.7 KB · Affichages: 27

chris

XLDnaute Barbatruc
Bonjour

Si ton TCD reste classé dans l'ordre croissant

Code:
    With ActiveSheet.PivotTables(1).DataBodyRange
        y = .Rows.Count + .Cells(1, 1).Row - 2
    End With
    ActiveSheet.Cells(y, 3).ShowDetail = True

ActiveSheet à adapter si ta macro n'est pas appelé de la feuille

Edit : Tu peux aussi adapter le 3 et remplacer par .Cells(1, 1).Column si tu gardes une seule colonne mais que le TCD peux bouger dans la feuille
 

chris

XLDnaute Barbatruc
Re
Code:
    With ActiveSheet.PivotTables(1).DataBodyRange
        y = .Rows.Count + .Cells(1, 1).Row - 2
        Nom = ActiveSheet.Cells(y, .Column).Offset(0, -.Columns.Count).Value
        ActiveSheet.Cells(y, .Column).ShowDetail = True
    End With
    ActiveSheet.Name = Nom
A noter qu'il faudrait sans doute tester que le feuille n'existe pas avant... car sinon le renommage va planter...
 
J

JPHI

Guest
Bonjour

Suite à des modif dans mon fichier, je ne parviens plus à utiliser cette macro :(
Dans le premier TCD du fichier joint, je souhaite trouver dans la colonne B l'item qui a la plus grosse valeur dans la colonne C à savoir W76P058.$w$
Et ensuite qu'une fois cette valeur trouvée, une nouvelle feuille s'ouvre avec tous les items associés soit 85 lignes
Peux-tu adapter le code ci-dessous en conséquence?

Sub Max()

Sheets("TCD").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique3").DataBodyRange
y = .Rows.Count + .Cells(1, 1).Row - 2
Nom = ActiveSheet.Cells(y, .Column).Offset(0, -.Columns.Count).Value
ActiveSheet.Cells(y, .Column).ShowDetail = True
End With
ActiveSheet.Name = Nom
Selection.AutoFilter
End Sub

Merci beaucoup!!!
 

Pièces jointes

  • MAX.xlsm
    128 KB · Affichages: 29
J

JPHI

Guest
merci chris
mais la macro plante sur la ligne en rouge...

Sub Max()

Sheets("TCD").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique3").DataBodyRange
'y = .Rows.Count + .Cells(1, 1).Row - 2
y = .Rows.Count + .Cells(1, 1).Row
Nom = ActiveSheet.Cells(y, .Column).Offset(0, -.Columns.Count).Value
ActiveSheet.Cells(y, .Column).ShowDetail = True
End With
ActiveSheet.Name = Nom
Selection.AutoFilter
End Sub
 
J

JPHI

Guest
Bonjour le forum, Chris
Par contre chris, j'ai besoin d'une dernière évolution
Je voudrais que lorsque je ferme mon classeur principal, cette feuille qui a été nommée automatiquement ActiveSheet.Name = Nom
soit supprimée à la fermeture
Aurais tu une idée stp??
Merci ;)
 

chris

XLDnaute Barbatruc
Bonjour

Placer
Code:
Public Nom
en tête du module VBA au-dessus de toute macros

Et dans le module du Workbook :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Nom = "" Then Exit Sub
    Application.DisplayAlerts = False
    Worksheets(Nom).Delete
    Application.DisplayAlerts = True
End Sub

Voir s'il faut enregistrer au cas où une sauvegarde aurait été faite pendant que la feuille existait.
 

Discussions similaires

Réponses
16
Affichages
431
Réponses
5
Affichages
165