![]() |
|
Forum
|
|
|
#1 (permalink) |
|
Guest
Messages: n/a
|
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 |
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
Guest
Messages: n/a
|
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).Colum n - 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 |
|
|
#3 (permalink) |
|
Guest
Messages: n/a
|
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("nomdelafeui lle") je t'envoie également le code complet en fichier attaché. Cordialement, A+ |
|
|
#4 (permalink) |
|
Guest
Messages: n/a
|
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).Colum n - 1) Merci bcp. Kiko |
|
|
#5 (permalink) |
|
Guest
Messages: n/a
|
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).Colum n - 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+ |
|
|
#6 (permalink) |
|
Guest
Messages: n/a
|
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. |
| Liens sociaux |
| Outils de la discussion | |
|
|