Supression colonne sous condition

K

kiko

Guest
Bonjour à tous, je viens de découvrir ce forum qui a vraiment l'air sympatoche et gavé de bons conseils.

J'ai beaucoup vu de sujets "supression ligne sous condition" mais malheureusement jamais vu "suppression colonne sous condition".

Ce que je souhaiterais faire:

J'ai un tableau qui a un nombre de colonnes aléatoire (jusqu'à 20 colonnes).
Tous mes intitulés de colonne sont sur la ligne 13.
Je cherche un procédé qui, quand l'intitulé de la colonne est "toto", supprime automatiquement la colonne correspondante.

Comment pourrais-je y arriver?

Merci beaucoup!!

Kiko
 
Y

yeahou

Guest
Bonjour Kiko, le Forum

voila qui me donne l'occasion d'adapter mon programme de suppression de ligne à la suppression de colonnes alors je ne résiste pas.
Prét à utiliser pour toi, tu peux préciser la cellule de fin de test si tu ne veux pas tester toutes les colonnes.

Cordialement, A+

Sub Supprimer_Colonnes()

'définition des variables
Dim Tab_Cells As Variant, Tab_Column() As Integer, Mem_Column As Long
Dim Cellule_Debut As Range, Cellule_Fin
Dim Deb_Tab As Long, Compteur As Long, Compteur2 As Long

'désactivation de l'affichage écran pour gagner en rapidité
Application.ScreenUpdating = False


With ActiveSheet
'indiquer ici la cellule de début de test
Set Cellule_Debut = .Range("A13")
'indiquer ici la cellule de début de test ou laisser pour la dernière cellule de la ligne
Set Cellule_Fin = Range("A" & Cellule_Debut.Row).Offset(0, Range("A1").SpecialCells(xlCellTypeLastCell).Column - 1)
'mémorise la colonne de début du tableau de valeurs
Mem_Column = Cellule_Debut.Column - 1
'passe les valeurs de cellules au tableau de valeurs
Tab_Cells = .Range(Cellule_Debut.Address & ":" & Cellule_Fin.Address).Value
'initialise les compteurs
Compteur = 0
'boucle sur la longueur du tableau
For Compteur2 = 1 To .Range(Cellule_Debut.Address & ":" & Cellule_Fin.Address).Columns.Count
'indiquer ici la valeur du test
If Tab_Cells(1, Compteur2) = "toto" Then
Compteur = Compteur + 1
'on redimensionne en conservant les valeurs
ReDim Preserve Tab_Column(1 To Compteur) As Integer
Tab_Column(Compteur) = Compteur2 + Mem_Column
End If
Next Compteur2
'on efface les colonnes détectées en partant de la fin
For Compteur2 = Compteur To 1 Step -1

'pour test
'Application.ScreenUpdating = True
'.Columns(Tab_Column(Compteur2)).Select
'MsgBox Tab_Column(Compteur2)

.Columns(Tab_Column(Compteur2)).Delete Shift:=xlLeft
Next Compteur2
.Range("A1").Select
End With

End Sub
 
Y

yeahou

Guest
Bonjour Kiko, le forum

content que cela te plaise mais réponds plutôt sur le forum que sur ma Bal.
actuellement le code est affecté à la feuille active
pour choisir une feuille dans n'importe quel classeur, modifier la ligne
With ActiveSheet
par
With Workbooks("nomduclasseur.xls").Sheets("nomdelafeuille")

je t'envoie également le code complet en fichier attaché.

Cordialement, A+
 

Pièces jointes

  • Suppression_Colonnes.zip
    14.8 KB · Affichages: 26
  • Suppression_Colonnes.zip
    14.8 KB · Affichages: 25
  • Suppression_Colonnes.zip
    14.8 KB · Affichages: 23
K

Kiko974

Guest
Merci yeahou.

Je poursuis mes tests mais j'ai une erreur lorsque je lance le script au niveau:

If Tab_Cells(1, Compteur2) = "toto" Then

Il me dit: "Erreur d'exécution '13' Incompatibilité de type" ...

Que s'est-il passé? ;o)

Pour info, mon tableau commence en C10 et mes intitulé vont de C10 à N10.
J'avais mis:

Set Cellule_Debut = .Range("C10")
'indiquer ici la cellule de début de test ou laisser pour la dernière cellule de la ligne
Set Cellule_Fin = Range("C" & Cellule_Debut.Row).Offset(0, Range("C1").SpecialCells(xlCellTypeLastCell).Column - 1)


Merci bcp.

Kiko
 
Y

yeahou

Guest
Re Kiko

j'ai modifié pour traiter ton cas, ça fonctionne parfaitement!
pour cellule_fin soit tu laisses le code qui veut dire la dernière cellule utilisée possible de la ligne de cellule_debut
Set Cellule_Fin = Range("A" & Cellule_Debut.Row).Offset(0, Range("A1").SpecialCells(xlCellTypeLastCell).Column - 1)

soit tu modifie
Set Cellule_Fin = Range("N10")

parce que la, et c'est ton erreur, tu as possibilité de définir pour cellule_fin une cellule de colonne supérieure à 256. ce qui se passe quand tu remets les valeurs par défaut, c'est une copie de la plage "A1:IV200" de la feuille défaut sur la feuille test. si tu lances ta macro aprés, ton cellule_fin équivaut donc (la dernière colonne ayant été utilisée même si elle reste vide)
set cellule_fin=range("C10").offset(0, 256-1)
c étant la troisième colonne, tu dis que cellule_fin=la dixième ligne de la 258 ème colonne, ce qui n'existe pas.

Si tu as un autre problème mets une feuille exemple

A+
 

Pièces jointes

  • Suppression_Colonnes.zip
    14.8 KB · Affichages: 26
  • Suppression_Colonnes.zip
    14.8 KB · Affichages: 25
  • Suppression_Colonnes.zip
    14.8 KB · Affichages: 25
K

Kiko

Guest
GEENIIIAAAALL! Alors là merci beaucoup! (J'ai pris la seconde solution).

Comment faire (héhé jamais satisfait!!) pour supprimer, toujours avec une seule macro (et le même script), les colonnes dont les intitulés sont "toto" ET "titi" ??

Thanks a lot!

kiko.
 

Discussions similaires

Réponses
4
Affichages
337

Statistiques des forums

Discussions
312 490
Messages
2 088 879
Membres
103 981
dernier inscrit
vinsalcatraz