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 :

Objet VBA spécifique : ListObject [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut Objet VBA spécifique : ListObject
    Bonjour,

    Suite à une discussion avec Mr Pierre Fauconnier concernant la modification automatique de zone d'impression, la solution la plus idéale est de créer une liste (Données / Liste / Créer une liste).
    Après avoir donc créer ma liste, je me suis aperçu que je ne pouvais plus trier (Données / Trier) mes données. En effet le fait de créer une liste "grise" la fonction "Tri".
    Voici le code mis à l'ouverture d'Excel :
    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
    Private Sub Workbook_Open()
    ' supprime le recalcul des cellules
     
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
     
     
    'Empecher l'ouverture si fichier deja ouvert sur le reseau par un  autre utilisateur
     
    If ThisWorkbook.ReadOnly = True Then
     '------avertissement
     MsgBox "Ce classeur est en cours de modification par un autre utilisateur" _
     & "Il va etre refermé", vbInformation
     ' -----fermeture
     ThisWorkbook.Close
     'Else
     
     
    End If
     
    Sheets("Accueil").Select
     
    ' indication heure et date
    CreateObject("Wscript.shell").Popup "Bonjour " & Environ("username") & "." & Chr$(13) & Chr$(13) & "Nous sommes le " & Date & " et il est exactement " & Time & "." & Chr$(13) & Chr$(13) & "Une réinitialisation des cellules de la base de données va avoir lieu." & Chr$(13) & Chr$(13) & "Attendre le retour sur la page d'accueil avant toute manipulation.", 10, "Application développée par Graphikris.", vbExclamation
     
    'Défiltre toutes les colonnes
     
    Sheets("Feuil1").Select
    Range("A1:DY122").Select
     
        Range("A1:DY121").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        Range("B2").Select
     
    ' remet le recalcul des cellules
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Les lignes 29 et 31 font en sorte que le tri aille de A1 à DY121. Si des lignes sont rajoutées voir supprimées, il risque d'avoir un Bug.

    Quelqu'un pourrait-il m'aider en insérant l'objet : ListObject (dixit Mr Fauconnier Pierre) dont je ne connais pas l'existence ainsi que la fonction ?

    Cordialement
    Graphikris.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour.

    Je viens de regarder sur une version 2003, les listes (objet normal ListObject) peuvent être triées sans souci.

    Donc refaire le test sur un nouveau classeur …

    Sinon comme déjà évoqué sur un autre de tes posts, voir DataBodyRange, utile pour trier son parent ListObject

  3. #3
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Bonjour et merci Marc,

    Le problème est que je ne comprends absolument rien à ce que tu veux dire.
    Comment refaire le test sur un nouveau classeur ?
    De meme pour : voir DataBodyRange, utile pour trier son parent ListObject
    Que dois je faire exactement ?

    Cordialement

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un exemple de procédure permettant de trier une liste (testé avec la version 2003 et 2010).
    La liste se nomme maListe et couvre la plage A1:J106
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub SortListObject()
     Dim sht As Worksheet: Set sht = ThisWorkbook.Worksheets("db")
     Dim list As ListObject: Set list = sht.ListObjects("maListe")
     With list.DataBodyRange
     .Sort Key1:=.Range("E1"), Key2:=.Range("D1"), Order2:=xlDescending, Header:=xlYes
     End With
    End Sub
    Pour connaître l'adresse de la plage de données d'une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print List.DataBodyRange.Address
    et l'adresse de la plage contenant le header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print List.HeaderRowRange.Address
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Dim sht As Worksheet: Set sht = ThisWorkbook.Worksheets("db")
     Dim list As ListObject: Set list = sht.ListObjects("maListe")
     With list
     Debug.Print .DataBodyRange.Address
     Debug.Print .HeaderRowRange.Address
     End With
    Pour créer une liste ou un tableau (version >2003)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CreateList()
     Dim sht As Worksheet: Set sht = ThisWorkbook.Worksheets("db")
     With sht
     .ListObjects.Add(xlSrcRange, .Range("$A$1").CurrentRegion, , xlYes).Name = "maListe"
     End With
    End Sub
    Convertir une liste en plage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub ConvertListToRange()
     Dim sht As Worksheet: Set sht = ThisWorkbook.Worksheets("db")
     sht.ListObjects("maListe").Unlist
    End Sub
    Mais tu peux aussi utiliser le tri classique même si la plage est une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub SortRange()
     Dim dbCli As Range: Set dbCli = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
     With dbCli: .Sort Key1:=.Range("E1"), Key2:=.Range("D1"), Order2:=xlDescending, Header:=xlYes: End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. variable objet VBA excel
    Par mikeduff dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 28/11/2009, 18h00
  2. Variable Objet VBA excel
    Par blade15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/07/2009, 10h57
  3. Modèle objet VBA Excel
    Par Aizen64 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/10/2008, 15h19
  4. Variable Objet VBA
    Par blade15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/12/2007, 18h41
  5. Explorateur d'Objets VBA comment Instancier ?
    Par jacou dans le forum VBA Access
    Réponses: 6
    Dernier message: 10/11/2007, 00h15

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