Supression de lignes si plusieurs cellules vides

Bonsoir !!

Je suis pas tres bon en VBA et je cherche une manière simple de supprimer entièrement une ligne si toutes les cellules allant de R à BL de cette même ligne sont vides;

J'avoue ne pas trouver et les solutions que j'ai essayer par ci par là ne marche pas.

Merci d'avance

Très bonne journée

Julien

Bonjour,

pour commencer, il faut savoir que la suppression de lignes sur une feuille Excel, demande de faire les tests en partant du bas vers le haut.

Ensuite l'instruction est par exemple du type : Cells(15,1).EntireRow.Delete

Pour tester si une plage est entièrement vide il y a par exemple la fonction de feuille Excel CountIf, c'est ce que j'ai utilisé dans le fichier exemple :

9supp-lignes.xlsm (20.95 Ko)

@ bientôt

LouReeD

Salut merci beaucoup

En fait je crois que je suis un gros boulet. lol

Je suis aux balbutiement du codage, en gros, complètement perdu haha

Je crois que ce que tu m'as envoyé on est sur la piste, mais j'arrive pas à "l'adapter" sur mon fichier.

Je t'ai mis mon fichiers en lien (avec juste quelques entrées pour le test, mon fichier original contient bien plus d'entrée)

Du coup sur ce fichiers, j'ai besoin de supprimer les lignes 7, 8 et 11, car ce sont les seules qui n'ont pas d'entrées entre les colonnes R et BL !

Merci beaucoup de prendre du temps pour mon problème. J'ai besoin d'une solution "clef en main", mais mon but est aussi de comprendre comment ca marche !

8testhopital.xlsm (15.10 Ko)

Il y a aussi la 4 sur votre exemple !

Comment voulez vous que le code soit lancé ? Avec un bouton "rafraichissement" par exemple ?

Y a-t-il une colonne qui est "forcément" pleine sur votre tableau malgré le fait que de R à BL ce soit vide ?

C'est juste pour savoir où chercher le nombre de ligne total utilisées

@ bientôt

LouReeD

Ah oui y a la 4 aussi.

En fait, si le code peut être lancé avec un Ctrl + "h" par exemple ce serait top. (J'ai vu que dans les macros l'option est facilement déclenchable)

La colonne A est effectivement toujours pleine.

Merci encore

bonne journée

Bonjour,

voici le code à mettre dans un module standard :

Sub Suppr_Lignes()
    Dim Ligne As Long, Der_Ligne As Long
    Der_Ligne = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp)
    For Ligne = Der_Ligne To 1 Step -1
        If Application.WorksheetFunction.CountIf(Range("R" & Ligne & ":BL" & Ligne), "") = 47 Then Rows(Ligne).Delete
    Next Ligne
End Sub

Pour créer le lien avec le [CTRL]+[h], il faut aller dans le menu affichage du ruban, puis macro, puis sélectionner "Suppr_Ligne" puis Option puis mettre un h dans la zone de saisie adéquate.

Le 47 du code correspond au nombre de colonne qui compose la zone à tester c'est à dire de R inclus à BL inclus, si un jour cette zone venait à être modifiée, il faudra également modifier le code.

La variable Der_Ligne recherche la première ligne plein en colonne A en partant du bas de la feuille, on obtient ainsi la dernière ligne plein du tableau.

Attention, il n'y a pas de demande de confirmation et suite à un code VBA pas de "UNDO" possible !

Donc faites une sauvegarde de votre fichier avant de faire un quelconque test !

@ bientôt

LouReeD

Bonjour,

Une autre proposition.

Public Sub DeleteRows()
Dim lastRow As Long, lRow As Long, n As Long
    Application.ScreenUpdating = False
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For lRow = lastRow To 1 Step -1
            n = .Cells(lRow, 18).Resize(, 47).SpecialCells(xlCellTypeBlanks).Cells.Count
            If n = 47 Then
                .Cells(lRow, 1).Resize(, 64).Delete
            End If
        Next lRow
    End With
End Sub

Hey !!

Merci beaucoup !

Ca a l'air de marcher, mais ce qui est bizarre c'est que quand j'ai un max d'entrées, 4000 lignes dans mon exemple,

il n'en fait qu'une partie. La colonne A est toujours rempli pourtant.

Si je le refais derrière, il en nettoie, mais pas toute...

Merci Jean Eric !

Sur ta proposition il bug sur la phrase : n = .Cells(lRow, 18).Resize(, 47).SpecialCells(xlCellTypeBlanks).Cells.Count

Bonsoir,

chez moi cela fonctionne, mais j'ai corrigé une erreur de syntaxe...

Il faut ajouter ".Row" à la fin de l'instruction : Der_Ligne = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Row

Bon courage.

@ bientôt

LouReeD

Ouuuuuuuuuuuuuiiiiiiiiiiiiiii !

Cela fonctionne nickel ! Merci un max, tu peux pas savoir le temps que tu me fais gagner !!!

Et encore, j'en ai perdu du temps avec ma faute d'orthographe !

@ bientôt

LouReeD

Rechercher des sujets similaires à "supression lignes vides"