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 :

Trier colonnes en VBA


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
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut Trier colonnes en VBA
    Bonjour a tous

    C la premiere fois que je trouve pas l'information que je recherche directement sur ce site alors j'espere que le forum pourra m'aider.

    J'ai environ 250 colonne a trier de gauche a droite selon la premiere ligne. Le tri ne se fait pas alphabetiquement mais selon un liste predefini. Cette liste peut changé et je voudrais que l'utilisateur n'ai pas a rentré ds le code pour le faire.

    j'ai donc decider d'ecrire dans un autre fichier excel dans differrente colonnes les differentes liste trié possibles. l'utilisateur pourra modifier les listes comme bon lui semble. je voudrais donc que mon programme trie mes donnés en fonction de cet autre fichier.

    le code fourni par l'enregistreur de macro utilise
    CustomOrder := "C1, C2, ...." où C1 et C2 sont les nom des premieres cellule de mes colonnes (C1 ... correspondent a du texte).
    Et donc je voudrais pas que cet ordre soit ecrit directement ds le code...

    g différent problemes :
    si j'essaye de remplacer "C1, C2..." par une variable string contenant le meme texte ça bug.
    si j'essaye de creer une liste perso excel me dit qu'il ne peut pas car le nombre d'item depasse celui autorisé

    je pourrais sinon le faire ac des if et des coupez coller mais c pas joli joli et l'execution serait asser lente alors que lq fonction de tri d'excel est instantané..

    voilà je sais pas comment faire, j'arrive pas a trouver la solution pour faire ce que je veux...
    si vous aver des idées quelqu'elles soient je prend...

    merci d'avance

  2. #2
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    bonjour

    as-tu pensé à des inputbox, l'utilisateur n'aurait que des variables à renseigné !

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 317
    Par défaut
    Bonjour,

    effectivement, 250 colonnes, ça représente beaucoup, pour une liste personnalisée..

    Pourtant, sous 2003, j'arrive à insérer une liste personnalisée de 256 noms....

    et à effectuer le tri, avec cette liste.... (que ce soit manuellement, ou via code...)

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut
    Citation Envoyé par mapeh Voir le message
    Bonjour,

    effectivement, 250 colonnes, ça représente beaucoup, pour une liste personnalisée..

    Pourtant, sous 2003, j'arrive à insérer une liste personnalisée de 256 noms....

    et à effectuer le tri, avec cette liste.... (que ce soit manuellement, ou via code...)
    salut

    je travaille sous 2007 mais

    A ce propos il c passé un truc que g pas compris, lors de mes premier essais lorsque je travaillais sur des xls 2003 effectivement - de 256 noms ca passait
    et puis apres g passé les fichier en xlsx (a cause du nombre de colonne max) et mes listes deja enregistré ce sont reduit en fait a 256 carateres...
    Pourtant en VBA je pouvais encore continuer a ajouter des noms a mes liste...
    Les mysteres d'excel...


    sinon est ce que tu sais si on peut creer une liste perso en VBA a partir d'une string au est ce qu'il fo imperativement la creer en rentrant les nom directements un a un ? si oui ça pourrait m'aider... a la seul condition qu' on puisse contourner la limite des 256 noms en VBA (parcequ'en fait actuellement je travaille sous 250 colonnes mais les choses sont suceptibles d'evoluer et je voudrais pas que ca marche plus a cause de ça...)

    Citation Envoyé par Krovax Voir le message
    A mon avis il suffit de faire un peu de manipulation de chaine de caractère mais juste un peu. Du coup un morceau de code serais très utile. (celui avec les CustomOrder en particulier )
    je vous envoi un bout de code

    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
    'macro sous excel 2007 (mon environement de travail)
     
    Sub Macro1()
     
        Dim order As String
     
        Application.AddCustomList ListArray:=Array("c1", "c2", "c3")
     
        order = "c1,c2,c3"
     
        Range("A1:C1").Select
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
     
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A1:C1"), _
            SortOn:=xlSortOnValues, order:=xlAscending, CustomOrder:="c1,c2,c3", _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil1").Sort
            .SetRange Range("A1:C1")
            .Header = xlGuess
            .MatchCase = True
            .Orientation = xlLeftToRight
            .SortMethod = xlPinYin
            .Apply
        End With
     
        Range("A1").Select
     
    End Sub
     
     
    'macro sous excel 2003
     
    Sub Macro1()
     
        Application.AddCustomList ListArray:=Array("c1", "c2", "c3")
     
        Range("A1:C1").Select
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=6, MatchCase:=True, Orientation:=xlLeftToRight, DataOption1 _
            :=xlSortNormal
     
        Range("A1").Select
     
    End Sub
    la chose interessante c que si on utilise le methode 2003 on utilise le numero de la liste perso et ca marche sous 2007 (pb le numero est suceptible de changer...)

    par contre si on remplace order dans le champ customorder ca marche plus... donc meme ac un peu de manupulation de chaine je vois pas trop comment faire...

    quelle galere!!!

    au fait si vous vouler tester g ecris en A1, B1, C1: "c1", "c3", "c2" ou tout ce que vous vouler tant que c pas ds l'ordre...

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut
    Citation Envoyé par bosk1000 Voir le message
    bonjour

    as-tu pensé à des inputbox, l'utilisateur n'aurait que des variables à renseigné !
    salut

    qu'entend tu par input box ?

    tu voudrais que je rentre les variables une a une.... un peu long et fastidieux pour l'utilisateur...

    sinon g pensé a faire 2 ou 3 liste differentes et avec des check box ou un truc ds le genre et laisser choisir a l'utilisateur la liste shouaité seulement le probleme c que je suis obligé (ou pas ?) d'assigner ma liste a une variable string et que la fonction "sort" de vba n'accepte pas de variable strings dans le champ "CustomOrder"

    si tu me propose une autre maniere de faire ou si il y a une astuce je prend....

    merci

  6. #6
    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
    A mon avis il suffit de faire un peu de manipulation de chaine de caractère mais juste un peu. Du coup un morceau de code serais très utile. (celui avec les CustomOrder en particulier )

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 317
    Par défaut
    Re-,

    Si j'ai bien compris...

    Regarde le fichier joint...

    Dans la feuille2, plusieurs listes de clés de tri...
    Ces listes reprennent les en-têtes de la feuille 1

    Dans la feuille 1, tu cliques sur Tri, et tu as un userform

    Tu choisis les clés que tu veux (de la plus importante à la moins importante), et tu valides...

    Attention, ne fonctionne que sous 2007....

    Peut-être?

  8. #8
    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
    Une suggestion : Utiliser Excel pour trier et modifier l'ordre de tri par macro
    Dans Excel, certaines options de tri pourraient t'intéresser ; regarde à "Trier une liste" dans l'aide en ligne. Ex :
    Citation Envoyé par l'Aide Excel
    - Pour utiliser votre propre liste comme ordre de tri
    - Pour trier les colonnes en fonction des lignes
    Si ça t'ouvre des horizons mais que tu rencontres des difficultés, tu demandes.
    Un conseil : Plutôt qu'utiliser un autre fichier pour placer les listes de tris, utilise une feuille de calculs masquée.
    Une question : Tu sais sûrement qu'on peut transposer les données... ?
    L'idée : Tu transposes les colonnes en lignes, tu tries et tu retransposes les colonnes en lignes.
    Bonne soirée

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut
    Citation Envoyé par mapeh Voir le message
    Re-,

    Si j'ai bien compris...

    Regarde le fichier joint...

    Dans la feuille2, plusieurs listes de clés de tri...
    Ces listes reprennent les en-têtes de la feuille 1

    Dans la feuille 1, tu cliques sur Tri, et tu as un userform

    Tu choisis les clés que tu veux (de la plus importante à la moins importante), et tu valides...

    Attention, ne fonctionne que sous 2007....

    Peut-être?

    Moi je dis tous simplement ENORME!!!
    Et le mec il me sors ça en une petite heure (ou peut etre meme moins...)
    c pas tout a fait ce que je voulais mais les idées sont là, g plus qu'a adapter un peu le truc!!!
    Et puis c vraiment jolie comme tu fait ça...

    tu utilise donc le numero de la liste perso.
    par contre il semblerais que si tu met tout dans une meme clé (les 280 données en desordre dans la clé 1 par exemple) ca ne marche plus...

    g pas eu trop le temps de regardé mais quand meme un grand merci

Discussions similaires

  1. Taille des colonnes via VBA
    Par mooh91 dans le forum Access
    Réponses: 7
    Dernier message: 15/02/2007, 19h30
  2. Bouton trier colonne dans un sous formulaire
    Par Chichou87 dans le forum IHM
    Réponses: 1
    Dernier message: 18/01/2007, 22h38
  3. problème de sélection de colonne en VBA
    Par tarmin dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 16/11/2006, 13h28
  4. comment modifier le nom d'une colonne via VBA?
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 24/11/2005, 15h36

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