Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro suppression de colonne

  • Initiateur de la discussion Initiateur de la discussion CB60
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

CB60

XLDnaute Barbatruc
Bonjour,
je cherche à rendre mon code VBA pour supprimer des colonnes plus rapide
J'ai trouvé cette macro de Job, qui fonctionne si je fais feuille par feuille
Code:
Sub SupprimeColonnes()
Dim v, c As Range, sup As Range
v = "x"
For Each c In ActiveSheet.UsedRange.Rows(2).Cells
  If c = v Then Set sup = Union(c, IIf(sup Is Nothing, c, sup))
Next
If Not sup Is Nothing Then sup.EntireColumn.Delete
End Sub
je l'ai donc transformé de cette façon:

Code:
Sub effaceCOL()
Dim f
Dim v, c As Range, sup As Range
v = "x"
For Each f In Array("Result_Tric ", "Result_Finished", "Analyse dimensionnelle", "FT TRE1")
    Sheets(f).Activate
    With Sheets(f)
        Rows("2:2").Copy
        Rows("2:2").PasteSpecial xlPasteValues
    End With
    For Each c In ActiveSheet.UsedRange.Rows(2).Cells
        If c = v Then Set sup = Union(c, IIf(sup Is Nothing, c, sup))
    Next
        If Not sup Is Nothing Then sup.EntireColumn.Delete
Next f
End Sub
afin de boucler sur mes feuilles, la macro que j'ai modifié plante à cet endroit:
Code:
Set sup = Union(c, IIf(sup Is Nothing, c, sup))
erreur d'exécution 1004
Avez vous une idée du pourquoi?
 
Bonjour CB60,
J'ai écris ceci sans tester car pas de fichier exemple.
Si j'ai bien compris . . .
Bruno
VB:
Sub effaceCOL()
Dim f,k as long
Dim v, c As Range
v = "x"
For Each f In Array("Result_Tric ", "Result_Finished", "Analyse dimensionnelle", "FT TRE1")
With Sheets(f)'le . indique le with
  col=.cells(2,256).end(1).row
  .range(.cells(2,1),.cells(2,col)).value=.range(.cells(2,1),.cells(2,col)).value
    For k=1 to col
     If .cells(2,k) = v Then .columns(k).delete : exit for
    Next
End With
Next f
End Sub
 
Bonjour
merci, je teste tout de suite

EDIT
J'ai testé, mais j'ai l'impression que ça reste sur la colonne deux et que ça ne m'efface pas mes colonnes
 
Dernière édition:
Re
Je met un fichier, au cas ou?
Youky, je n'ai pas reussi à faire fonctionner ta macro, le fichier te permettra peut être de voir pourquoi?
Il y a plein de "ref" dedans, mais le plus important est la structure de la ligne deux
 

Pièces jointes

Oui Youky,
je sais le faire avec une boucle colonne par colonne, mais la macro est longue, ( feuille et colonne)
la façon que Job a fais permet, de boucler sur toutes les colonnes et ensuite supprimer toutes les colonne d'un seul coup, ça vas beaucoup plus vite.
Mais je ne comprend pas ce qui plante
 
Bonjour CB60, Bruno,

Il faut bien sûr initialiser la variable sup à chaque feuille :
Code:
Set sup =Nothing 'initialise la variable
For Each c In ActiveSheet.UsedRange.Rows(2).Cells
        If c = v Then Set sup = Union(c, IIf(sup Is Nothing, c, sup))
Next
Détail : pourquoi activer chaque feuille ??? En VBA c'est inutile, tout le monde le sait...

Et .Copy/Paste pour ne conserver que les valeurs c'est une méthode de débutant.

A+
 
Merci Job, Youki
Je teste cela,
pourquoi j'activais chaque feuille, tout simplement parce que j'ai mis des points d'arrêt dans ma macro, afin de voir ce qui se passe
je dois les enlever des que ça fonctionne

Merci à vous deux d'avoir pris le temps de me répondre,
CA MARCHE, ça se voit que je ni connais rien en macro
 
Re
Job, oui, je suis débutant en macro, mais si je ne mets pas le copy/paste, les X passent en "ref" et je n'effaçais pas toutes les cellules, de la façon que tu a réalisé ta macro, je vais tester si c'est encore necessaire
 
Re,

Le code qui va bien :
Code:
Sub effaceCOL()
Dim v, f, sup As Range, c As Range
v = "x"
For Each f In Array("Result_Tric ", "Result_Finished", "Analyse dimensionnelle", "FT TRE1")
    With Sheets(f).UsedRange
        .Rows(2) = .Rows(2).Value 'supprime les formules
        Set sup = Nothing 'initialise la variable
        For Each c In .Rows(2).Cells
            If c = v Then Set sup = Union(c, IIf(sup Is Nothing, c, sup))
        Next
        If Not sup Is Nothing Then sup.EntireColumn.Delete
    End With
Next
End Sub
Détail : pourquoi un espace après Result_Tric ???

Edit : s'il n'y a pas d'autres lignes que la 2ème ligne à traiter :
Code:
Sub effaceCOL()
Dim v, f, sup As Range, c As Range
v = "x"
For Each f In Array("Result_Tric ", "Result_Finished", "Analyse dimensionnelle", "FT TRE1")
    With Sheets(f).UsedRange.Rows(2)
        .Value = .Value 'supprime les formules
        Set sup = Nothing 'initialise la variable
        For Each c In .Cells
            If c = v Then Set sup = Union(c, IIf(sup Is Nothing, c, sup))
        Next
        If Not sup Is Nothing Then sup.EntireColumn.Delete
    End With
Next
End Sub
A+
 
Dernière édition:
Merci encore Job,
L'espace il existait avant que je récupère ce fichier dans mon entreprise, et des données viennent d'une autre base, je n'ai donc pas réussi à l'enlever sur ce fichier
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
278
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…