Suppresion de colonne en fonction de la valeur de la premiére li
Résolu
camcam1404
-
camcam1404 Messages postés 64 Date d'inscription Statut Membre Dernière intervention -
camcam1404 Messages postés 64 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'aimerais supprimer les colonnes dont la première ligne ne s'intitule pas A, B,C, D ou E.
Pour cela j'ai écrit le code suivant mais quand je l'éxécute Excel plante.
Quelqu'un aurait une explication ?
Sub columnsdelete ()
Dim i as long
Dim lastcol as long
lastcol = Cells(1, Columns.Count).End(xlToLeft).Column
For i=4 to lastcol
If Cells (1,i) <> "A" or Cells (1,i) <> "B"; Cells (1,i) <> "C", Cells (1,i) <> "D"; Cells (1,i) <> "E" Then
Then Cells(1, i).EntireColumn.Delete
Enf if
next i
J'aimerais supprimer les colonnes dont la première ligne ne s'intitule pas A, B,C, D ou E.
Pour cela j'ai écrit le code suivant mais quand je l'éxécute Excel plante.
Quelqu'un aurait une explication ?
Sub columnsdelete ()
Dim i as long
Dim lastcol as long
lastcol = Cells(1, Columns.Count).End(xlToLeft).Column
For i=4 to lastcol
If Cells (1,i) <> "A" or Cells (1,i) <> "B"; Cells (1,i) <> "C", Cells (1,i) <> "D"; Cells (1,i) <> "E" Then
Then Cells(1, i).EntireColumn.Delete
Enf if
next i
A voir également:
- Suppresion de colonne en fonction de la valeur de la premiére li
- Fonction si et - Guide
- Déplacer colonne excel - Guide
- Trier colonne excel - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
8 réponses
Bonjour,
Dans cette ligne :
Est-ce qu'il ne faudrait pas uniformiser ça ?
Par ailleurs, fais attention sur ta variable "i". Je ne sais pas si tu supprimes la colonne ou son contenu, mais si tu supprimes la colonne elle-même, il ne faut pas incrémenter "i" puisque toutes les colonnes suivantes ont été décalées...
Xavier
Dans cette ligne :
If Cells (1,i) <> "A" or Cells (1,i) <> "B"; Cells (1,i) <> "C", Cells (1,i) <> "D"; Cells (1,i) <> "E" Then, un coup tu sépares les termes par "or", un coup par ";", un coup par ","...
Est-ce qu'il ne faudrait pas uniformiser ça ?
Par ailleurs, fais attention sur ta variable "i". Je ne sais pas si tu supprimes la colonne ou son contenu, mais si tu supprimes la colonne elle-même, il ne faut pas incrémenter "i" puisque toutes les colonnes suivantes ont été décalées...
Xavier
Bonjour Camcam, bonjour le forum,
Peut-être comme ça :
Quand on supprime (ligne ou colonne) il est d'usage de partir de la dernière jusqu'à la première avec Step -1 pour assurer la prochaine (ligne ou colonne) avec Next I.
Et ton autre problème ? Tu n'as pas dis si ça fonctionnait pou pas...
Peut-être comme ça :
Sub columnsdelete() Dim TV(1 To 5) Dim I As Long Dim J As Byte Dim LastCol As Long TV(1) = "A" TV(2) = "B" TV(3) = "C" TV(4) = "D" TV(5) = "E" LastCol = Cells(1, Columns.Count).End(xlToLeft).Column For I = LastCol To 4 Step -1 For J = 1 To 5 If Cells(1, I).Value = TV(J) Then GoTo suite Next J Columns(I).Delete suite: Next I End Sub
Quand on supprime (ligne ou colonne) il est d'usage de partir de la dernière jusqu'à la première avec Step -1 pour assurer la prochaine (ligne ou colonne) avec Next I.
Et ton autre problème ? Tu n'as pas dis si ça fonctionnait pou pas...
Bonjour tout le monde,
Sub columnsdelete() Dim i As Long Dim lastcol As Long lastcol = Cells(1, Columns.Count).End(xlToLeft).Column For i = 1 To lastcol If Cells(1, i) < "A" Or Cells(1, i) > "E" Then Cells(1, i).EntireColumn.Delete Next i End Sub
Bonjour,
Ou bien :
Ou bien :
Sub columnsdelete() Dim i As Long Dim lastcol As Long With Worksheets(1) lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column For i = lastcol To 4 Step -1 Select Case .Cells(1, i).Value Case "A", "B", "C", "D", "E" Case Else .Columns(i).Delete End Select Next i End With End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Une solution avec une UserForm nommée UserForm1 :
L'Userform1 contient :
- 1 Label avec le texte : "Sélectionnez dans la liste les colonnes que vous souhaitez garder."
- 1 ListBox nommée ListBox1
- 1 CommandButton nommé CommandButton1, texte : "Valider"
- 1 CommandButton nommé CommandButton2, texte : "Annuler"

Le code de l'UserForm :
la procédure Sub columnsdelete ouvre l'UserForm. L'utilisateur coche dans la liste la ou les colonnes qu'il souhaite garder et valide...
Une solution avec une UserForm nommée UserForm1 :
Sub columnsdelete() UserForm1.Show End Sub
L'Userform1 contient :
- 1 Label avec le texte : "Sélectionnez dans la liste les colonnes que vous souhaitez garder."
- 1 ListBox nommée ListBox1
- 1 CommandButton nommé CommandButton1, texte : "Valider"
- 1 CommandButton nommé CommandButton2, texte : "Annuler"

