Macro tri sur resultats de formules

STEF67

XLDnaute Nouveau
Bonjour à tous,
J'avais sollicité le forum pour une marcro de tri avec les "-" systématiquement à la fin. L'un d'entre vous dont le nom m'echappe (désolé car je n'arrive plus à retrouver le post) m'avais trouvé une solution qui marche bien.
Avec
Call raz & Call remettre en debut et fin de chaque macro
puis

Sub raz()
Dim i As Long, nbl As Long, cel As Range
nbl = Range("B65500").End(xlUp).Row
For Each cel In Range("B6:b" & CStr(nbl))
If cel.Value = "-" Then cel.ClearContents
Next
End Sub
Sub remettre()
Dim i As Long, nbl As Long, cel As Range
nbl = Range("B65500").End(xlUp).Row
For Each cel In Range("B6:b" & CStr(nbl))
If cel.Value = "" Then cel.Value = "-"
Next

End Sub

Le pb est que le tri ne porte pas en fait sur des données brutes mais sur les resultats de formules.(je ne l'avais pas précisé Mea Culpa !) cf PJ
Cette macro efface donc les formules et avec à la mise à jour ultérieure de la base je suis planté
Avec vous une solution ?
Grand merci d'avance
 

Pièces jointes

  • ez.xls
    32 KB · Affichages: 49
  • ez.xls
    32 KB · Affichages: 50
  • ez.xls
    32 KB · Affichages: 45

Gorfael

XLDnaute Barbatruc
Re : Macro tri sur resultats de formules

STEF67 à dit:
Bonjour à tous,
J'avais sollicité le forum pour une marcro de tri avec les "-" systématiquement à la fin. L'un d'entre vous dont le nom m'echappe (désolé car je n'arrive plus à retrouver le post) m'avais trouvé une solution qui marche bien.
Avec
Call raz & Call remettre en debut et fin de chaque macro
puis

Sub raz()
Dim i As Long, nbl As Long, cel As Range
nbl = Range("B65500").End(xlUp).Row
For Each cel In Range("B6:b" & CStr(nbl))
If cel.Value = "-" Then cel.ClearContents
Next
End Sub
Sub remettre()
Dim i As Long, nbl As Long, cel As Range
nbl = Range("B65500").End(xlUp).Row
For Each cel In Range("B6:b" & CStr(nbl))
If cel.Value = "" Then cel.Value = "-"
Next

End Sub

Le pb est que le tri ne porte pas en fait sur des données brutes mais sur les resultats de formules.(je ne l'avais pas précisé Mea Culpa !) cf PJ
Cette macro efface donc les formules et avec à la mise à jour ultérieure de la base je suis planté
Avec vous une solution ?
Grand merci d'avance
Salut
Une possubilité :
Tu selectionnes ta zone de valeur
tu la copies Dans la colonne C (en Pastespeciel => Xlvalue)
tu supprimes dans C les - (si j'ai bien compris
tu tries A:C sur C
Tu supprimes C

Avec les macros apprentissages, tu devrais avoir ton code.
Pour l'épuration de celui-ci, tu peux le mettre sur un poste, on
t'aideras
A+
 

STEF67

XLDnaute Nouveau
Re : Macro tri sur resultats de formules

Merci Gorfael,
Ton idée est astucieuse et me permet d'avoir une solution (cf PJ)
Mais n'y a t il pas une façon plus simple d'ecrire le code et même eviter de passer par l'astuce de la colonne C ?
Merci
Sub H()
Range("B6:B15").Select
Selection.Copy
Range("C6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A6:C15").Select
Call raz
Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Call remettre
Range("C6:C15").Select
Selection.Delete Shift:=xlToLeft

End Sub
Sub raz()
Dim i As Long, nbl As Long, cel As Range
nbl = Range("C65500").End(xlUp).Row
For Each cel In Range("C6:C" & CStr(nbl))
If cel.Value = "-" Then cel.ClearContents
Next
End Sub
Sub remettre()
Dim i As Long, nbl As Long, cel As Range
nbl = Range("C65500").End(xlUp).Row
For Each cel In Range("C6:C" & CStr(nbl))
If cel.Value = "" Then cel.Value = "-"
Next

End Sub
 

Pièces jointes

  • EZ1.xls
    36 KB · Affichages: 49

Gorfael

XLDnaute Barbatruc
Re : Macro tri sur resultats de formules

STEF67 à dit:
Merci Gorfael,
Ton idée est astucieuse et me permet d'avoir une solution (cf PJ)
Mais n'y a t il pas une façon plus simple d'ecrire le code et même eviter de passer par l'astuce de la colonne C ?
Merci
Sub H()
Range("B6:B15").Select
Selection.Copy
Range("C6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A6:C15").Select
Call raz
Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Call remettre
Range("C6:C15").Select
Selection.Delete Shift:=xlToLeft

End Sub
Sub raz()
Dim i As Long, nbl As Long, cel As Range
nbl = Range("C65500").End(xlUp).Row
For Each cel In Range("C6:C" & CStr(nbl))
If cel.Value = "-" Then cel.ClearContents
Next
End Sub
Sub remettre()
Dim i As Long, nbl As Long, cel As Range
nbl = Range("C65500").End(xlUp).Row
For Each cel In Range("C6:C" & CStr(nbl))
If cel.Value = "" Then cel.Value = "-"
Next

End Sub
Salut
Test macros, un peu modifiées
Code:
Sub alpha()
Range("A6:B15").Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A4").Select
End Sub
Sub H()
Dim Cel As Range
Range("B6:B15").Copy
Range("C6").PasteSpecial Paste:=xlPasteValues
For Each Cel In Range([C6], [C15])
If Cel.Value = "-" Then Cel.ClearContents
Next
Range("A6:C15").Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("C6:C15").Delete Shift:=xlToLeft
Range("A4").Select
End Sub
Sub B()
Range("A6:B15").Sort Key1:=Range("B6"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A4").Select
End Sub
Existe-t-il une autre méthode : oui
plus simple : non, il faut que tu fasse un tri dans la macro, et ce sera moins rapide
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
153
Réponses
12
Affichages
252
Réponses
1
Affichages
168

Statistiques des forums

Discussions
312 249
Messages
2 086 598
Membres
103 253
dernier inscrit
alscanv974