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 :

macro pour tri [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut macro pour tri
    bonjour,

    Une âme charitable pour resoudre mon probléme serait la bienvenu.Je veux trier les nombres d'une colonne A1=6 A2= 2 A3=10 et avoir le résultat dans la colonne B comme suis B1=2 B2=3 B3=1

  2. #2
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    ???
    Quel tri étrange !!

    Pourrais-tu développer ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    La colonne A est figée je voudrais si cela est possible le classement dans la colonne B

  4. #4
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Mais quel est le rapport entre:
    A1= 6
    A2= 2
    A3= 10

    et
    B1= 2
    B2=3
    B3= 1

    Pour moi si je trie la colonne A, j'aurais plutôt B1= 2, B2=6, B3=10

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    Excuse je m'explique mal

    A sont des valeurs resultat de calcul
    B sont leurs classements de la plus forte valeur à la plus faible

  6. #6
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Dsl mais je ne comprend toujours pas ...
    Il va falloir que tu explique mieux que ça...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    A sont des valeurs resultat de calcul
    B sont leurs classements de la plus forte valeur à la plus faible

    A1 = 2 (Je veux afficher en b)............ B= 4 (------> QUATRIEME)
    A2 = 5 ............. B= 3 (------> TROISIEME)
    A3 = 10 ............. B= 1(-------> PREMIER)
    A4 = 8 ............. B= 2 (-----> DEUXIEME)

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,
    C'est un peu scabreux mais bon c'est un début de piste. Lancer la proc "TrierPlage" :
    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
     
    Sub TrierPlage()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Tbl()
        Dim I As Integer
        Dim J As Integer
     
        'défini la plage
        With ActiveSheet
            Set Plage = .Range(.[A1], .[A65536].End(xlUp))
        End With
     
        'redimensionne le tableau au nombre de cellules de la plage
        ReDim Preserve Tbl(1 To 2, 1 To Plage.Count)
     
       'rempli le tableau avec les valeurs de la plage
        For I = 1 To Plage.Count
            Tbl(1, I) = Plage(I)
        Next I
     
        'effectue le tri du tableau
        Tri Tbl
     
        J = 1
        'le premier élément du tableau est le n°1
        Tbl(2, 1) = 1
     
        'défini les rangs
        For I = 2 To UBound(Tbl, 2)
            If Tbl(1, I) <> Tbl(1, I - 1) Then
                J = J + 1
                Tbl(2, I) = J
            Else
                Tbl(2, I) = J
            End If
        Next I
     
        'inscrit le rang de chaque valeur de la colonne A
        'dans la colonne B
        For Each Cel In Plage
            For I = 1 To UBound(Tbl, 2)
                If Cel = Tbl(1, I) Then
                Cel.Offset(0, 1) = Tbl(2, I)
                Exit For
                End If
            Next I
        Next Cel
     
    End Sub
     
    Sub Tri(Tbl())
     
        Dim Tempo
     
        Dim I As Integer
        Dim J As Integer
     
        For I = 1 To UBound(Tbl, 2) - 1
     
            For J = I + 1 To UBound(Tbl, 2)
                'pour un tri décroissant "<"
                'pour un tri croissant ">"
                If Tbl(1, I) > Tbl(1, J) Then
     
                    Tempo = Tbl(1, J)
                    Tbl(1, J) = Tbl(1, I)
                    Tbl(1, I) = Tempo
     
                End If
     
            Next J
     
        Next I
     
    End Sub
    Hervé.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    Merci Hervé mais je crois que je vais continuer à remplir mon tableau en manuel.Trop compliqué pour moi
    Mais ton programme fonctionne.Je vais quand même essayer d'incorporer ta macro dans ma feuille,mais il faudra que je change la selection des cellules et ne suis pas bon en VBA . Encore merci

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    La fonction d'Excel Rang
    ici traduite en vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim LastLig As Long
     
    With Sheets("Feuil1")
       LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
       With .Range("B1:B" & LastLig)
          .FormulaR1C1 = "=Rank(RC[-1],R1C1:R" & LastLig & "C1,0)"
          .Value = .Value
       End With
    End With

  11. #11
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    En conclusion, si c'est trop compliqué pour
    Bernardf57, formule dans B, recopie incrémentée
    A3 à remplacer par dernière ligne

    merci mercatog, je ne me souvenais pas de cette fonction
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    Merci à vous je l'ai incorporé dans ma feuille et cela fonctionne

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Macros pour trié et faire une la somme des valeurs
    Par vaco917 dans le forum Excel
    Réponses: 3
    Dernier message: 02/05/2013, 15h05
  2. [XL-2010] Modification de Macro pour un tri de données
    Par davidstarr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/01/2011, 18h39
  3. Macro VBA pour tri successif de lignes
    Par thierryakaguy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/07/2009, 00h27
  4. " Excel" : Macro pour tri trois variables
    Par jeremtokyo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/06/2007, 13h37
  5. [VBA-E] Macro Pour Faire un Tri sur plage variable
    Par tabarly35 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2006, 20h02

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