Suppression lignes "vides" par VB

Résolu
touroul Messages postés 520 Date d'inscription   Statut Membre Dernière intervention   -  
touroul Messages postés 520 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour le forum

J'ai besoin d'une macro qui supprime les lignes "vides" entre L9 et L48 incluses, seulement si la cellule B est vide (
Cells(i, 2)
)
J'ai besoin d'un coup de main une nouvelle fois car j'y arrive sur une feuille, mais pas sur plusieurs.

Voici la macro qui fonctionne sur la feuille EXP1 :
Public Sub EFF1()
Dim i As Integer
For i = 48 To 9 Step -1
If Worksheets("EXP1").Cells(i, 2) = "" Then Worksheets("EXP1").Rows(i).Delete
Next i
End Sub


Ensuite j'ai voulu l'adapter pour qu'en la lançant, elle fasse le boulot sur toutes les feuilles, sauf NON1,NON2,NON3,NON4 :

Private Sub Workbook_SheetActivate(ByVal sh As Object) 'suppression des lignes vides dans les feuilles "EXP"
Dim i As Integer
If InStr("NON1,NON2,NON3,NON4", sh.Name) = 0 Then
If ActiveSheet.Name = sh.Name Then
For i = 48 To 9 Step -1
If Worksheets("EXPx").Cells(i, 2) = "" Then Worksheets("EXPx").Rows(i).Delete
Next i
End If
End If
End Sub

Même le
Private Sub Workbook_SheetActivate(ByVal sh As Object)
me génère une erreur !

Puis-je vous demander de l'aide une nouvelle fois ?
Merci d'avance !

9 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Essaies ceci

    Const liste = "Feuil2,Feuil5"
    Const lideb = 9
    Const lifin = 48
    
    Public Sub SuppLignes()
    Dim nuf As Long, nbf As Long, li As Long
    nbf = Sheets.Count
    Application.ScreenUpdating = False
    For nuf = 1 To nbf
      If InStr(1, liste, Sheets(nuf).Name) = 0 Then
        For li = lifin To lideb Step -1
          If Sheets(nuf).Cells(li, 2) = "" Then Sheets(nuf).Rows(li).Delete
        Next li
      End If
    Next nuf
    Application.ScreenUpdating = True
    End Sub
    

    Cdlmnt
    0
  2. touroul Messages postés 520 Date d'inscription   Statut Membre Dernière intervention   16
     
    Bonjour ccm81

    J'obtiens une erreur sur le mot "liste " dans
    If InStr(1, liste, Sheets(nuf).Name) = 0 Then

    En fait dans mon fichier original, les noms de feuilles ont des espaces.
    J'ai essayé :
    Const liste = "'NON 1','Non 2','NON 3,'NON 4'" sans succès.
    Une astuce ?
    Merci bien !
    0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Essaies en enlevant les apostrophes qui ne doivent pas figurer dans les noms d'onglets
    Const liste = "NON 1,Non 2,NON 3,NON 4"
    0
  4. touroul Messages postés 520 Date d'inscription   Statut Membre Dernière intervention   16
     
    Mallheureusement rejet : liste : "variable non définie" en faisant ainsi ...
    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
     
    Mon exemple
    http://www.cjoint.com/c/EGDqpoTuk3R

    Cdlmnt
    0
  7. touroul Messages postés 520 Date d'inscription   Statut Membre Dernière intervention   16
     
    En même temps que ton message, j'ai trouvé :
    Il fallait déclarer les 3 constantes sous le
    Public Sub SuppLignes()

    Ca fonctionne impecc.

    Merci beaucoup CCM !
    0
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    De rien

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

    Cdlmnt
    0
    1. touroul Messages postés 520 Date d'inscription   Statut Membre Dernière intervention   16
       
      Je continue les tests, j'ai quelques soucis ... à plus (je cherche d'abord ...)
      0
  9. touroul Messages postés 520 Date d'inscription   Statut Membre Dernière intervention   16
     
    Effectivement, j'ai un souci ...
    La macro ne s'exécute que sur la feuille activée (mais elle s'exécute correctement)
    La voici :

    Public Sub SuppLignes()
    Const liste = "NON 1,NON 2,NON 3,NON 4"
    Const lideb = 9
    Const lifin = 61
    Dim nuf As Long, nbf As Long, li As Long
    nbf = Sheets.Count
    Application.ScreenUpdating = False
    For nuf = 1 To nbf
    If InStr(1, liste, Sheets(nuf).Name) = 0 Then
    For li = lifin To lideb Step -1
    If Sheets(nuf).Cells(li, 2) = "" Then Sheets(nuf).Rows(li).Delete
    Next li
    End If
    Next nuf
    Application.ScreenUpdating = True
    End Sub


    Puis-je te demander de t'y replonger ?
    D'avance merci (je peux t'envoyer le fichier par MP si tu veux)
    0
  10. ccm81 Messages postés 11033 Statut Membre 2 434
     
    As tu mis le code dans un module général (Module 1 par exemple) ?
    0
    1. touroul Messages postés 520 Date d'inscription   Statut Membre Dernière intervention   16
       
      Non je l'ai mis dans ThisWorkBook
      Mince ! J'essaie et je reply
      0