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 :

Probleme de rangement par ordre croissant [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Recherche d emploi
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Recherche d emploi

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut Probleme de rangement par ordre croissant
    Bonjour,

    je cherche donc à ranger par ordre croissant mon tableau avant de l'afficher mais je n'arrive pas à trouver une solution s'il trouve deux valeurs identiques.

    Voici ma macro :

    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
    Sub Rangement()
     
    Dim Tableau(10, 2) As Variant
    Dim TableauRange(10, 2) As Variant
    Dim Impression, Ordre, Rangement, Rangement2 As Integer
     
    Tableau(1, 1) = "Robert"
    Tableau(2, 1) = "Christophe"
    Tableau(3, 1) = "Christelle"
    Tableau(4, 1) = "Etienne"
    Tableau(5, 1) = "Martial"
    Tableau(6, 1) = "Marcel"
    Tableau(7, 1) = "Michel"
    Tableau(8, 1) = "Maman"
    Tableau(9, 1) = "Matheo"
    Tableau(10, 1) = "Patrick"
     
    Tableau(1, 2) = 20
    Tableau(2, 2) = 20
    Tableau(3, 2) = 32
    Tableau(4, 2) = 44
    Tableau(5, 2) = 6
    Tableau(6, 2) = 8
    Tableau(7, 2) = 24
    Tableau(8, 2) = 70
    Tableau(9, 2) = 24
    Tableau(10, 2) = 70
     
    For Rangement = 1 To 10
     
    Ordre = 0
     
        For Rangement2 = 1 To 10
     
        If Tableau(Rangement, 2) > Tableau(Rangement2, 2) Then
            Ordre = Ordre + 1
        End If
     
        If Tableau(Rangement, 2) = Tableau(Rangement2, 2) Then
            Ordre = Ordre + 1
        End If
     
        Next Rangement2
     
    TableauRange(Ordre, 1) = Tableau(Rangement, 1)
    TableauRange(Ordre, 2) = Tableau(Rangement, 2)
     
    Next Rangement
     
    For Impression = 1 To 10
     
    Sheets("Feuil1").Cells(Impression, 1).Value = TableauRange(Impression, 1)
    Sheets("Feuil1").Cells(Impression, 2).Value = TableauRange(Impression, 2)
     
    Next Impression
    End Sub
    Si un de vous voit une solution, merci

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

    Regardez si le post 3 de ce message peut vous être utile : lister-valeurs-listbox-selon-combobox-userform

  3. #3
    Membre habitué
    Homme Profil pro
    Recherche d emploi
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Recherche d emploi

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Regardez si le post 3 de ce message peut vous être utile : lister-valeurs-listbox-selon-combobox-userform
    Bonjour,

    je vais etudier ça, merci !!!
    En attendant, j'ai modifié cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Tableau(Rangement, 2) = Tableau(Rangement2, 2) Then
    Ordre = Ordre + 1
    End If
    Par celle là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Tableau(Rangement, 2) = Tableau(Rangement2, 2) and Tableau(Rangement, 1) > Tableau(Rangement2, 1) Then
    Ordre = Ordre + 1
    End If
    La nuit porte conseil

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MathosDelFos Voir le message
    je cherche donc à ranger par ordre croissant mon tableau avant de l'afficher mais je n'arrive pas à trouver une solution s'il trouve deux valeurs identiques.
    Pourquoi ne pas, plus simplement, utiliser les commande de tri d'Excel ?
    Par exemple : https://msdn.microsoft.com/fr-fr/VBA...t-method-excel

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour

    deja quand tu dim un tableau fait bien attention a en quel mode tu veux etre

    tu peux pas faire
    dim tableau(10,2)
    et essayer de mettre tableau(10,2)='toto" car ton tableau en fait s'arrete a l'index de ligne "9" qui est le 10eme item le premier tu l'aura compris etant le zero

    pour ne pas etre obliger de choisir le mode 1 ou 0
    il te suffit de dimer autrement
    la formule c'est celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    redim tableau(1 to 10,2)
    la vba est au courant que ton tableau commence a 1 et termine a 10

    ceci dit:

    trier ta colonne index 1(2d colonne) pour les noms et la colonne index 2(3eme colonne) pour les num n'est pas vraiment compliqué
    ce que tu parrais zapper c'est que tes deux tableau ont deux dimentions et que donc que tri doit deplacer les autre colonnes aussi sinon ton tableau ne sera plus cohérent

    voila tout ca c'est dit
    passons a la pratique

    2 sub pour tes deux exemple et une seule fonction qui sera en mesure de faire le boulot pour les deux moyenant le changement de l'argument numeric concernant l'index de colonne de reference pour le tri
    sub 1 on créé le tableau numerique
    en fin de sub j'appelle la fonction le dernier argument c'est la colonne de reference pour le tri e
    t je retranscrit ton tableau dans le sheets
    j'ai mis 2 valeur en colonne index 1(colonne 2) pour que tu vois bien que c'est toute la ligne qui est bien replacée
    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
    Sub test_en_numeric()
        ReDim Tableau(1 To 10, 3)
        Tableau(1, 2) = 20
        Tableau(2, 2) = 20
        Tableau(2, 1) = "toto"
        Tableau(3, 2) = 32
        Tableau(4, 2) = 44
        Tableau(5, 2) = 6
        Tableau(5, 1) = "titi"
        Tableau(6, 2) = 8
        Tableau(7, 2) = 24
        Tableau(8, 2) = 70
        Tableau(9, 2) = 24
        Tableau(10, 2) = 70
        in_order_Tableau Tableau, 2
    Cells(1, 1).Resize(UBound(Tableau), UBound(Tableau, 2)) = Tableau
    End Sub
    la sub pour les noms
    ici on fait exactement pareil sauf pour l'argument de la colonne de reference qui est ici le 1(2eme colonne)
    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
    Sub test_avec_des_noms()
    ReDim Tableau(1 To 10, 2)
    Tableau(1, 1) = "Robert"
     Tableau(2, 1) = "Christophe"
     Tableau(3, 1) = "Christelle"
     Tableau(4, 1) = "Etienne"
     Tableau(5, 1) = "Martial"
     Tableau(6, 1) = "Marcel"
     Tableau(7, 1) = "Michel"
     Tableau(8, 1) = "Maman"
     Tableau(9, 1) = "Matheo"
     Tableau(10, 1) = "Patrick"
    in_order_Tableau Tableau, 1      'tri dans l'ordre croissant arguments(tableau a trier, index de colonne de reference de tri)
    Cells(1, 1).Resize(UBound(Tableau), UBound(Tableau, 2)) = Tableau
     
    End Sub

    la fonction toute simple
    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
    'une seule fonction valable pour les deux
    Function in_order_Tableau(tabl, col)
        Dim i#, e#, x#
        ReDim temp(UBound(tabl, 2))
        For i = 1 To UBound(tabl)
            For e = i + 1 To UBound(tabl)
                If tabl(e, col) < tabl(i, col) Then
                    For x = 1 To UBound(tabl, 2)
                        temp(x) = tabl(i, x): tabl(i, x) = tabl(e, x)
                        tabl(e, x) = temp(x)
                    Next
                End If
            Next
        Next
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Coucou Patrick,
    Y a-t-il une raison pour déclarer en Double ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function in_order_Tableau(tabl, col)
        Dim i#, e#, x#
        …
    au lieu de Integer ou Long … ?

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    non pas specialement
    j'aime beaucoup le dessin du dieze c'est tout
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre habitué
    Homme Profil pro
    Recherche d emploi
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Recherche d emploi

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Pourquoi ne pas, plus simplement, utiliser les commande de tri d'Excel ?
    Par exemple : https://msdn.microsoft.com/fr-fr/VBA...t-method-excel
    Parce que je tiens à ce ce soit fait dans le module, il va y avoir une interface qui va récolter les données, elles ne seront pas sur une feuille.

    En tout cas, merci à tous pour vos réponses !!!

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MathosDelFos Voir le message
    Parce que je tiens à ce ce soit fait dans le module, il va y avoir une interface qui va récolter les données, elles ne seront pas sur une feuille.
    D'après ce que je vois à la fin de ta macro, tu finis par les mettre dans des cellules, non ?
    Et si tu mettais ces valeurs dans des cellules AVANT le tri et que tu faisais le tri ensuite ? Ca permettrait de faire en une seule ligne ce que tu essayes de faire en 13 lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Impression = 1 To 10
        Sheets("Feuil1").Cells(Impression, 1).Value = TableauRange(Impression, 1)
        Sheets("Feuil1").Cells(Impression, 2).Value = TableauRange(Impression, 2)
    Next Impression
    Sheets("Feuil1").Columns("A:B").Sort key1:=Sheets("Feuil1").Range("A1")
    Avoue que c'est quand même beaucoup plus simple, plus sûr et plus rapide que de trier des variables.
    Sans compter que, si tu le souhaites, tu peux ajouter d'autres critères de tri comme la colonne B.

  10. #10
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Complètement d'accord avec toi Menhir
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re bonjour a tous
    je le cite au cas ou certains n'auraient pas vu
    Parce que je tiens à ce ce soit fait dans le module, il va y avoir une interface qui va récolter les données, elles ne seront pas sur une feuille.
    ce qui implique que le demandeur soit
    1. ne veux pas utiliser de feuille pour eventuellement le faire avec les fonctions natives
    2. ne peux pas utiliser une feuille car deja utilisées et ne souhaite pas utiliser un sheets temporaire



    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Tri par ordre croissant
    Par KinF dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 13/12/2008, 20h19
  2. Réponses: 4
    Dernier message: 23/10/2007, 22h09
  3. organiser un combobox par ordre croissant??
    Par shadow31 dans le forum MFC
    Réponses: 2
    Dernier message: 18/05/2005, 09h31
  4. Trie par ordre croissant.
    Par slackjayo dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 22/04/2005, 09h41
  5. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 00h04

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