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 :

Redimensionner un tableau (ListObject) jusqu’à la dernière ligne [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Points : 89
    Points
    89
    Par défaut Redimensionner un tableau (ListObject) jusqu’à la dernière ligne
    Bonjour,
    Après avoir écumer le net , je m'en remet a vous:
    J'ai une feuille avec tableau (type Liste). J'ajoute des lignes par VBA à la fin de ce tableau et j'aimerais que ces lignes soient intégrées au tableau.

    Avec l’enregistreur de macro, j'obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Sheets("Feuil1").ListObjects("Liste_perso").Resize Range("A1:N68")
    Ça fonctionne mais si j'ajoute une colonne ou que je déplace le début du tableau vers le bas, la plage n'est plus bonne.

    J'ai trouvé dans les propriétés du "ListObjects", le code pour determiner la plage de l'en-tête:Comment faire le reste?

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 495
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 495
    Points : 16 407
    Points
    16 407
    Par défaut
    Bonjour

    Si ton tableau n'a pas de ligne de sous-total et tu ajoutes bien les données sous la dernière du tableau, la nouvelle données allonge automatiquement le tableau.

    Idem pour une colonne à droite ou dedans.

    Si tu as une ligne de sous totaux il faut insérer une ligne avant d'ajouter des données.

    Le resize n'est donc pas nécessaire si ton code respecte ces positions pour l'ajout.

    Pour la hauteur et la largeur tu peux soit
    • utiliser les techniques habituelles range (sachant que le tableau a un nom il est facile de déterminer sa plage)
    • ou bien les propriétés de l'objet.
      Sert-toi de l'aide, du débogueur et des espions pour voir toutes les propriétés et les utiliser selon tes besoins.

  3. #3
    Membre régulier Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Points : 89
    Points
    89
    Par défaut
    Bonjour 78chris,
    Ta remarque sur l’auto-dimensionnement des tableau est pertinente ma ça c’était avant ... avant que je change pour d'autre raison ma methode de copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Nb_Ligne& = .Cells(65536, 1).End(xlUp).Row
    For Ligne_Source& = 5 To Nb_Ligne& ' definit la premiere ligne de données
     If .Cells(Ligne_Source&, "D").Value = "" Then  ' colonne de la cellule à tester
       .Cells(Ligne_Source&, 1).EntireRow.Copy
       Workbooks(ThisWorkbook.Name).Sheets("Feuil1").Cells(Ligne_Cible&, 1).PasteSpecial xlPasteValues
       Ligne_Cible& = Ligne_Cible& + 1
       End If
    Next
    Avant je faisais un copié-collé d'une plage et ça marchait comme tu le décrit. J'ai changé de méthode pour tester moi-même toute les lignes même si filtre actif.
    Et depuis les lignes s'ajoutent mais le tableau ne se redimensionne pas.
    Pour la fin de ton message, j'ai vraiment essayé de trouvé par moi-même mais je sèche .

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 495
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 495
    Points : 16 407
    Points
    16 407
    Par défaut
    Bonjour

    Si tu copies des lignes complètes tu es hors tableau.
    Il faut copier coller juste le bon nombre de colonnes (ou lignes).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("NomTableau").Address
    te donne la plage occupée.

    Concernant le débogueur il faut s'en servir.
    Un espion de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.ListObjects("NomTableau")
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("nomOnglet").ListObjects("NomTableau")
    te donne la plupart des propriétés de l'objet à compléter par l'aide VBA.

  5. #5
    Membre régulier Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Points : 89
    Points
    89
    Par défaut Mieux vaut tard que jamais
    Bonjour,
    Merci a Chris pour sa réponse qui m'a aidé a comprendre mon erreur.
    Je suis donc revenu a mon ancienne méthode ou je copie ligne a ligne dans une feuille temporaire pour ensuite copier la plage de cellule entièrement a la ça marche nickel dans mon tableau ayant déjà une ligne vide.
    Par contre, pour un second passage ou je n'ai plus de ligne vide, j'ai du tester si la ligne la dernière ligne est en dehors du tableau (en cherchant sur le forum ) pour ajouter une ligne vide .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        DerLigne = .Sheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row ' compte seulement l'entete dans tableau vide
        If Intersect(.Sheets("Feuil1").Range("A" & DerLigne + 1), Range("MonTableau")) Is Nothing Then Worksheets("Feuil1").ListObjects("MonTableau").ListRows.Add
    J'ai pris cette solution de calcule pour la dernière ligne car celles utilisées jusqu’à présent comptabilisaient aussi la ligne vide.
    Merci a Chis pour ses conseils avisés.

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

Discussions similaires

  1. Recopier de valeur jusqu'à la dernière ligne
    Par Sherman750 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/11/2012, 19h44
  2. boucle "jusqu'à la dernière ligne"
    Par tallent_e dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/12/2011, 18h36
  3. [XL-2007] Tableau croisé dynamique et dernière ligne
    Par bob633 dans le forum Excel
    Réponses: 6
    Dernier message: 10/03/2011, 14h06
  4. [XL-2003] code copier formule jusqu'à la dernière ligne
    Par ridokou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/02/2011, 14h56
  5. scrollpanel non visible jusqu'à la dernière ligne
    Par cotede2 dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 08/11/2009, 16h32

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