Macro Supprimer ligne si cellule vide

iStarOSX

XLDnaute Junior
Bonjour à tous.

Je cherche à réaliser une macro qui lorsqu'elle est exécutée, supprime les lignes entières d'une feuille nommée Feuil2, si des cellules dans la plage(F100:F65536) ou (O100:O65536) sont vide.

J'avais trouvé un code sur un poste de XLDowloads que j'ai tenté de modifié :
Code:
Sub Del()
Union([F100:F65535].SpecialCells(xlCellTypeBlanks).EntireRow, [o100:o65535].SpecialCells(xlCellTypeBlanks).EntireRow).Delete
End Sub

Lors de la première exécution, cela fonctionne uniquement si une cellule dans la plage (O100:O65536) est vide. Si c'est une cellule de la plage (F100:F65536) j'ai une erreur d’exécution '1004': Pas de cellules correspondantes. Je suis obligé de supprimer les données d'une cellule dans (O100:O65536) pour que la première execution se passe sans problème.

De plus après exécution de cette macro, une formule dans la cellule BB2 de ma feuil2 est remplacer par un "0". Je ne sais pas pourquoi, vu que mamacro ne devrait intervenir uniquement sur les lignes compris entre 100 et 65536 et que cette cellule n'as pas de lien avec une donné de ces lignes.

J'ai donc rajouter la formule a la fin de la macro :
Code:
Range("BB2").FormulaR1C1 = "=Controles!R2C1"

Ce début de code me semble intéressant car il tient en une ligne et est rapide lors de sont exécution, mais je n'arrive pas a trouver la solution aux quelque problèmes qu'il reste, malgré pas mal de recherche.

J'espère qu'un expert d'excel pourra m'aider, merci.

A+
 

bond

XLDnaute Occasionnel
Re : Macro Supprimer ligne si cellule vide

a essayer :
Code:
Sub Del()
If WorksheetFunction.CountA([f100:f65536], [o100:o65535]) = 0 Then
    [f100:f65536].EntireRow.Delete
End If
End Sub

la cellule BB2 de ma feuil2 est remplacer par un "0". Je ne sais pas pourquoi
Bizarre en effet, le code que t'as passé ici ne devrait pas 'jouer' sur cette cellule...
 

iStarOSX

XLDnaute Junior
Re : Macro Supprimer ligne si cellule vide

Merci Bond pour ta réponse.

Mais je n’ai pas réussi a faire fonctionner ta macro (rien ne se passe).

Je sais pas si j'ai été clair dans mon explication de la macro que je cherche a réalisé.

En faite il suffit que une des cellule dans f100:f65536 ou o100:eek:65535 soit vide pour que lorsque j’exécute la macro la ligne ou se trouve la cellule vide soit supprimée.

Exemple la cellule f200 est vide donc la ligne 200 est supprimée.

Mon code fonctionne presque si ce n'est ors de la première exécution, cela fonctionne uniquement si une cellule dans la plage (O100:O65536) est vide. Si c'est une cellule de la plage (F100:F65536) j'ai une erreur d’exécution '1004': Pas de cellules correspondantes. Je suis obligé de supprimer les données d'une cellule dans (O100:O65536) pour que la première execution se passe sans problème.

Code:
Sub Del()
Union([F100:F65535].SpecialCells(xlCellTypeBlanks).EntireRow, [o100:o65535].SpecialCells(xlCellTypeBlanks).EntireRow).Delete
End Sub
 

bond

XLDnaute Occasionnel
Re : Macro Supprimer ligne si cellule vide

J'avoue trouver une contradiction entre ce que tu souhaites avec ton exemple, et ce que fait ton code... du coup je ne comprends pas trop "Mon code fonctionne presque..."

Mon interprétation via ton exemple est que :
à chaque ligne, de la ligne 100 à 65536,
si les cellules des colonnes F et O sont vides,
alors la ligne est supprimée, afin de disposer de tous les enregistrements les uns à la suite des autres sans saut de ligne.
Avec un bout de code, fort probablement optimisable...
Code:
Option Explicit
Sub Del()
Dim Ligne, Compteur
Application.ScreenUpdating = False
Ligne = 100
Compteur = 100
    Do While Compteur < 65536
        Application.StatusBar = Round(Compteur / 65536 * 100, 1) & " %"
        If Range("F" & Ligne) & Range("O" & Ligne) = "" Then
            Rows(Ligne).EntireRow.Delete
        Else
            Ligne = Ligne + 1
        End If
    Compteur = Compteur + 1
    Loop
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
 

