Supprimer Colonne plutôt que ligne

Fermé
erudess - Modifié le 25 août 2017 à 16:45
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 - 26 août 2017 à 12:33
Bonjour à tous,

Et merci d'avance à ceux qui prendront la peine de s'intéresser à mon problème.

Voila j'ai adapter un petit code vba pour pouvoir sélectionner et supprimer des cellules vides dans mes fichiers. Cela semble fonctionner assez bien.
Par contre en supprimant les cellules vides le programme remonte le texte moi j'aimerai qu'il ne remonte pas le texte mais qu'il le décale vers la gauche. pour pouvoir ainsi aligner tous mes textes dans la même colonne.

Vous trouverez une explication plus précise dans le fichier ci dessous

http://www.cjoint.com/c/GHzoSEaCM7A


voici le code que j'ai utilisé :

Private Sub CommandButton1_Click()


Dim p As Range, i As Long

Set p = Application.InputBox(Prompt:="Sélectionnez une plage", _
Title:=" Supprimer lignes vides", Type:=8)

With p

For i = .Cells.Count To 1 Step -1
If Application.CountA(.Cells(i)) = 0 Then _
.Cells(i).Cells.Delete
Next i

End With


End Sub


Meilleurs salutations,



A voir également:

6 réponses

ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
25 août 2017 à 18:23
Bonjour

Essaies ceci (sur plage sélectionnée)

Option Explicit
Option Base 1

Public Sub OK()
Dim plage As Range, li As Long, co As Long, nbli As Long, nbco As Long
Dim tplage(), lt As Long
Dim codeb As Long, cofin As Long
Set plage = Selection
nbli = plage.Rows.Count
nbco = plage.Rows.Count
lt = 1
ReDim tplage(1 To nbli, 1 To nbco)
For li = 1 To nbli
  For co = 1 To nbco
    If plage.Cells(li, co) <> "" Then
      tplage(lt, 1) = plage.Cells(li, co).Value
      lt = lt + 1
      Exit For
    End If
  Next co
Next li
plage.ClearContents
plage = tplage
End Sub

Cdlmnt
1
Bonjour Merci pour la réponse. ça semble bien fonctionner cependant je rencontre des problèmes dans les situations suivantes :

- quand il y a une seul ligne a déplacer. Elle est effacée
- quand il y a un mot dans la colonne d'a coté il est aussi éffacé
- Il y a toujours une remontée de ligne

j'ai essayé de détaillé et d'illustré le mieux possible les problèmes rencontrés dans le fichier cjoint ci dessous.

http://www.cjoint.com/c/GHAg7SXuoWS

Merci encore pour ton aide !
0
vraiment désolé ! je viens de me rendre compte que je me suis gouré dans le tableau que j'ai appelé "ce que j'aimerai faire" dans ma toute première requête c'est plutôt comme ceci que ça devrait être fait en gardant la même ligne seul la colonne change et on enlève les cellules vides

http://www.cjoint.com/c/GHAhgPxbCwS

Dsl encore
0
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
Modifié le 26 août 2017 à 11:30
1. ton fichier est au format xltm et cjoint n'aime pas, mets le au format xlsm
2. - quand il y a une seul ligne a déplacer. Elle est effacée
effectivement, corrige comme ça
nbco = plage.Columns.Count
3. - Il y a toujours une remontée de ligne
c'est ce que tu avais fait dans ton exemple

pour le reste j'attends ton nouveau fichier

Cdlmnt
0
http://www.cjoint.com/c/GHAjMRb7MlS
voici le fichier au format demandé

2) nickel merci

3) oui erreur de ma part la ligne devait être conservé le décalage devait se faire au niveau des colonnes. Voir fichier,
0

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

Posez votre question
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
26 août 2017 à 11:50
Essaies ceci

Option Explicit

Public Sub OK()
Dim plage As Range, li As Long, co As Long, nbli As Long, nbco As Long
Dim tplage(), lt As Long, ct As Long
Dim codeb As Long, cofin As Long
Set plage = Selection
nbli = plage.Rows.Count
nbco = plage.Columns.Count
lt = 1
ReDim tplage(1 To nbli, 1 To nbco)
For li = 1 To nbli
  ct = 1
  For co = 1 To nbco
    If plage.Cells(li, co) <> "" Then
      tplage(lt, ct) = plage.Cells(li, co).Value
      ct = ct + 1
    End If
  Next co
  lt = lt + 1
Next li
plage.ClearContents
plage = tplage
End Sub

Cdlmnt
0
Waw c'est parfait ça semble être exactement ce que j'espérais .

Merci infiniment pour ton aide très précieuse !!!
0
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 2 404
26 août 2017 à 12:33
De rien

Si c'est fini, peux tu mettre le sujet à résolu (en dessous du titre de ton premier message)

Bonne journée
0