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 par ordre croissant dans variable tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut Tri par ordre croissant dans variable tableau
    Bonjour,

    j'aimerais savoir s'il est possible de trier par ordre croissant les données contenues dans une variable dynamique?

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim MaVariableDyn(5) As Integer
    Dim i As Integer
     
    MaVariableDyn(1)=7
    MaVariableDyn(2)=12
    MaVariableDyn(3)=2
    etc...
     
    Trier MaVaraibleDyn...
    Merci de votre aide.

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Bonjour
    cet exemple vous montre comment trié un tableau à une dimension avec une fonction personnalisée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim MaVariableDyn(6) As Integer
    Dim i As Integer
    MaVariableDyn(1) = 170
    MaVariableDyn(2) = 120
    MaVariableDyn(3) = 26
    MaVariableDyn(4) = 10
    MaVariableDyn(5) = 3
    MaVariableDyn(6) = 1
    Range("A1").Resize(UBound(MaVariableDyn) + 1, 1).Value = Application.Transpose(tabTrie(MaVariableDyn))
    End Sub
    fonction à mettre dans un module stadard
    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
    Function tabTrie(maVart)
         Dim Debut As Integer, Fin As Integer
          Dim i As Integer, j As Integer
           Dim temp
             Debut = LBound(maVart)
              Fin = UBound(maVart)
               For i = Debut To Fin - 1
                   For j = i To Fin
                     If maVart(i) > maVart(j) Then
                  temp = maVart(j)
               maVart(j) = maVart(i)
             maVart(i) = temp
           End If
         Next j
       Next i
     tabTrie = maVart
    End Function
    Bonne journée.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Merci beaucoup,
    Pouvez vous me traduire cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Resize(UBound(MaVariableDyn) + 1, 1).Value = Application.Transpose(tabTrie(MaVariableDyn))
    .resize?
    Transpose?

    Merci !

  4. #4
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Bonjour,

    En faite mes données à trier sont de type Variant, par exemple :

    Etc... Comment les triers?

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par l'aide en ligne
    Resize, propriété
    Cette propriété redimensionne la plage spécifiée. Cette propriété renvoie un objet Range qui représente la plage redimensionnée
    J'ai juste fait F1

    Pour le pb de tri, de données Alphanumérique, c'est comme pour les numériques 55 passe avant 6 tout court... Donc, faut formater, au moins jusqu'à la version 2003.
    Le mieux est d'ajouter des espaces avant les nombres et de les retirer après le tri

    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
    Sub test()
    'on colle des données pour faire un test
    Dim tablo As Variant, Plage As Range, cel As Range
        tablo = Array("142c", "130h", "25d", "12e", "3d", "1b", "1a", "3b", "6g", "110c")
        Range("A1:A10") = Application.Transpose(tablo)
     
    'La macro :    
        'On travaille sur la plage de données
        'Plage qui se trouvent donc dans la colonne A pour ce test
        Set Plage = Worksheets("feuil1").UsedRange
        'on ajoute quatre espaces à gauche avant de 
        'formater le mot à 4 caractères (voir remarque)
        For Each cel In Plage
            cel = Right("    " & cel, 4)
        Next
        'on tri
        Columns("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo
        'on supprime les espaces
        Columns("A:A").Replace What:=" ", Replacement:="", LookAt:=xlPart
    End Sub
    Juste pour le principe
    Remarque : Pourquoi 4 espaces ? Parce que le plus grand mot du tableau possède 4 caractères. Si le plus grand mot avait 10 caractères, on mettrait 10 espaces à gauche avant de formater à 10 avec Right.
    Bonne soirée

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Rebonjour Ousk,

    Regarde ce que fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     toto = "123A"
     toto = Format(toto, String(10, "@"))
     MsgBox ">>" & toto & "<<"
    A tout hasard ...

Discussions similaires

  1. Tri par ordre croissant dans des TextBox
    Par neoph dans le forum VB.NET
    Réponses: 6
    Dernier message: 01/12/2012, 18h31
  2. Tri par ordre croissant dans une listview
    Par megamario dans le forum VB.NET
    Réponses: 26
    Dernier message: 09/07/2010, 10h01
  3. Insertion dans un fichier trié par ordre croissant
    Par darkterreur dans le forum Langage
    Réponses: 14
    Dernier message: 20/09/2009, 19h39
  4. Tri par ordre croissant
    Par KinF dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 13/12/2008, 20h19

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