Le code de l'UserForm :
Private Sub UserForm_Initialize() Me.Caption = "SUPPRESSION" Me.ListBox1.ListStyle = fmListStyleOption Me.ListBox1.MultiSelect = fmMultiSelectMulti Me.ListBox1.AddItem "A" Me.ListBox1.AddItem "B" Me.ListBox1.AddItem "C" Me.ListBox1.AddItem "D" Me.ListBox1.AddItem "E" End Sub Private Sub CommandButton1_Click() Dim I As Long Dim J As Byte Dim LastCol As Long With Worksheets(1) LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column For I = LastCol To 4 Step -1 For J = 1 To 5 If .Cells(1, I).Value = Me.ListBox1.List(J) Then GoTo suite Next J .Columns(I).Delete suite: Next I End With Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End Sub
la procédure Sub columnsdelete ouvre l'UserForm. L'utilisateur coche dans la liste la ou les colonnes qu'il souhaite garder et valide...
Re,
Non, t'as pas bien compris... Le code de l'Userform se trouve dans le composant VBA Userform1. Cela signifie qu'il te faudra insérer une UserForm dans ton fichier avec les différents contrôles que j'ai cités, puis y copier/coller le code que je t'ai donné pour elle...
Le Sub columsdelete reste là où tu l'avais mis précédemment mais son code ne contient plus que la ligne pour l'ouverture de l'UserForm.
C'est à la validation de l'UserForm que se fait le traitement.
C'est toi qui a fourni Sub columsdelete dans ton premier post, je n'ai fait que l'utiliser pour te simplifier les choses (enfin, je pensais)...
Non, t'as pas bien compris... Le code de l'Userform se trouve dans le composant VBA Userform1. Cela signifie qu'il te faudra insérer une UserForm dans ton fichier avec les différents contrôles que j'ai cités, puis y copier/coller le code que je t'ai donné pour elle...
Le Sub columsdelete reste là où tu l'avais mis précédemment mais son code ne contient plus que la ligne pour l'ouverture de l'UserForm.
C'est à la validation de l'UserForm que se fait le traitement.
C'est toi qui a fourni Sub columsdelete dans ton premier post, je n'ai fait que l'utiliser pour te simplifier les choses (enfin, je pensais)...
Bonjour tt le monde
on va jusqu'à quelle colonne ? Z, AZ, BZ..... XFD ?
Michel
on va jusqu'à quelle colonne ? Z, AZ, BZ..... XFD ?
Michel
Beaucoup !
56 Colonnes a garder: point commun premiére ligne contient le mot "Rouge"
84 Colonnes: point a garder commun premiére ligne contient le mot "Bleu"
84 Colonnes a garder : point commun premiére ligne contient le mot "Vert"
28 Colonnes a garder:point commun premiére ligne contient le mot "Orange"
28 Colonnes a garder:point commun premiére ligne contient le mot "Jaune"
28 Colonnes a garder:point commun premiére ligne contient le mot "Turquoise"
28 Colonnes a garder:point commun premiére ligne contient le mot "Beige"
14 Colonnes a garder:point commun premiére ligne contient le mot "Violet"
peux importe que le mot "Rouge" soit en majuscule, minuscule etc
56 Colonnes a garder: point commun premiére ligne contient le mot "Rouge"
84 Colonnes: point a garder commun premiére ligne contient le mot "Bleu"
84 Colonnes a garder : point commun premiére ligne contient le mot "Vert"
28 Colonnes a garder:point commun premiére ligne contient le mot "Orange"
28 Colonnes a garder:point commun premiére ligne contient le mot "Jaune"
28 Colonnes a garder:point commun premiére ligne contient le mot "Turquoise"
28 Colonnes a garder:point commun premiére ligne contient le mot "Beige"
14 Colonnes a garder:point commun premiére ligne contient le mot "Violet"
peux importe que le mot "Rouge" soit en majuscule, minuscule etc
Bonjour,
Essaies ce code :
Un fichier exemple :
https://www.cjoint.com/c/GABj7IFEDXA
Essaies ce code :
Private Sub UserForm_Initialize() Me.Caption = "SUPPRESSION" Me.ListBox1.ListStyle = fmListStyleOption Me.ListBox1.MultiSelect = fmMultiSelectMulti Me.ListBox1.AddItem "A" Me.ListBox1.AddItem "B" Me.ListBox1.AddItem "C" Me.ListBox1.AddItem "D" Me.ListBox1.AddItem "E" End Sub Private Sub CommandButton1_Click() Dim I As Long Dim J As Byte Dim LastCol As Long Dim Suppr As Boolean With Worksheets(1) LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column For I = LastCol To 4 Step -1 Suppr = True For J = 0 To 4 If Me.ListBox1.Selected(J) Then If .Cells(1, I).Value = Me.ListBox1.List(J) Then Suppr = False End If Next J If Suppr Then .Columns(I).Delete Next I End With Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End Sub
Un fichier exemple :
https://www.cjoint.com/c/GABj7IFEDXA
oui il faut que j'uniformise tout ca. Et oui je souhaite supprimer la colonne entiére.
Merci!