IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tri numérique et format


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 8
    Par défaut Tri numérique et format
    Bonjour à tous,

    J'aurais besoin de votre aide concernant la création d'une macro. J'ai utilisé l'outil "Enregistrer une macro".
    J'ai sur mon fichier de base des valeurs avec des "." que je souhaite transformer en "," pour pas voir effectuer un tri numérique et ne conserver que les valeurs >5,0. Le problème, c'est que la macro élimine tous les nombres entiers et ne conserve que les nombres avec des virgules ou inversement selon les essais de code.
    J'ai beau changer le format en "Nombre", cela ne marche toujours pas. Pourtant quand je le fais manuellement directement dans le fichier, il n'y a pas de problème.

    De plus, le nom du premier onglet étant différent pour chaque fichier que je dois analyser, il faut un nom identique de la feuille 1 pour appliquer la macro en toute circonstance.
    J'ai essayé avec Sheet(1) ou ActiveWorkbook.Worksheets(1) mais cela ne semble pas fonctionner.

    Je vous joins en pièce-jointe quelques lignes d'un fichier type.

    Merci d'avance pour vos réponses !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Sub Filt()
    '
    ' Filt Macro
    '
    ' Touche de raccourci du clavier: Ctrl+Shift+K
    '
        Columns("T:T").Select
        Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Selection.NumberFormat = "0,00"
        Range("C1").Select
        Selection.AutoFilter
        ActiveWorkbook.Worksheets("G.variant_report.table1").AutoFilter.Sort. _
            SortFields.Clear
        ActiveWorkbook.Worksheets("G.variant_report.table1").AutoFilter.Sort. _
            SortFields.Add Key:=Range("T1:T239671"), SortOn:=xlSortOnValues, Order:= _
            xlDescending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("G.variant_report.table1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        ActiveWindow.ScrollRow = 323
        ActiveWindow.ScrollRow = 3866
        ActiveWindow.ScrollRow = 4832
        ActiveWindow.ScrollRow = 5154
        ActiveWindow.ScrollRow = 14494
        ActiveWindow.ScrollRow = 15461
        ActiveWindow.ScrollRow = 26090
        ActiveWindow.ScrollRow = 26412
        ActiveWindow.ScrollRow = 28666
        ActiveWindow.ScrollRow = 31243
        ActiveWindow.ScrollRow = 42838
        ActiveWindow.ScrollRow = 49924
        ActiveWindow.ScrollRow = 51534
        ActiveWindow.ScrollRow = 64418
        ActiveWindow.ScrollRow = 66028
        ActiveWindow.ScrollRow = 72148
        ActiveWindow.ScrollRow = 74081
        ActiveWindow.ScrollRow = 76335
        ActiveWindow.ScrollRow = 76657
        ActiveWindow.ScrollRow = 78590
        ActiveWindow.ScrollRow = 82777
        ActiveWindow.ScrollRow = 84709
        ActiveWindow.ScrollRow = 92762
        ActiveWindow.ScrollRow = 93406
        ActiveWindow.ScrollRow = 95338
        ActiveWindow.ScrollRow = 99848
        ActiveWindow.ScrollRow = 102102
        ActiveWindow.ScrollRow = 103068
        ActiveWindow.ScrollRow = 108866
        ActiveWindow.ScrollRow = 109510
        ActiveWindow.ScrollRow = 113697
        ActiveWindow.ScrollRow = 114664
        ActiveWindow.ScrollRow = 114986
        ActiveWindow.ScrollRow = 115308
        ActiveWindow.ScrollRow = 115630
        ActiveWindow.ScrollRow = 113375
        ActiveWindow.ScrollRow = 90185
        ActiveWindow.ScrollRow = 47347
        ActiveWindow.ScrollRow = 43804
        ActiveWindow.ScrollRow = 28022
        ActiveWindow.ScrollRow = 27378
        ActiveWindow.ScrollRow = 14817
        ActiveWindow.ScrollRow = 13206
        ActiveWindow.ScrollRow = 5476
        ActiveWindow.ScrollRow = 5154
        ActiveWindow.ScrollRow = 1
        ActiveSheet.Range("$A$1:$DS$239671").AutoFilter Field:=20, Criteria1:= _
            ">=5,0", Operator:=xlAnd
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Fitis Voir le message
    Bonjour,

    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    Option Explicit
     
    Sub TestFilt()
     
        Filt Feuil1
     
    End Sub
     
     
    Sub Filt(ByVal Sh As Worksheet)
    '
    ' Filt Macro
    '
    ' Touche de raccourci du clavier: Ctrl+Shift+K
    Dim DerniereLigne As Long, DerniereColonne As Long, ColonneValeurs As Long
     
    Dim AireValeurs As Range
     
        With Sh
     
             If .FilterMode = True Then
                .ShowAllData
             End If
     
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
             DerniereColonne = .Cells(1, .Columns.Count).End(xlToLeft).Column
             Set AireValeurs = .Range(.Cells(2, "T"), .Cells(DerniereLigne, "T"))
     
             With AireValeurs
                  ColonneValeurs = .Column
                 .Replace What:=".", Replacement:=",", LookAt:=xlPart, _
                 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
                 .HorizontalAlignment = xlRight
     
                 With .Offset(0, DerniereColonne + 1 - ColonneValeurs)
                      .Formula = "=T2*1"
                      .NumberFormat = "0.00"
                 End With
            End With
     
            .Cells(1, DerniereColonne + 1) = "Valeurs"
     
            TrierFiltrerUnTableau Sh, 1, DerniereColonne + 1, 5#
     
         End With
     
          Set AireValeurs = Nothing
     
     
    End Sub
     
    Sub TrierFiltrerUnTableau(ByVal FeuilleATrier As Worksheet, ByVal LigneDeTitre As Long, ByVal ColonneATrier As Long, ByVal ValeurDuFiltre As Double)
     
    Dim DerniereColonne As Long
    Dim DerniereLigne As Long
     
    Dim AireATrier As Range
    Dim AireColonne As Range
     
        With FeuilleATrier
     
             DerniereColonne = .Cells(LigneDeTitre, .Columns.Count).End(xlToLeft).Column
             DerniereLigne = .Cells(.Rows.Count, ColonneATrier).End(xlUp).Row
     
             If DerniereLigne > LigneDeTitre Then
     
                Set AireATrier = .Range(.Cells(LigneDeTitre, 1), .Cells(DerniereLigne, DerniereColonne))
                Set AireColonne = .Range(.Cells(LigneDeTitre, ColonneATrier), .Cells(DerniereLigne, ColonneATrier))
     
                .Sort.SortFields.Clear
                .Sort.SortFields.Add Key:=AireColonne, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                With .Sort
                     .SetRange AireATrier
                     .Header = xlYes
                     .MatchCase = False
                     .Orientation = xlTopToBottom
                     .SortMethod = xlPinYin
                     .Apply
                End With
     
                With AireATrier
                    If .AutoFilter Then .AutoFilter
                    .AutoFilter Field:=ColonneATrier, Criteria1:=">=" & ValeurDuFiltre, Operator:=xlAnd
                End With
     
     
                 Set AireColonne = Nothing
                 Set AireATrier = Nothing
     
              End If
     
        End With
     
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 8
    Par défaut
    Merci beaucoup, je vais essayer !

Discussions similaires

  1. Tri date avec format spécial
    Par jojom13 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/01/2008, 15h21
  2. Tri numérique super spécial
    Par malabarbe dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 08/09/2007, 12h59
  3. tri numérique sur varchar
    Par freestyler dans le forum Oracle
    Réponses: 12
    Dernier message: 30/01/2007, 13h59
  4. Réponses: 10
    Dernier message: 18/05/2004, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo