Maccro filtrage et triage

bonjour a tous, je rencontre un petit soucis

j'ai un fichier excel dans lequel,j'importe un fichier texte, je fais un premier filtrage

si dans la ligne x, la cellule de la même ligne et colonne "trotthle" est supérieur à une valeur d'une cellule fixe, alors on donne la valeur initiale, sinon "" (vide)

je me retrouve donc avec une sélection avec des lignes vierges en plein milieu, donc seconde macro, je sélectionne tout, et je fais un triage du plus grand au plus petit, et je me retrouve avec toutes les cellules vides en bas, ensuite j enregistre en format txt

l'idée serait déjà de faire un seul et même bouton pour la maccro, mais c est sur tout que j a une erreur sur le triage, il a pas l'air d'aimer la sélection de 200 000 lignes

Bonsoir

ci joint une proposition qui refait le tout en une fois...si j'ai bien compris

fred

https://www.cjoint.com/c/GHewrYadOXM

Sub triage()
Dim tbi()
Dim tbs()
Dim Valinit As Integer
Dim lg
Dim i, j

Valinit = Sheets("log brut").[C1]

tbi = Sheets("log brut").Range("A4:E" & Sheets("log brut").[E3].CurrentRegion.Rows.Count).Value
ReDim tbs(LBound(tbi, 1) To UBound(tbi, 1), LBound(tbi, 2) To UBound(tbi, 2))
lg = LBound(tbs, 1)

For i = LBound(tbi, 1) To UBound(tbi, 1)
If tbi(i, 5) >= Valinit Then
    For j = LBound(tbi, 2) To UBound(tbi, 2)
         tbs(lg, j) = tbi(i, j)
    Next j
    lg = lg + 1
End If

Next i

With Sheets("log filtrée")
    'efface les données présentes sur la feuille de sortie
    .[A1].CurrentRegion.ClearContents
    'colle les données
    .[A2].Resize(UBound(tbs, 1), UBound(tbs, 2)) = tbs
    'copie de l'entete
    Sheets("log brut").[A3:E3].Copy .[A1]
    'filtrage par ordre croissant
    .[A1:E4].AutoFilter
    .Range("A1:E" & .[A1].CurrentRegion.Rows.Count).Sort Key1:=.[E1], Order1:=xlDescending, Header:=xlGuess
    .AutoFilterMode = False

    .Copy
'ChDir "C:\Users\adrien\Dropbox\carto supra\Adrien Roussel - LOGS"
      ActiveWorkbook.SaveAs Filename:="C:\Users\adrien\Dropbox\carto supra\Adrien Roussel - LOGS\TRIAGE LOG.txt", FileFormat:=xlText, AddToMRU:=False
'      pour test
'      ActiveWorkbook.SaveAs Filename:="C:\Users\Fred\Downloads\TRIAGE LOG.txt", FileFormat:=xlText, AddToMRU:=False
       ActiveWorkbook.Close savechanges:=False
End With
' A voir si cela est necessaire
'    ActiveWorkbook.Save
'    ActiveWorkbook.SaveAs Filename:= _
'        "C:\Users\adrien\Dropbox\carto supra\Adrien Roussel - LOGS\TRIAGE LOG.xlsm", _
'        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

oui voici

https://www.cjoint.com/c/GHewgmEjfxK

