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 :

trie de valeurs par suite arithmétique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Par défaut trie de valeurs par suite arithmétique
    Bonjour tous le monde j'aimerais trier mes données d'une certaine façon.
    Voici un exemple de mes données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    100		n
    100.5		n
    101		n+1
    101.5		n+1
    102		n+2
    102.5		n+2
    Serait il possible de faire un petit programme pour les trier de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    100		n
    101		n+1
    102		n+2
    100.5		n
    101.5		n+1
    102.5		n+2
    J'aimerais les trier par groupe de suite arithmétique en fait.

    Merci par avance

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Donc si j'ai bien compris on doit commencer par
    toruver un n
    regarder dans les n+1 celui dont la valeur a une différence proche de 1 (je viens de découvrir la fonction Round )
    Le mettre a la suite puis regarde dans les n+2 celui avec une différence de 2,etc....
    puis chercher le n suivant

    Ta de la chance je sent que l'algo va m'amuser
    (je ne garanti par avance pas que ce soit optimal, ni même compréhensible pour un cerveau moins tordu que le mien )

    on peux avoir un n+3 sans n+2???
    Les données initiales sont toujours trié dans l'ordre?
    tu as un n+ maximum?

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Par défaut
    Les données sont toujours triés dans l'ordre croissant en effet.
    Il peut je pense y avoir n+10 au max.

    Oui en fait il faudrait trouver un moyen de regrouper les séquences de mes suites arithmétiques en fait...

    Ça m'a pas l'air du tout évident ce genre de trie :s

    ps: on ne peut pas avoir de n+3 sans un n+2

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bon je n'ai pas fait bcp de teste différent mais essaye déjà

    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
     
    Dim DerniereLigne As Long
    Dim i As Long, j As Long
    Dim Mn As Double
    Dim k As Byte
    Dim flag As Boolean
    DerniereLigne = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'remplace le 1 par le numéro de la colonne
     
     
    For i = 1 To DerniereLigne
        If Cells(i, 2) = "n" Then
            Mn = Cells(i, 1)
            k = 1
            Do
            flag = True
                For j = i + k To DerniereLigne
                    If Cells(j, 2) = "n+" & k Then
                        If (Cells(j, 1) - Mn) = k Then
                            Rows(i + k).Insert
                            Rows(j + 1).Copy Rows(i + k)
                            Rows(j + 1).Delete
                            k = k + 1
                            flag = False
                            Exit For
                        End If
                    End If
                Next j
            Loop Until k > 10 Or flag
        End If
    Next i
    Il faudra peut être ajouter un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     round(Cells(j, 1) - Mn)=k
    si les valeur ne sont pas exacte
    ou arrondir a 1 chiffre après la virgule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If round(Cells(j, 1) - Mn,1)=k Then

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  2. [Pb : champ Text = pas de valeur par defaut ?]
    Par mat_dum dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 18/08/2003, 12h57
  3. sorte de valeur par defaut
    Par sampq dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2003, 11h59
  4. Unique + valeur par défaut
    Par ketalie dans le forum Outils
    Réponses: 4
    Dernier message: 02/07/2003, 15h29
  5. Valeur par defaut 'True' dans un champ de type bit
    Par Mouse dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2003, 15h26

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