Suppression de colonne
Bonjour
Je désire supprimer des colonnes qui sont "vides"
Suite à une extraction d'un autre logiciel, je récupère un fichier TXT que j'importe dans excel
Dans ce nouveau fichier, j'ai plusieurs colonnes qui sont vides, et que je veux supprimer.
Le piège, c'est que ces colonnes vides contiennent en réalité des espaces.
Et le 2eme piège, c'est qu'il ne faut pas supprimer les espaces dans tout le fichier parce que j'ai d'autres colonnes avec du texte (et des espaces).
Voici le code que Julien35000 a déjà fait, mais malheureusement je ne savais pas qu'il y avait des espaces et que le code ne fonctionnerait pas
Sub Bouton1_Clic()
Dim c
For c = 256 To 1 Step -1
If Cells(65536, c).End(xlUp).Row = 1 Then Cells(1, c).EntireColumn.Delete
Next c
End Sub
Merci pour votre aide
Christophe
Salut,
Je te propose ci-dessous un code qui passe en revue toutes les cellules de la plage utilisée et qui supprime les espaces dans les cellules qui ne comportent que des espaces.
Tu pourrais l'appeler depuis ton autre macro ou l'y intéger.
Sub Suprimer_certains_espaces()
Dim i As Byte, Cellule As Range, Longueur As Byte, Compteur As Byte
For Each Cellule In ActiveSheet.UsedRange
Longueur = (Len(Cellule))
For i = 1 To Longueur
If Mid(Cellule, i, 1) = " " Then Compteur = Compteur + 1
Next i
If Compteur = Longueur Then Cellule = ""
Compteur = 0
Next
End Sub
Cordialement.
EDIT : Je te propose également une petite modification de la macro de base afin d’accélérer un peu le code, en ne passant pas systématiquement les 256 colonnes en revue.
Dans le fichier ci-joint, les deux macros liées.
Bonsoir,
Sans fichier c'est plus de la déduction mais bon, voilà un code qui teste si toutes les cellules de la colonne ont un (1) espace et un seul et que le nombre d'espaces est identique au nombre de cellules, la colonne est supprimée mais il suffit que dans une cellule de la colonne il y ai deux espaces ou une lettre ou chiffre pour qu'elle soit ignorée. Donc, si le nombre d'espaces par cellule est anarchique ça ne fonctionnera pas :
Sub Test()
Dim Plage As Range
Dim Cel As Range
'défini la plage sur toute la zone utilisée de la feuille à partir de A1
Set Plage = DefPlage(ActiveSheet, 1, 1)
For Each Cel In Plage.Rows(1).Cells
If Application.CountIf(Plage.Columns(Cel.Column), " ") = Plage.Columns(Cel.Column).Cells.Count Then
Cel.EntireColumn.Delete
End If
Next Cel
End Sub
Function DefPlage(Fe As Worksheet, L As Long, C As Long) As Range
On Error GoTo Fin
With Fe
Set DefPlage = .Range(.Cells(L, C), _
.Cells(.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
Exit Function
Fin:
Set DefPlage = Nothing
End Function
Bonjour,
Yvouille, merci pour ton aide.
J'ai utilisé ton code qui va très bien.
C'est exactement ce qu'il me fallait.
Grâce à toi j'ai pu bien avancé et gagné du temps.
Christophe