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 +remonter les cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Par défaut Tri +remonter les cellules
    Bonjour,

    Je débute en VBA ce qui m'amène à consulter les forums pour trouver des solutions à mes problèmes...
    J'ai trouvé une fonction pour trier mon tableau de chiffres et remonter les valeurs les unes à la suite des autres en partant de la première ligne. (merci d'ailleurs à celui qui a trouvé cette solution efficace !!)

    Le problème est que ma source de données a changé : ce sont des nombres et parfois des nombres+lettre dans une même cellule.

    Quelqu'un pourrait-il m'aider pour que le tri soit toujours respecté malgré les lettres ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub trier()
        Dim Plage As Range
        Dim i As Byte
        Dim Dcl As Byte, Dlg As Long
        Dcl = Cells(1, Columns.Count).End(xlToLeft).Column
        Dlg = Range("A" & Rows.Count).End(xlUp).Row
        Application.ScreenUpdating = False
        For i = 1 To Dcl
        Set Plage = Range(Cells(1, i), Cells(Dlg, i))
        Plage.Sort Key1:=Cells(15, i), Order1:=xlAscending, Header:=xlNo, _
                    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        Next
     End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Je n'ai pas regardé ton fichier, mais dans le code il n'y a pas lieu de faire une boucle lorsque tu tries.
    Ça ne sert à rien de faire le même tri 15 fois si tu as 15 colonnes...

    Qu'est-ce qui ne va pas avec le code ?
    Le tri n'est pas comme tu veux ?
    As-tu un exemple ?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Par défaut Tri indépendant entre colonnes
    Nom : Tableau.jpg
Affichages : 390
Taille : 212,3 Ko

    Merci pour cette réponse.

    Le tri doit se faire indépendamment pour chaque colonne.
    Je voudrais trier par colonne les nombres qui s'affichent. Par exemple, d'après l'image de mon fichier, je voudrais obtenir
    > dans la colonne I:
    17
    37
    37c
    57

    > dans la colonne J:
    17
    50c
    52

    Le 50c et le 37c doivent s'inclure au tri ce qui me fait dire que s'il n'y a que des nombre cette fonction est valide mais s'il y a des nombres + lettre, le tri ne les prends pas en compte... mais voilà où corriger dans la fonction; telle est mon igorance ...
    CPB

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    OK, je comprends mieux le pourquoi du tri en boucle...

    Le problème, c'est que la plage est calculée en fonction du nombre de lignes en A
    Dlg = Range("A" & Rows.Count).End(xlUp).Row
    Soit tu intègres cette ligne dans la boucle, soit tu utilises une autre méthode pour trouver le nombre de lignes comme celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dlg = Cells.Find("*", , , , xlByRows, xlPrevious).Row

  5. #5
    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
    Bonjour parmi, re le forum
    Ça ne sert à rien de faire le même tri 15 fois si tu as 15 colonnes...
    apparemment CPB-VBA veut trier chaque colonne indépendamment, perso, ce qui m'étonne est cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage.Sort Key1:=Cells(15, i)
    à part ça, je ne vois pas non plus où est le problème !
    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...)

  6. #6
    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
    Bonsoir,
    tu peux essayer ce code si aucune cellule vide s'interpose entre les autres cellules de la colonne, sinon les nuls seront comptés
    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
    Sub trier()
    Dim Plage As Range, valeur As Integer
    Dim i As Integer, cible, J As Integer
    Dim Dcl As Integer, Dlg As Long
    Dcl = Cells(1, Columns.Count).End(xlToLeft).Column
     
    For J = 1 To Dcl
      Dlg = Cells(Rows.Count, J).End(xlUp).Row
      Do
        valeur = 0
        For i = 1 To Dlg - 1
          If Val(Cells(i, J)) > Val(Cells(i + 1, J)) Then
            cible = Cells(i, J)
            Cells(i, J) = Cells(i + 1, J)
            Cells(i + 1, J) = cible
            valeur = 1
          End If
        Next i
      Loop While valeur = 1
    Next J
     
    End Sub
    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...)

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Par défaut Super ! Merci
    Merci pour ces deux solutions que j'ai pu tester.

    La seconde de casefayere répond complètement à ma demande car en plus de trier les nombres et nombres + lettres, elle replace les éléments triés au sommet de la colonne.
    C'est super ! Un grand merci vous m'avez fait faire un bon de géant

    CPB

    --

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

Discussions similaires

  1. [Toutes versions] Remonter les donnee d' une cellule au noiveau superieur
    Par Aladin_23 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/06/2015, 14h34
  2. [XL-2007] Tri sur les cellules
    Par FAUFAU57 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/03/2012, 14h04
  3. [XL-2007] Lors d'un tri mettre les cellules vides vers le haut
    Par christophe31 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/06/2010, 16h19
  4. [CR9] Colorier les cellules d'un tableau croisé
    Par Koko22 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/11/2003, 16h57
  5. tri avec les champs vides en dernier
    Par r-zo dans le forum Requêtes
    Réponses: 11
    Dernier message: 03/09/2003, 13h40

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