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 :

Sélectionner les 5 premières lignes d'un tableau [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 346
    Par défaut Sélectionner les 5 premières lignes d'un tableau
    Bonjour,

    Comment sélectionner les 5 premiers résultats d'un tableau avec 2 colonnes et les mettre en forme ?.

    J'ai plusieurs tableaux dans des feuilles différentes qui comportent tous 2 colonnes, les valeurs de ces tableaux proviennent d'une autre feuille 'Données'.
    A chaque mise à jour que je fais sur ma feuille 'Données', il y a un nouveau tri automatique fait en vba sur ces tableaux (je fais un tri du + grand au + petit sur la colonne 2).

    Avec ce code (je fais une boucle sur plusieurs feuilles pour sélectionner tous mes tableaux):
    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 Ws As Worksheet
     
    For Each Ws In ThisWorkbook.Worksheets
        x = Sheets(Ws.Name).ListObjects.Count
        If Ws.Name <> "Données" Then
     
            For y = 1 To x
                ActiveWorkbook.Worksheets(Ws.Name).ListObjects(Sheets(Ws.Name).ListObjects(y).Name).Sort.SortFields.Clear
                ActiveWorkbook.Worksheets(Ws.Name).ListObjects(Sheets(Ws.Name).ListObjects(y).Name).Sort.SortFields.Add _
                Key:=Range(Sheets(Ws.Name).ListObjects(y).Name & "[" & Sheets(Ws.Name).ListObjects(y).HeaderRowRange(2) & "]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
                With ActiveWorkbook.Worksheets(Ws.Name).ListObjects(Sheets(Ws.Name).ListObjects(y).Name).Sort
                    .Header = xlYes
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
            'Mise en forme
            'Entetes de tableaux
            With Sheets(Ws.Name).ListObjects(y).HeaderRowRange
                .Font.Color = vbWhite
                .Font.Bold = True
            End With
            ' 5 premiers sortis Bold + Jaune
     
            '-----------
     
            Next y
        End If
    Next Ws
    Dans "Mise en forme" je change la couleur d'écriture de l’entête des tableaux : OK.

    Je voudrais remettre à 0 la mise en forme des tableaux après le tri et refaire la nouvelle mise en forme pour que les résultats 1 à 5 sois à chaque fois en Bold et couleur Jaune (et donc le reste des tableaux sans bold et couleur Blanc).
    Mais comment sélectionner les 5 premiers résultats des 2 colonnes de chaque tableau et les mettre en forme tel que souhaité ?.

    Merci de votre aide.
    Fred

  2. #2
    Membre très actif Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Par défaut
    bonjour,

    Voici un bout de code a adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub mef()
        Sheets("Last week").Range("A2:B100").Style = "Normal"
     
        With Sheets("Last week").Range("A2:B6").Font
            .Bold = True
        End With
     
        With Sheets("Last week").Range("A2:B6").Interior
            .Color = 65535
        End With
    End Sub
    n’inclue pas la barre des titres

  3. #3
    Membre éclairé Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 346
    Par défaut
    Bonjour et merci,
    Mais comme j'ai plusieurs tableaux sur plusieurs feuilles difficile de le mettre dans 1 seul code car l'emplacement des tableaux dans les feuilles est différents et les tableaux n'ont pas le même nombres de lignes...

    Fred

  4. #4
    Membre très actif Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Par défaut
    et comme ça

    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 mdf()
    Dim ws As Worksheet
     
        For Each ws In ThisWorkbook.Worksheets
            Sheets(ws.Name).Range("A2:XFD1048576").Style = "Normal"
     
            With Sheets(ws.Name).Range("A2:B6").Font
                .Bold = True
            End With
     
            With Sheets(ws.Name).Range("A2:B6").Interior
                .Color = 65535
            End With
        Next ws
     
    End Sub

  5. #5
    Membre éclairé Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 346
    Par défaut
    Citation Envoyé par tony76 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            With Sheets(ws.Name).Range("A2:B6").Font
                .Bold = True
            End With
    Oui mais le souci comme je l'ai précisé c'est que aucun de mes tableaux n'est à la "même place"

    Si je prends les 5 première lignes, certaines sont en D1:E5, d'autres en I2:J6, etc

    Je pense qu'il doit exister un moyen de faire à partir de HeaderRowRange qui permet justement de localiser l’entête.
    Peux être avec HeaderRowRange.address (qui me sort bien les coordonnées de l'entête) mais je n'y arrive pas pour l'instant

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .DataBodyRange.resize(5)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .HeaderRowRange.offset(1).resize(5)
    eric

  7. #7
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 173
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    une autre écriture possible, si j'ai compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .DataBodyRange.resize(5,2)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .DataBodyRange.range("A1:B5")
    Avec ici les 2 premières colonnes

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

Discussions similaires

  1. [WD-2016] Répéter les premières lignes d'un tableau Word
    Par tototiti2008 dans le forum VBA Word
    Réponses: 4
    Dernier message: 12/12/2018, 09h18
  2. [XL-2016] Copier les 2 premières lignes d'un tableau filtré
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/12/2018, 16h01
  3. Réponses: 2
    Dernier message: 05/07/2018, 12h10
  4. Réponses: 8
    Dernier message: 03/07/2007, 18h26
  5. Réponses: 5
    Dernier message: 23/03/2007, 11h23

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