iStarOSX

XLDnaute Junior
Re : Macro Supprimer ligne si cellule vide

Merci Bond pour ton aide.

En fait ce n'est pas si les cellules des colonnes F et O sont vides, mais si une cellule de F ou O sont vide.

Je pense qu'il faut que je trouve a modifier dans la ligne de ton code :
Code:
If Range("F" & Ligne) & Range("O" & Ligne) = "" Then
le signe "&" par "or"

Je vais tester et je te tiens au courant.

Merci et a bientôt.
 

Gorfael

XLDnaute Barbatruc
Re : Macro Supprimer ligne si cellule vide

Salut iStarOSX et le forum
Je sais que ce n'est pas un site consacré au français. Ce qui me rassures, c'est qu'à priori, je ne suis pas le seul à ne pas te comprendre
En fait ce n'est pas si les cellules des colonnes F et O sont vides, mais si une cellule de F ou O sont vide
Va être difficile de comprendre ça, donc, je vais laisser...
If Range("F" & Ligne) & Range("O" & Ligne) = "" Then
le signe "&" par "or"
J'ai peut-être compris :
Code:
If Range("F" & Ligne)="" or Range("O" & Ligne) = "" Then
Si soit F soit O est vide, alors.

En gros, ce que tu veux c'est éliminer toutes les lignes à partir de 100 qui n'ont rien en F et toutes celles qui n'ont rien O

Petite questions subsidiaires :
- Si tu travailles sous excel2003 ou une version antérieur, pourquoi mettre ça dans toutes versions, ce qui inclue les version 2007 et 2010 qui dépassent les 65536 lignes ?
- Pourquoi aller jusqu'à la ligne 65536 ? T'as du temps à perdre ? Pourquoi ne pas se contenter de la dernière ligne de la UsedRange (ou .SpecialCells(xlCellTypeLastCell).Row) ?
A+
 

bond

XLDnaute Occasionnel
Re : Macro Supprimer ligne si cellule vide

Je pense qu'il faut que je trouve a modifier dans la ligne de ton code le signe "&" par "or"
> Prendre le code donné par Gorfael :
Code:
If Range("F" & Ligne)="" or Range("O" & Ligne) = "" Then

@ Gorfael
Pourquoi ne pas se contenter de la dernière ligne de la UsedRange (ou .SpecialCells(xlCellTypeLastCell).Row) ?
C'est sur ! Mais en regardant son 1er post, iStarOSX insiste sur l'étendue jusque 65536, alors en l'abs d'éléments précis (fichiers, spécifications,...), j'ai gardé le principe. Mais c'est sur que la boucle que je suggère serait plus efficace si les données permettent d'allez moins loin...
 

Si...

XLDnaute Barbatruc
Re : Macro Supprimer ligne si cellule vide

Salut

ne serait-ce point suffisant avec le code suivant ?
Code:
Sub Del()
  On Error Resume Next
  [F100:F65535].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  [O100:O65535].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Avec ce type de formulation,
- le 65535 n'est pas handicapant (la limite se trouve instantanément)​
- il y a bien un message d'erreur si la plage ne contient pas de cellule vide !​
 

Gorfael

XLDnaute Barbatruc
Re : Macro Supprimer ligne si cellule vide

Salut Si... et le forum
Avec ce type de formulation,
- le 65535 n'est pas handicapant (la limite se trouve instantanément)
- il y a bien un message d'erreur si la plage ne contient pas de cellule vide !
Pour éviter le message d'erreur, il suffit de tester
Code:
Sub Del()
if not([F100:F65535].SpecialCells(xlCellTypeBlanks) is nothing) then [F100:F65535].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  If not([O100:O65535].SpecialCells(xlCellTypeBlanks)is nothing) then [O100:O65535].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
A+
 

iStarOSX

XLDnaute Junior
Re : Macro Supprimer ligne si cellule vide

Bonjour à tous.

Merci pour vos réponses, je n'ai pas eu le temps de le tester car je suis très pris par un autre projet.

Mais je teste vos réponse dans le weekend et vous tiens au courant.

Et encore merci. C'est sympa qu'il y est des gens qui vous aides lorsque vous êtes bloqué sur un problème.

A bientôt et bon weekend a tous.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 612
dernier inscrit
GLOIRE