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

  • Initiateur de la discussion Initiateur de la discussion fablog
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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

Bonsour®
Re,

En effet avec un tableau VBA c'est bien plus rapide :
A+
🙄🙂😉😛
#7, #5 , #3
fablog à dit:
Je rappel que ma demande consiste en une macro pas dans des changements de structure de mon fichier.
🙁🙁🙁😕😳😵 macro (tableau VBA) testée sur : https://www.excel-downloads.com/attachments/tableau-xlsx.1018751/
upload_2018-10-5_15-56-21.png
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour