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 :

Tableau : filtrer puis ordonner les colonnes par nombre d'entrées


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Tableau : filtrer puis ordonner les colonnes par nombre d'entrées
    Bonjour,

    J'ai un tableau de taille importante (plus de 5000 lignes et 200 colonnes) dont beaucoup de cellules sont vides

    Je souhaite
    1.Effectuer un filtre à l'aide d'une ou deux des colonnes du tableau
    2.Changer l'ordre de mes colonnes en appuyant sur un bouton pour déclencher une macro qui fait le travail suivant
    1. Mettre en début toutes mes colonnes fixes
    2. Mettre à la suite toutes mes colonnes sur lesquelles il y a un filtre
    3. Mettre dans l'ordre les colonnes restantes pour faire apparaître en premier les colonnes contenant le plus de cellules non vide (uniquement sur les cellules visibles après filtre)

    et pouvoir ensuite appliquer de nouveaux filtres, appuyer sur le bouton magique et recommencer

    Je joins un mini mock up du tableau
    Sur l'exemple, je voudrais
    1. Filtrer suivant la colonne fixe 1 pour ne garder que nom5, nom8, nom12, nom 13, nom14, nom15
    2. Filtrer sur la colonne fixe 2 pour ne garder que A
    3. Filtrer sur le colonne 10 pour ne garder que 1 et A
    4. Agencer les colonnes par nombre de cases non vides après filtrage

    J'ai mis deux onglets pour illustrer : départ et résultat voulu ou j'ai couper/coller les colonnes pour agencer dans l'ordre

    Un grand merci
    tim
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour
    1) je n'ouvre et n'ouvrirai jamais un classeur tiers et n'ai don pas ouvert le tien
    2) ton exposé n'est finalement qu'un mini cahier des charges, sans que l'on ne voie ce que tu as au moins tenté.
    Peux-tu nous montrer ce que tu as essayé d'écrire pour parvenir à tes fins ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Voici les screenshot de mon fichier
    Nom : Fin.PNG
Affichages : 318
Taille : 33,4 KoNom : Début.PNG
Affichages : 239
Taille : 40,0 Ko

    Je suis débutant en VBA donc à peu près incapable d'écrire quoi que ce soit (j'ai fait ma première macro hier et ça m'a pris 2h pour réussir à insérer des lignes selon la valeur d'une cellule donc je me suis dit que j'allais demander de l'aide sur ce coup là)

    Merci

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Je suis débutant en VBA donc à peu près incapable d'écrire quoi que ce soit
    Sois certain de ce que je compatis.
    J'ai également été (nous l'avons tous été) un débutant. Je ne me souviens pas d'avoir voulu débuter en tentant de résoudre d'emblée une difficulté relevant d'un stade assez avancé de l'apprentissage. Et encore moins d'un ENSEMBLE (c'est ton cas) de difficultés de cette nature.
    Je ne puis dans ces conditions que t'inviter :
    - à y aller pas à pas, apprentissage par apprentissage, en commençant par de petits exercices.
    - par sérier les difficultés. Je vois par exemple que tu parles de réagencer ce qui serait le résultat de filtres. Commence par au moins écrire le code pour filtrer (difficulté N° 1). Le réagencement sera ensuite une autre difficulté (distincte).
    Bonne étude.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Fonction subtotal
    Hello unparia

    J'ai bien travaillé aujourd'hui ^^
    cf le code en fin de message qui met beaucoup de temps. A mon avis c'est une belle usine a gaz mais à défaut de savoir coder en VBA j'ai réussi a écrire un truc qui fonctionne.

    Peux tu stp m'aider ?
    Pour le moment, la ligne 6 de ma feuille calcule le nombre de cellule non vide après filtre. C'est la fonction SOUS.TOTAL, argument nb.val
    Avec ça j'ai mon critère pour ordonner mes colonnes
    Je vais le chercher dans la feuille de calcul pour lancer la tri : en gras dans mon code.

    Je voudrais directement calculer cette valeur depuis VBA pour ne pas l'avoir affichée sur ma feuille

    Quelle est la syntaxe équivalente à sous.total(3,colonne qui m'interesse) en VBA ?


    Merci !
    tim

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Sub TrierLesColonnesParNombreDeHit()
    With ActiveWorkbook.Worksheets("Travail")
    
    'rafraichir l'écran
        Application.ScreenUpdating = False
    'première cellule du tableau
        Range("A8").Select
    lig1 = Selection.Row
    col1 = Selection.Column
    
    'dernière ligne
        Range("A8").Select
    derlig = Selection.End(xlDown).Row
    
    'dernière colonne
        Range("A8").Select
    dercol = Selection.End(xlToRight).Column
    
    Dim cf()
    Dim k As Integer
    'k = ActiveSheet.AutoFilter.Filters.Count
    'ReDim cf(k)
    k = 1
    ReDim cf(k)
    
    'identifier les colonnes avec un filtre actif
    If ActiveSheet.FilterMode Then 'condition : si l'onglet est filtré
        For i = 2 To ActiveSheet.AutoFilter.Filters.Count 'boucles sur toutes les colonnes
            If ActiveSheet.AutoFilter.Filters.Item(i).On Then
            cf(k) = i: 'si la colonne est filtrée, définie la variable CF
            k = k + 1
            ReDim Preserve cf(k)
            End If
        Next i 'prochaine colonne de la boucle
    End If 'fin de la condition
    
    'Placer les colonnes avec un filtre en début de feuille
    'si on coupe les colonnes filtrées, on perd le filtre -> On coupe les colonnes non filtrées
    
    deb = 1
    For i = 1 To k - 1
        Range(Cells(1, deb), Cells(1, cf(i) - 1)).EntireColumn.Select
        Selection.Cut
        Cells(1, cf(i) + 1).EntireColumn.Select
        Selection.Insert shift:=xlToLeft, CopyOrigin:=xlFormatFromLeftOrAbove
        deb = deb + 1
    Next
    
    'rafraichir l'écran
        Application.ScreenUpdating = False
    'Ordonne les colonnes par ordre croissant de nombre de hits
    debutfiltre = deb
        For i = debutfiltre To dercol
            For j = i To dercol
                testi = Cells(6, i).Value
                testj = Cells(6, j).Value
                If testj > testi Then
                    'coupe le contenu de la colonne source
                    Cells(lig1, j).EntireColumn.Select
                    Selection.Cut
                    'Selection la colonne à droite
                    Cells(lig1, i).EntireColumn.Select
                    Selection.Insert shift:=xlToLeft, CopyOrigin:=xlFormatFromLeftOrAbove
                    test = debutfiltre
                End If
            Next
        Next
    
    End With
    End Sub

Discussions similaires

  1. Comment ordonner les colonnes dans un indexe
    Par Fba_mainsys dans le forum SQL
    Réponses: 4
    Dernier message: 10/10/2007, 11h59
  2. Datatable - Ordonner les colonnes
    Par Jobinma dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/04/2007, 19h30
  3. Ordonner les éléments par rapport à une sélection ?
    Par brunoperel dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/03/2007, 12h13
  4. [MySQL] Requête ordonnant les résultats par mois
    Par DukyGeorge dans le forum Langage SQL
    Réponses: 12
    Dernier message: 15/05/2006, 19h48

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