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 :

Suppression dernière ligne d'un tableau sur une feuiille avec 2 tableaux structurés séparés [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 284
    Par défaut Suppression dernière ligne d'un tableau sur une feuiille avec 2 tableaux structurés séparés
    Bonjour à toutes et tous,

    Jusqu'à présent j'utilise ce code pour supprimer la dernière ligne d'un tableau structuré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Supp_Der_Ligne()
        Sheets("NomOnglet").Activate
         DerCell = Cells(Rows.Count, "K").End(xlUp).Row
         Rows(DerCell).Delete
    End Sub
    Mais la feuille sur laquelle je travaille a 2 tableaux structurés séparés par une colonne vierge.
    Le premier tableau est nommé "Base_Clients", le second "Tab_Nom_Client".
    Si je veux supprimer la dernière ligne du tableau "Base_Clients" le code ci-dessus ne peux plus être utilisé au risque de supprimer la dernière ligne du second tableau.

    Je sais créer une ligne en fin de tableau avec ce code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Ajout_Ligne()
      Dim T As ListObject ' T = Le tableau concerné
      Dim Col As Integer  ' Col = La colonne concernée
      Set T = Range("Base_Clients").ListObject
      With T
       Col = .ListColumns("Nom Col Concernée").Index
       .ListRows.Add                   ' Ajoute une nouvelle ligne à la fin du tableau
      End With
      Set T = Nothing
    End Sub
    Je pensais naïvement remplacer ListRows.Add par ListRows.Delete mais que nenni.

    Avec l'enregistreur de macro, j'ai Selection.ListObject.ListRows(3).Delete où 3 représente la ligne 3 qui est la dernière ligne.
    C'est, je pense, d'ici que doit venir la solution ListRows(3).
    Mais je sèche.

    J'ai essayé en m'appuyant sur le Tutoriel de laurent_ott https://laurent-ott.developpez.com/t...ux-Structures/ mais je m'y suis perdu. Surchauffe de mes petites cellules grises.

    J'ai donc besoin de votre aide.
    Merci
    Philippe

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    Déjà dans le code ajout Col ne sert à rien ; simplifier en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Ajout_Ligne()
      Dim T As ListObject ' T = Le tableau concerné
      Set T = Range("Base_Clients").ListObject
      T.ListRows.Add                   ' Ajoute une nouvelle ligne à la fin du tableau
      Set T = Nothing
    End Sub
    Sur le même modèle pour supprimer la dernière ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Del_Ligne()
      Dim T As ListObject ' T = Le tableau concerné
      Dim Lig As Long ' Lig = La dernière ligne
      Set T = Range("Base_Clients").ListObject
      With T
       Lig= .ListRows.count ' nb de lignes
       .ListRows(Lig).Delete                   ' supprime une ligne à la fin du tableau
      End With
      Set T = Nothing
    End Sub
    En passant Range sans référence particulière est relatif à la feuille active, donc limite la portée du Sub

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 284
    Par défaut
    Bonjour Tête de chat,

    Merci pour votre réponse.
    Cela fonctionne très bien.
    En revanche, je ne comprends pas votre remarque
    En passant Range sans référence particulière est relatif à la feuille active, donc limite la portée du Sub
    Philippe

  4. #4
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Re,

    En revanche, je ne comprends pas votre remarque
    Effectivement dans le contexte la remarque n'est pas pertinente, le nom de tableau étant un nom global.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 540
    Par défaut
    Citation Envoyé par Phil333250 Voir le message
    En revanche, je ne comprends pas votre remarque
    Si je puis me permettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Supp_Der_Ligne()
        Sheets("NomOnglet").Activate
         DerCell = Cells(Rows.Count, "K").End(xlUp).Row
         Rows(DerCell).Delete
    End Sub
    Ici, tu fais référence aux plages de la feuille.
    Tu calculs la dernière ligne, et tu la supprime.
    Au final, tu supprimes une ligne de la feuille.

    Tandis que Tête de chat, passe par l'objet ListObject, qui représente un tableau structuré.
    La collection ListRows fait référence aux ligne du tableau.
    Il calcul la dernière ligne du tableau, et supprime la dernière ligne du tableau, ce qui n'est pas la même notion que la dernière ligne de la feuille.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 284
    Par défaut
    Bonjour Messieurs,

    Merci pour vos remarques.

    Bonne journée

    Philippe

  7. #7
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 041
    Par défaut
    Citation Envoyé par Phil333250 Voir le message
    J'ai essayé en m'appuyant sur le Tutoriel de laurent_ott https://laurent-ott.developpez.com/t...ux-Structures/ mais je m'y suis perdu. Surchauffe de mes petites cellules grises.
    Bonjour,
    Exemples pour ajouter une ligne au tableau "Base_Clients" avec les fonctions de la documentation que vous citez :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim T As Range
    Set T = Range("Base_Clients")
    Call TS_AjouterUneLigne(T)

    Ou plus simplement :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Call TS_AjouterUneLigne(Range("Base_Clients"))

    Et pour supprimer la dernière ligne :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim T As Range
    Set T = Range("Base_Clients")
    Call TS_SupprimerUneLigne(T, 0)
    Ou

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Call TS_SupprimerUneLigne(Range("Base_Clients"), 0)

    Cordialement.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 284
    Par défaut
    Bonjour laurent_ott

    Merci pour ce complément d'information.
    Je vais pouvoir me replonger dans votre documentation.

    Philippe

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

Discussions similaires

  1. [XL-2007] VBA suppression de ligne d'un tableau comportant une valeur spécifique
    Par PSAIMOND dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/02/2014, 13h57
  2. Réponses: 3
    Dernier message: 17/10/2010, 19h10
  3. Réponses: 3
    Dernier message: 08/03/2010, 06h29
  4. [FAQ VBA Excel] Somme d'une ligne d'un tableau sur un classeur fermé
    Par nox1492 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/12/2007, 13h54
  5. Réponses: 5
    Dernier message: 10/11/2006, 12h00

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