Macro qui supprime les colonnes en fonction de leur nom

Bonjour à tous,

Je cherche à réaliser une macro qui supprime les colonnes en fonction du nom de leur entête. Je dois traiter des tableaux des plus de 30 colonnes et beaucoup d'entres elles sont inutiles.

J'ai trouvé sur internet des macros à ce sujet mais je n'ai pas réussi à les faire fonctionner (soit elles me fonctionnent que sur 1 colonne, soit elles effaçaient juste le nom mais pas toute la colonne...).

Exemple de ce que je voudrais exactement :

J'ai un tableau avec comme entête des colonnes : nom, prénom, adresse, mail, téléphone, âge, fonction, sport

Je voudrais pouvoir effacer toute la colonne ayant comme entête : adresse, âge, sport

J'ai essayé déjà pas mal de trucs mais je n'y arrive pas.

Merci d'avance pour votre aide.

Loïc

Bonjour Loïc,

Voici une possibilité

Sub SupColonnes()
  Dim dCol As Long, Col As Long
  Dim tColSup, Flg As Boolean
  ' # Liste des colonnes à supprimer
  ' Respecter l'orthographe de chaque terme
  tColSup = Split("adresse,âge,sport", ",")
  ' Avec la feuille
  With Sheets("Essai")
    ' Dernière colonne
    dCol = .Cells(1, Columns.Count).End(xlToLeft).Column
    ' Pour chaque colonne
    For Col = dCol To 1 Step -1
      ' Vérifier si nom de colonne trouvé dans celles à supprimer
      Flg = Not IsError(Application.Match(.Cells(1, Col).Value, tColSup, 0))
      ' Si c'est le cas on supprime
      If Flg Then .Cells(1, Col).EntireColumn.Delete Shift:=xlToLeft
    Next Col
  End With
  MsgBox "C'est fait !"
End Sub

@+

Bonsoir Bruno,

Merci pour votre réponse et la macro que vous m'avez envoyé.

Malheureusement cette dernière ne fonctionne pas (ou du mois je n'arrive pas à l'à faire fonctionner).

J'ai pourtant réalisé à l'identique ce que vous m'avez envoyé (j'ai juste changé le nom des entêtes à supprimer pour faire des tests).

Sub SupColonnes()

  Dim dCol As Long, Col As Long
  Dim tColSup, Flg As Boolean
  ' # Liste des colonnes à supprimer
  ' Respecter l'orthographe de chaque terme
  tColSup = Split("Civilite,Age")
  ' Avec la feuille
  With Sheets("test")
    ' Dernière colonne
    dCol = .Cells(1, Columns.Count).End(xlToLeft).Column
    ' Pour chaque colonne
    For Col = dCol To 1 Step -1
      ' Vérifier si nom de colonne trouvé dans celles à supprimer
      Flg = Not IsError(Application.Match(.Cells(1, Col).Value, tColSup, 0))
      ' Si c'est le cas on supprime
      If Flg Then .Cells(1, Col).EntireColumn.Delete Shift:=xlToLeft
    Next Col
  End With
  MsgBox "C'est fait !"

End Sub

Je vous joints également le tableau sur lequel j'ai essayé et testé la macro.

Merci encore pour votre aide

Bonjour,

Pourquoi ne pas avoir fait un copié/collé du code donné

Il y a une petite différence, mais essentielle (indice : c'est au début du code)

A vous de chercher et trouver

A+

Le tableau étant nommé TB :

Sub Macro1()
  [TB[adresse]].EntireColumn.Delete
  [TB[sport]].EntireColumn.Delete
  [TB[Age]].EntireColumn.Delete
End Sub

mais attention, l’ordre des lignes est l’ordre décroissant des colonnes et les noms ne sont pas faux ! Ici, la casse importe peu (adresse ou AdrEsse passent mais pas adresse suivi d'espace) !

Si le nombre de colonnes visées est très important une boucle pourrait s'imposer.

Bonsoir Bruno,

Effectivement les informations entres parenthèses étaient elles aussi essentielles, merci !

Dernière petite chose que je voudrais vous demander, c'est comment appliquer la macro à la feuille actuellement ouverte ?

Etant donné que je vais utiliser cette macro avec d'autres, je vais à chaque fois faire des imports de données, ce qui ouvrira d'autres feuilles et le nom de la feuille active ne correspondra donc plus avec celui que vous avez mis dans votre code.

J'ai essayé en enlevant With ActiveSheet.Select ou en le remplaçant par ActiveSheet.Select mais ça ne fonctionne pas.

Une idée ? Promis je vous embête plus après

Bonsoir Ordonc,

Très bien c'est noté merci pour l'info

Rechercher des sujets similaires à "macro qui supprime colonnes fonction leur nom"