Supprimer lignes vides dans une zone

touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   -  
touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   -
Hello la communauté !

Dans ma feuille lignes 45 à 55 (et seulement sur ces lignes), j'aimerai supprimer automatiquement les lignes si elles sont vides.
Elles contiennent des formules du type :
=SI(F17="";"";"Mon texte 1")

Alors en cherchant j'ai trouvé cette jolie macro dont j'aurais bien besoin :

Sub SuppLigneVides()
With ActiveSheet.UsedRange
derLi = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = False
For r = derLi To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
End Sub

La ch'touille c'est qu'elle ne s'adapte pas à mes lignes 45 à 55.
Il doit manquer un truc du genre :
Public Sub FormateCel(Target As Range)

Mais là ça me dépasse ...

Puis-je vous demander de l'aide ?

Merci d'avance (une fois de plus)

10 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

    Adaptation de la macro à tes lignes 45 à 55

    Sub lignesvides()
    Application.ScreenUpdating = False
    For r = 55 To 45 Step -1
    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
    Next r
    End Sub

    Cdlmnt
    0
  2. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    Merci Via pour ton travail.

    Mais malheureusement je ne parviens pas à la faire fonctionner :

    J'ai essayé en copiant ce code :
    - dans la feuille concernée
    - dans ThisWorkBook
    - dans Module1

    J'ai fermé puis réouvert le fichier.

    Faut-il lancer la macro, ou les lignes s'effacent-elles seules ?

    Voici une copie d'écran :
    https://www.cjoint.com/?0Cxh7LvBc38

    Merci d'avance pour le suivi (je veux comprendre ce que je fais mal !)

    Touroul
    0
  3. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    En réalité la macro semble fonctionner, mais avec 2 bémols :

    1- Je dois la lancer manuellement, et cela même si je mets Application.ScreenUpdating sur True

    2- Seules les lignes vraiment vides se suppriment, mais si elles n'affichent rien du fait de :
    =SI(F17="";"";"Mon texte 1")
    ... la ligne n'est pas supprimée.

    Tout cela est imparfait mais plutôt bien parti !

    Please help !
    0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour à tous les deux

    quelque chose comme ça?

    Const nF = "Feuil1" 
    Const lideb = 9 
    Const lifin = 15 
    Dim li As Long, nbblanc As Long, cofin As Long 
    With Sheets(nF) 
      For li = lifin To lideb Step -1 
        cofin = .Cells(li, Columns.Count).End(xlToLeft).Column 
       nbblanc = Application.WorksheetFunction.CountBlank(.Range(Cells(li, 1), Cells(li, cofin))) 
        If nbblanc = cofin Then .Rows(li).EntireRow.Delete 
      Next li 
     End With

    bonne journée
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    Salut CCM81

    J'essaie d'appliquer à mon cas ...

    Le : Const nF = "Feuil1" me gêne un peu (un nouvel onglet est créé à chaque fois, il est nommé par la date du jour)

    Dois-je mettre ceci dans un Private Worksheet ?
    Dois-je mettre ceci dans le code de ma feuille, dans ThisWorkBook, dans Module1 ?

    J'ai corrigé :

    Const lideb = 9 corrigé à 45
    Const lifin = 15 corrigé à 55

    Merci de ta réponse et pour ton aide !
    0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Le : Const nF = "Feuil1" me gêne un peu (un nouvel onglet est créé à chaque fois, il est nommé par la date du jour)

    tu en fais une variable de type worksheet et tu lui affectes la feuille à traiter, par exemple comme ça

    Const lideb = 9 
    Const lifin = 15 
    Dim li As Long, nbblanc As Long, cofin As Long 
    Dim F As Worksheet 
    Set F = ActiveSheet 
    With F 
      For li = lifin To lideb Step -1 
        cofin = .Cells(li, Columns.Count).End(xlToLeft).Column 
       nbblanc = Application.WorksheetFunction.CountBlank(.Range(Cells(li, 1), Cells(li, cofin))) 
        If nbblanc = cofin Then .Rows(li).EntireRow.Delete 
      Next li 
    End With

    personnellement, je mettrais ça dans un module général
    0
  8. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    J'ai essayé d'ajouter ceci dans "Module1" sans succès :

    Sub Worksheet_Activate()

    End Sub
    Const lideb = 45
    Const lifin = 55
    Dim li As Long, nbblanc As Long, cofin As Long
    Dim F As Worksheet
    Set F = ActiveSheet
    With F
    For li = lifin To lideb Step -1
    cofin = .Cells(li, Columns.Count).End(xlToLeft).Column
    nbblanc = Application.WorksheetFunction.CountBlank(.Range(Cells(li, 1), Cells(li, cofin)))
    If nbblanc = cofin Then .Rows(li).EntireRow.Delete
    Next li
    End With
    End Sub

    Désolé mais mon niveau en VBA frise le zéro.
    Pardon de te demander à nouveau un coup de main.
    0
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    re,
    Public Sub FormateCel(Target As Range)

    cet événement n'existe pas
    0
  10. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    OK.

    Je vais préciser :

    Certaines lignes entre L45 et L55 contiennent des formules type :
    A48: =SI(F17="";"";"Mon texte 1") *
    Si elles ne s'affichent pas (dans le cas où F17 est vide), il faut supprimer toute la ligne 48 en automatique.

    Je me permets de vous envoyer un exemple de mon fichier (en MP car confid.)
    Mais je publierai ici la solution avec votre accord sous forme d'un fichier simplifié.

    Je sais, mon fichier devient complexe avec le temps, mais c'est mon outil de travail quotidien

    Merci pour votre dévouement à mon égard.
    0