Suppresion de colonne en fonction de la valeur de la premiére li

Résolu/Fermé
camcam1404 - 23 janv. 2017 à 14:35
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019 - 31 janv. 2017 à 13:46
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

8 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
23 janv. 2017 à 15:18
Bonjour,

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
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
24 janv. 2017 à 13:32
Bonjour,

oui il faut que j'uniformise tout ca. Et oui je souhaite supprimer la colonne entiére.
Merci!
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
23 janv. 2017 à 15:18
Bonjour Camcam, bonjour le forum,

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...
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
24 janv. 2017 à 13:48
C'est noté !
0
f894009 Messages postés 17192 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 16 juin 2024 1 708
23 janv. 2017 à 15:30
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
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
24 janv. 2017 à 13:35
Merci mais je cherche quelque chose de plus "général" ou cas où il y aurait pas de liens entre les noms de la première ligne pour les colonnes à suppimer.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
23 janv. 2017 à 15:30
Bonjour,

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 

0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
24 janv. 2017 à 13:47
Ca fonctionne. Merci !
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
24 janv. 2017 à 13:53
Une autre question !

Est ce qu'il serait possible d'entrer le "case" par le biais d'une boite de dialogue ?
J'aimerais que l'utilisateur soit libre de choisir les colonnes qu'il veut garder.

(je cherche =D)
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
Modifié par Patrice33740 le 24/01/2017 à 16:47
Beaucoup de choses sont possible, comme par exemple la solution de ThauThème (bonjour ...), Il faut préciser ton besoin, le texte testé est-il susceptible de changer (par exemple "Test" au lieu de "A") ? Combien de colonnes concernées au maximum ....
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
25 janv. 2017 à 16:03
Encore une question !
Dans le cas ou la premiére ligne contient A mais pas uniquement.
Il faut que j'utilise autre chose que value.
Se serait donc un Like ?
Mais j'aime la structure du programme avec le Select.
Tu sais comment je pourrai contourner l´utilisation du Like dans ce cas ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
24 janv. 2017 à 14:50
Re,

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...

0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
25 janv. 2017 à 08:12
Bonjour ThautTheme,

Si j'ai bien compris pour chaque bouton la structure du programme doit etre:
Private Sub Nom du bouton
Unload me
End sub

Cependant le Sub columsdelete doit apparaitre quelque part non ?
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
25 janv. 2017 à 09:27
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)...
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
25 janv. 2017 à 10:57
ok je vais me pencher la dessus.
Merci pour le coup de pouce !
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
Modifié par camcam1404 le 26/01/2017 à 15:28
Bonjour ThauTeme,

voilà maintenant je sais créer des Userform ! :)

Mais en exécutant le programme, j'ai une erreur de type 381 à la ligne 21 qui apparait.
Tu saurais pourquoi ?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
26 janv. 2017 à 21:43
Remplaces :
        For J = 1 To 5
Par
        For J = 0 To 4
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
Modifié par camcam1404 le 27/01/2017 à 08:49
La numérotation d´un tableau commence toujours à 0. J'avais pas pris ca en compte !
Mais que les sélection soient cochées ou non, les colonnes apparaissent toujours quand à l'éxécution code..
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 25/01/2017 à 09:32
Bonjour tt le monde

on va jusqu'à quelle colonne ? Z, AZ, BZ..... XFD ?

 Michel
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
Modifié par camcam1404 le 25/01/2017 à 11:40
jusqu´a la colonne MQ
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778 > camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
25 janv. 2017 à 11:36
Combien et quel type d'intitulé est-on susceptible de chercher ?
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
25 janv. 2017 à 11:50
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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778 > camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
25 janv. 2017 à 13:06
à garder ou à supprimer ?
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
25 janv. 2017 à 13:14
à garder

Par exemple:
je choisis de garder les 28 colonnes qui contiennent en premiére ligne le mot "beige" donc les 56+ 84*2+28*3+14 colonnes vont etre supprimé.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
27 janv. 2017 à 11:00
Bonjour,

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
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
31 janv. 2017 à 13:46
Ca marche !

Merci Patrice 33740
0