Microsoft 365 Tri d'un tableau impossible

homernell

XLDnaute Occasionnel
Bonjour à tous,

Je reviens vers vous une deuxième fois dans ce forum car après discutions avec certains d'entre vous la solution n'a pas été trouvé.

Je cherche tout simplement à trier les données d'un tableau, mais malheureusement cela ne fonctionne pas.

En pj le fichier en question.

Merci de vos retours
 

Pièces jointes

  • SEMAINE TEST.xlsm
    815.7 KB · Affichages: 25

homernell

XLDnaute Occasionnel
Bonsoir à tous,

Pour que le tableau de la feuille Box Office puise être trié il faut supprimer toutes les formules.

Le tableau devra être construit à l'aide d'une macro qui prendra les données dans les 3 feuilles sources.

C'est donc la conception de votre fichier qu'il faut complètement revoir.

A+
Merci à tous pour vos réponses.

Franchement vous êtes top.

Et désolé @Phil69970 si je t'ai fait perdre ton temps ce n'est pas le but
 

homernell

XLDnaute Occasionnel
Bonsoir à tous,
Après analyse des formules de la feuille, vos lignes sont dépendantes des cinémas et du nombre de salles de ceux-ci , sans parler du nombre de lignes vides avec et sans formules ( ce sont un peu des formules à la carte ...)
Je rejoins toute la communauté en vous disant que vous devriez copier manuellement ou par code votre tableau ( les valeurs ) dans une autre/nouvelle feuille et y trier ce que bon vous semble . 🙏
Merci
 

homernell

XLDnaute Occasionnel
Notre ami attend qu'on lui fournisse une macro, alors voyez celle-ci dans Module2 :
VB:
Sub MAJ()
Dim feuilles, d As Object, w As Worksheet, tablo, i&, x$, resu(), n&, report As Variant, nn&
Set feuilles = Sheets(Array("Cezanne", "Renoir", "Mazarin")) 'liste des cinémas
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For Each w In feuilles
    d.RemoveAll
    tablo = w.Range("A1", w.UsedRange).Resize(, 32) 'matrice, plus rapide
    For i = 5 To UBound(tablo)
        If LCase(tablo(i, 2)) = "salle" Then
            If tablo(i, 4) <> "" Then
                x = tablo(i, 4) & Chr(1) & tablo(i + 1, 3) & Chr(1) & tablo(i + 2, 3)
                If Not d.exists(x) Then
                    ReDim Preserve resu(8, n) 'base 0
                    d(x) = n 'mémorise la ligne
                    resu(0, n) = w.Name
                    If IsDate(tablo(i + 2, 3)) Then resu(1, n) = CDbl(CDate(tablo(i + 2, 3)))
                    resu(2, n) = tablo(i, 4) 'Film
                    resu(3, n) = tablo(i + 1, 6) 'Distrib
                    resu(4, n) = tablo(i + 1, 3) 'Sem
                    report = Application.VLookup(tablo(i, 4), Sheets("Cumul Box Office").Columns("D:J"), 7, 0)
                    If IsNumeric(report) Then resu(7, n) = report
                    n = n + 1
                End If
                nn = d(x)
                resu(6, nn) = resu(6, nn) + Val(tablo(i, 32))
                resu(8, nn) = resu(6, nn) + resu(7, nn)
            End If
        End If
Next i, w
'---restitution---
Application.ScreenUpdating = False
With Sheets("Box Office").[B5:J133]
    .ClearContents 'RAZ
    .Rows.Hidden = True 'masque
    If n > .Rows.Count Then MsgBox "Pas assez de place !", 48: Exit Sub
    If n Then
        .Resize(n).EntireRow.Hidden = False 'affiche
        .Resize(n) = Application.Transpose(resu) 'Transpose est limitée à 65536 lignes
    End If
End With
End Sub
Cliquez sur le bouton MAJ de la feuille "Box Office".

Maintenant le tri du tableau est possible.

Bonne nuit.
Excellent merci
 

Discussions similaires

Réponses
2
Affichages
236

Statistiques des forums

Discussions
311 730
Messages
2 081 978
Membres
101 854
dernier inscrit
micmag26