XL 2010 Macro pour trier séries de lignes contenant des formules

fablog

XLDnaute Occasionnel
Bonjour tout le monde,

Je pense que la solution à mon problème nécessite une macro car avec les fonctions de trie cela ne fonctionne pas correctement.
Je veux trier mon tableau dans cet ordre:
- Superviseur
- CIDP
- Information (en gardant l'ordre des types d'information)

Le problème est que j'ai des formules de recopie dans les cellules sans couleur des colonnes A à E et c'est ça qui met le bazar.

Merci par avance pour votre aide!
 

Pièces jointes

  • Tableau.xlsx
    30.5 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re,

Utilisez plutôt cette macro qui est 2 fois plus rapide que la précédente :
Code:
Sub Trier()
Dim a As Range
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
With [A3].CurrentRegion.Columns(2).Resize(, 3)
    .NumberFormat = "General" 'format Standard
    For Each a In .SpecialCells(xlCellTypeBlanks).Areas
        a.FormulaR1C1 = "=IF(RC5=R4C5,""zzz"",R[-1]C)"
    Next
    .EntireRow.Sort .Columns(3), xlAscending, .Columns(1), , xlAscending, Header:=xlYes 'tri sur 2 colonnes
    .SpecialCells(xlCellTypeFormulas).ClearContents 'efface les formules
    .NumberFormat = "@" 'format Texte
End With
End Sub
Fichier (2).

J'ai testé en recopiant le tableau sur 36 000 lignes, le tri se fait chez moi en 43 secondes.

Je vais voir si l'on peut faire mieux en utilisant un tableau VBA.

A+
 

Pièces jointes

  • Tableau trié par VBA(2).xlsm
    39.4 KB · Affichages: 13

job75

XLDnaute Barbatruc
Re,

En effet avec un tableau VBA c'est bien plus rapide :
Code:
Sub Trier()
Dim t, ncol%, x$, i&, j%
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
With [A3].CurrentRegion.Columns(2).Resize(, 4)
    t = .Value 'tableau VBA, plus rapide
    ncol = UBound(t, 2) - 1
    x = t(2, 4)
    For i = 2 To UBound(t)
        For j = 1 To ncol
            If t(i, j) = "" Then If t(i, 4) = x Then t(i, j) = "zzz" Else t(i, j) = "=R[-1]C"
    Next j, i
    .NumberFormat = "General" 'format Standard
    .Resize(, 3).FormulaR1C1 = t 'restitution
    .EntireRow.Sort .Columns(3), xlAscending, .Columns(1), , xlAscending, Header:=xlYes 'tri sur 2 colonnes
    .SpecialCells(xlCellTypeFormulas).ClearContents 'efface les formules
    .Replace "zzz", ""
    .NumberFormat = "@" 'format Texte
End With
End Sub
Fichier (3).

Sur 36 000 lignes la macro s'exécute chez moi en 6,7 secondes.

A+
 

Pièces jointes

  • Tableau trié par VBA(3).xlsm
    41 KB · Affichages: 16

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Re,

En effet avec un tableau VBA c'est bien plus rapide :
A+
:rolleyes::);):p
#7, #5 , #3
fablog à dit:
Je rappel que ma demande consiste en une macro pas dans des changements de structure de mon fichier.
:(:(:(:confused::oops:o_O macro (tableau VBA) testée sur : https://www.excel-downloads.com/attachments/tableau-xlsx.1018751/
upload_2018-10-5_15-56-21.png
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 909
Membres
101 836
dernier inscrit
karmon