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 :

Créer un ListObject: optimisation de code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Créer un ListObject: optimisation de code
    Bonjour le forum,

    Je m'excuse d'avance car je sais que si j'avais un meilleur lexique, j'aurais pu trouver la réponse par moi-même sur le forum.

    J'ai une feuille Excel, chargée par l'utilisateur de mon formulaire. Sur cette feuille de donnée, il y a un tableau de données, mais qui n'a pas été mis sous forme de tableau au sens Excel (Insertion > tableau)...

    Je programme donc une macro pour mettre cette plage de donnée sous forme de tableau/ListObject.

    Comment faire pour que mon code soit plus robuste et puisse s'adapter automatiquement à la taille de cette plage de donnée ?

    Mon Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ActiveCell.Offset(-46, 4).Range("A1").Select 'REMARQUE: cette case est prise au hasard au milieu de la feuille, _
                                                      'car on peut se "douter" que celle ci est dans la zone de donnée
     
        ActiveCell.Range("A1:W5290").Select 'Taille du tableau lors de enregistrement de la macro 
        ActiveSheet.ListObjects("Tableau2").Name = "TableauEtatInscription"

    Merci à vous

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en supposant que la Cellule A1 est dans la zone de ton tableau

    une méthode parmi tant d'autres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim i As Long
    Dim j As Long
    Dim Plage As Range
     
    i = Workbooks("LeClasseur").Worksheets("Feuil1").Range("A1").End(xlDown).Row
    j = Workbooks("LeClasseur").Worksheets("Feuil1").Range("A1").End(xlToRight).Column
     
    Set Plage = Workbooks("LeClasseur").Worksheets("Feuil1").Range(Cells(1, 1), Cells(i, j))

  3. #3
    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 168
    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 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'avantage d'utiliser les tableaux c'est qu'ils sont dynamiques et donc en VBA, il y a des propriétés qui renvoient les objets
    Exemple Tu places le nom de ton tableau dans la constante TableName et tu testes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub TableProperies()
     Const TableName As String = "tblStock"
     Dim sht As Worksheet, tbl As ListObject, txt As String
     Set sht = ActiveSheet
     Set tbl = sht.ListObjects(TableName)
     txt = "Quelques propriétés de ListObject"
     txt = txt & vbCrLf & "La table complète " & vbTab & tbl.Range.Address
     txt = txt & vbCrLf & "Les étiquettes de colonnes " & vbTab & tbl.HeaderRowRange.Address
     txt = txt & vbCrLf & "Les données " & vbTab & tbl.DataBodyRange.Address
     MsgBox txt
    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

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Re
    Bonjour Joe,

    Justement elle ne l'est pas, mais j'avais pensé à cette "Technique".

    Il me semble qu'il existe une propriété qui permet de sélectionner toute la zone de donnée contigüe dont fait partie une cellule.


    Est-ce que cela te parle ?


    Cordialement

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Re
    Re à vous deux, merci pour vos réponses.


    J'ai trouvé la propriété que je cherchais pour que lors de la création du tableau, je ne sois pas embêté par le fait que je ne connaisse pas la taille du tableau


    Et Joe, en fait le petit problème que j'ai c'est que plusieurs cellules sont complètes aux hasard un peu partout au dessus de la plage de donnée qui m'intéresse.

    Voilà ce que je cherchais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub SelectCurrentRegion()
          ActiveCell.CurrentRegion.Select
    End Sub
    Bonne journée à vous

  6. #6
    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 168
    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 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il me semblait pourtant que tu parlais d'une table (l'objet ListObject)
    Pour connaître l'adresse du tableau où se trouve la cellule active
    L'exemple renvoie $$ si la cellule active ne fait pas partie d'un tableau, il suffit de l'adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox IIf(ActiveCell.ListObject Is Nothing, "$$", ActiveCell.ListObject.Range.Address)
    ou pour obtenir uniquement la plage de données du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox IIf(ActiveCell.ListObject Is Nothing, "$$", ActiveCell.ListObject.DataBodyRange.Address)
    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

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Re
    Le quiproquo vient de moi je sais, j'ai encore du mal à jongler avec tous le lexique.

    J'ai sur une feuille une plage de donnée, disposée "comme si c'était un tableau", mais il ne l'est pas encore. Cette feuille est chargée par l'utilisateur, donc dans l'avenir sont contenu va changer, mais sa disposition sera semblable.

    Pour plus facilement manipuler avec VBA ces données. Je souhaite transformer cette plage, cet ensemble de données contigüe en ListObject/Tableau.

    Comme j'ai dit, vu la disposition "type" de la feuille, je peux avec une relative assurance, affirmé que la cellule E50 fera toujours partie de cet ensemble de donnée. Donc je souhaitais partir de cette cellule pour sélectionner l'ensemble des données et transformer cette plage en tableau/ListObject


    Mais au final, je me suis rendu compte que cela ne servait a rien et que je n'avais directement créer le tableau depuis la cellule. Excel étant suffisamment intelligent que pour comprendre que je souhaitais inclure toutes les données contigües à ce tableau


    Voilà voilà mais merci pour l'attention portée à mon post

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

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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