Microsoft 365 Supprimer des colonnes discontinues

iliess

XLDnaute Occasionnel
bonjour
Je cherche la méthode la plus rapide pour supprimer des colonnes discontinues B D E H K L M O dans un tableau structuré nommé Tableau1 de A6 :O16 en VBA.
Cordialement

Le tableau avant :
1713118464428.png


Le tableau après :
1713118572502.png
 

Pièces jointes

  • Sup plusieur colonnes.xlsm
    11.7 KB · Affichages: 5
Solution
Bonsoir à tous,

Moi aussi jouer je veux ;).
Les numéros des colonnes sont les numéros des colonnes dans le tableau.
Si on déplace le tableau, les numéros des colonnes à supprimer ne changent pas.
La seule chose à modifier dans le code, c'est la cellule de départ du tableau ( [a6] ).

VB:
Sub test()
Dim mesColonnes, i&, j&
   mesColonnes = Array(2, 13, 4, 11, 8, 15, 5, 12)   ' pas forcément ordonné
   For i = 0 To UBound(mesColonnes): Sheets("Feuil1").[a6].ListObject.ListColumns(Application.Large(mesColonnes, i + 1)).Delete: Next
End Sub

edit : Bonsoir @patricktoulon :).

Franc58

XLDnaute Occasionnel
Salut, si tu dois faire cette manipulation régulièrement et que c'est toujours les mêmes colonnes, cette macro fait le job.

Code:
Sub SupprimerColonnes()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim arr As Variant
    Dim i As Long

       Set ws = ThisWorkbook.Sheets("Feuil1")

       Set tbl = ws.ListObjects("Tableau1")

    ' Définir le tableau des colonnes à supprimer
    arr = Array(15, 13, 12, 11, 8, 5, 4, 2)

    ' Boucle à travers le tableau pour supprimer les colonnes
    For i = LBound(arr) To UBound(arr)
        tbl.ListColumns(arr(i)).Delete
    Next i
End Sub
 

Gégé-45550

XLDnaute Accro
bonjour
Je cherche la méthode la plus rapide pour supprimer des colonnes discontinues B D E H K L M O dans un tableau structuré nommé Tableau1 de A6 :O16 en VBA.
Cordialement

Le tableau avant :
Regarde la pièce jointe 1195020

Le tableau après :
Regarde la pièce jointe 1195021
Bonsoir,
Procédure à associer éventuellement à un bouton :
VB:
Sub SupprCol()
Dim i As Long
    With Worksheets("Feuil1").ListObjects("Tableau1")
        i = .ListColumns.Count
        Do While i >= 1
            If Left(.ListColumns(i).Name, 7) = "Colonne" Then
                .ListColumns(i).Range.Delete
            End If
            i = i - 1
        Loop
    End With
End Sub
Cordialement,
 

iliess

XLDnaute Occasionnel
Bonsoir M. @Gégé-45550
Merci pour votre code, c'est rapide et efficace. Effectivement, la libelle qui commence Colonne.
Mais si c'est possible que les valeurs en J1 et J2 se déplacent avec la suppression ?

Le tableau avant :
1713122300366.png


résultat souhaité
1713122314067.png


Votre code
1713122355048.png
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonsoir
une règle d'or quand on supprime des lignes ou des colonne non contiguës dans un tableau
c'est de le faire en commençant par la dernière pour terminer par la première
la demande est de supprimer je cite
supprimer des colonnes discontinues B D E H K L M O dans un tableau structuré nommé Tableau1
je met donc les colonnes désignées en évidence
1713123791438.png

comme ici les index de colonne feuille seront les même que le tableau
puisque qu'il commence en colonne "A"
je vais donc me servir des indexs colonne de feuille
je vais donc supprimer les colonnes à reculons de droite vers la gauche
VB:
Sub test()
    Dim col, colm&
    col = Split("B D E H K L M O", " ")
    For i = UBound(col) To 0 Step -1
        colm = Cells(1, col(i)).Column
        Sheets("Feuil1").[tableau1].ListObject.ListColumns(colm).Delete
    Next
End Sub
attention c'est parti
demo.gif


terminé

et si le tableau ne devait pas commencer en colonne "A"
mais que l'on avait que les colonne de feuille pour argument
on rectifie comme ceci
Code:
Sub test()
    Dim col, colm&, TbS
    col = Split("B D E H K L M O", " ")
    Set TbS = Sheets("Feuil1").[tableau1].ListObject
    For i = UBound(col) To 0 Step -1
        colm = Cells(1, col(i)).Column + (TbS.Range.Column - 1)
        .ListColumns(colm).Delete
    Next
End Sub

pour finir je répète
quand on supprime des lignes dans un tableau structuré , une plage de cellule , une listbox , une combobox et ce que peut comporter une liste
on le fait en partant de la fin vers le début
c'est une règle immuable


;)
 

iliess

XLDnaute Occasionnel
merci, M @patricktoulon pour le code et pour vos conseils.
SVP, après tous vos codes, je dois ajouter les lignes suivantes.
range("F1").value = range("J1").value
range("F2").value = range("J2").value
En plus, éliminer la fusion du A3 et A4
Centrer la cellule A3:G3 et A3:G3

Résultat des codes
1713128080990.png


Résultat souhaité


1713128251860.png
 

Pièces jointes

  • 1713128104720.png
    1713128104720.png
    27 KB · Affichages: 1

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Moi aussi jouer je veux ;).
Les numéros des colonnes sont les numéros des colonnes dans le tableau.
Si on déplace le tableau, les numéros des colonnes à supprimer ne changent pas.
La seule chose à modifier dans le code, c'est la cellule de départ du tableau ( [a6] ).

VB:
Sub test()
Dim mesColonnes, i&, j&
   mesColonnes = Array(2, 13, 4, 11, 8, 15, 5, 12)   ' pas forcément ordonné
   For i = 0 To UBound(mesColonnes): Sheets("Feuil1").[a6].ListObject.ListColumns(Application.Large(mesColonnes, i + 1)).Delete: Next
End Sub

edit : Bonsoir @patricktoulon :).
 

Pièces jointes

  • iliess- Sup plusieurs colonnes- v1.xlsm
    23.2 KB · Affichages: 2
Dernière édition:

Discussions similaires

Réponses
4
Affichages
200

Statistiques des forums

Discussions
312 246
Messages
2 086 573
Membres
103 247
dernier inscrit
bottxok