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 SubJe 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 Submais 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