en fait l'idée pour faire simple, c'est une seule macro, qui importe mon fichier txt (en racine du fichier excel, avec le nom log.txt

ne fait apparaitre que les valeur dont le throttle est supérieur à xx% défini dans une cellule fixe, toutes les lignes dont le throttle est inférieur à xx% deviennent vide

le résultat est une feuille parsemé de ligne vide, donc on fait un tri par ordre de grandeur conservant l'entête, et plaçant toutes les lignes vide à la fin

la colonne throttle peut disparaitre, une fois le triage fait, elle n' a plus d'importance, ensuite on exporte ce fichier en .txt séparateur en racine du fichier excel avec le nom log filtrée.txt

Bonjour à tous

Un essai à tester.

Sans tri et sans sauvegarde.

Cela te convient-il ?

Bye !

11triage-log-v1.xlsm (681.04 Ko)

impeccable, seul bémole, c est que le résultat doit être sur une autre feuille prête à être enregistré au format .txt, sinon il va vouloir enregistrer la valeur limite de throttle

ou sinon on laisse sur la première feuille, on supprime la seconde, mais on ouvre une boite de dialogue qui demande quel valeur de throttle on veut pour filtrer, ça éviterais qu'il me mette le message comme quoi si je dois exporter la feuille active, tout et tout

est ce que c'est possible que la macro fasse l'import du fichier log.txt en racine, et l enregistrement de log filtrée.txt en racine?

merci

fred2406 a écrit :

Bonsoir

ci joint une proposition qui refait le tout en une fois...si j'ai bien compris

fred

salut j ai essayé ta version, ça a l'air de marcher, par contre comme le fichier est sur une dropbox, cela veut dire que je peux donc l ouvrir de plusieurs ordi différent, et donc le chemin d acces au log.txt, et enregistrement, sont différent

il existait pas un code qui disait de prendre le fichier en racine du fichier excel?

bonjour

tu as marqué le post comme résolu mais bon tu me pose quand même une question...

alors si pour toi racine = le dossier ou se trouve le fichier excel avec la macro voici une proposition mais n'ayant pas de fichier txt a tester reste a savoir si cela fonctionne....

Sub triage()
Dim tbi()
Dim tbs()
Dim Valinit As Integer
Dim lg
Dim i, j
Dim Wsd, Wbs

'importation du fichier txt
Set Wsd = ThisWorkbook.Sheets("log brut")
Wsd.[A3].CurrentRegion.ClearContents
Workbooks.OpenText Filename:=ThisWorkbook.Path & "\" & "log.txt", Origin _
        :=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
Set Wbs = ActiveWorkbook
Wbs.Sheets(1).[A1].CurrentRegion.Copy Wsd.[A3]
Wbs.Close False

Valinit = Wsd.[C1]
'Traitement

tbi = Wsd.Range("A4:E" & Wsd.[E3].CurrentRegion.Rows.Count).Value
ReDim tbs(LBound(tbi, 1) To UBound(tbi, 1), LBound(tbi, 2) To UBound(tbi, 2))
lg = LBound(tbs, 1)

For i = LBound(tbi, 1) To UBound(tbi, 1)
    If tbi(i, 5) >= Valinit Then
        For j = LBound(tbi, 2) To UBound(tbi, 2)
             tbs(lg, j) = tbi(i, j)
        Next j
        lg = lg + 1
    End If
Next i
With Sheets("log filtrée")
    'efface les données présentes sur la feuille de sortie
    .[A1].CurrentRegion.ClearContents
    'colle les données
    .[A2].Resize(UBound(tbs, 1), UBound(tbs, 2)) = tbs
    'copie de l'entete
    Wsd.[A3:E3].Copy .[A1]
    'filtrage par ordre croissant
    .[A1:E4].AutoFilter
    .Range("A1:E" & .[A1].CurrentRegion.Rows.Count).Sort Key1:=.[E1], Order1:=xlDescending, Header:=xlGuess
    .AutoFilterMode = False

    .Copy
'ChDir "C:\Users\adrien\Dropbox\carto supra\Adrien Roussel - LOGS"
'      ActiveWorkbook.SaveAs Filename:="C:\Users\adrien\Dropbox\carto supra\Adrien Roussel - LOGS\TRIAGE LOG.txt", FileFormat:=xlText, AddToMRU:=False
      ActiveWorkbook.SaveAs Filename:="ThisWorkbook.Path & " \ " & TRIAGE LOG.txt", FileFormat:=xlText, AddToMRU:=False
       ActiveWorkbook.Close savechanges:=False
End With
' A voir si cela est necessaire
'    ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "TRIAGE LOG.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

mais l'import du fichier txt dans le fichier contenant la macro est-il obligatoire ?? sinon on peut simplement mettre les données en mémoire sans les copiées dans ce fichier

Fred

v tec a écrit :

le résultat doit être sur une autre feuille prête à être enregistré au format .txt,

Tu veux dire sur un autre classeur ?

Alors voilà :

Bye !

7triage-log-v2.xlsm (681.70 Ko)

Ba j avais pas mis résolu, la c est enlevé ?

Je test vos fichiers

salut fred, alors ça a l'air de marcher, j ai enlever qq erreur de "" sur le liens d enregistrement de log filtrée.txt

par contre j ai un message d erreur

?

Bonsoir donne un fichier txt de test pour voir

Fred

salut voici

mais logfiltrée, n'est que le resultat de ta macro, donc je ne vois pas pourquoi il dit qu il est "occupé"

Je regarderai demain la je suis avec mon téléphone. ...

Fred

des nouvelles fred?

parce que je comprend pas le message , le fichier log.txt n est pas proteger en ecriture, ni ouvert

c est bon j ai trouver

j ai rectifier le lien d enregistrement

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "logmacromap.txt"

j avais des ecrit " \ "

du coup j ai pu voir le resultat dans le fichier texte, et il ne tiens pas compte du filtre de la colonne throttle, variable contenu dans une cellule, dans mon cas present c est 8, toutes les lignes dont le throttle est en dessous de 8, on les effaces

Bonjour

j'ai mis du temps a trouver ce qui n'allait pas.....

en fait dans le fichier de départ contient des point "." au lieu de virgule "," ainsi Les chiffres sont donc considérés comme du texte. et c'est la raison pour laquelle lorsque que je faisait la comparaison entre les deux cela ne marchait pas....

ci joint ton fichier modifié

fred

https://www.cjoint.com/c/GHjs2z7HFsM

mercica marche tres bien, j ai modifier le separateur d'importation

re bonsoir dans ce cas

merci

Fred

Rechercher des sujets similaires à "maccro filtrage triage"