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
524

Statistiques des forums

Discussions
312 239
Messages
2 086 495
Membres
103 236
dernier inscrit
Menni