Supprimer Colonne plutôt que ligne

erudess -  
ccm81 Messages postés 11033 Statut Membre -
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,

6 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. erudess
     
    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
  3. erudess
     
    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
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. erudess
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. erudess
       
      Waw c'est parfait ça semble être exactement ce que j'espérais .

      Merci infiniment pour ton aide très précieuse !!!
      0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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