Suppression de lignes en fonction d'une cellule vide dans une extraction

Bonjour à tous,

je me permets de vous solliciter votre aide. J'essaye de créer une macro qui permet de remplir un tableau dans la feuill1 à partir de données issues d'une extraction qui est dans une autre feuille( feuil2). J'aimerais rajouter dans ma macro une session qui me permet de supprimer une ligne complète si une cellule de celle-ci est vide.

Voici ma programmation sans la session voulue :

Sub ajoutdelignesdansletableauAMORTETCB()
variables_tableau
'trier

Sheets("Extration CADOR Immo").Range("B14").Select

Range("B14", Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Extration CADOR Immo").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Extration CADOR Immo").Sort.SortFields.Add Key:= _
Range("B14:B10000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("Extration CADOR Immo").Sort
.SetRange Range("A13:CL10000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With


'Savoir le nombre de ligne dans mon futur tableau

LIGNE = WorksheetFunction.CountA(Columns("B:B")) - 1

Worksheets("AMORT et CB").Rows("10").EntireRow.Resize(rowsize:=LIGNE).Insert shift:=xlDown

For i = 1 To LIGNE

CODE = Sheets("Extration CADOR Immo").Cells(13 + i, 1)
Sheets("AMORT et CB").Cells(9 + i, 2) = CODE

N°COMPTE = Sheets("Extration CADOR Immo").Cells(13 + i, 2)
Sheets("AMORT et CB").Cells(9 + i, 1) = N°COMPTE

DATE_IMMO = Sheets("Extration CADOR Immo").Cells(13 + i, 12)
Sheets("AMORT et CB").Cells(9 + i, 3) = DATE_IMMO

DESIGNATION = Sheets("Extration CADOR Immo").Cells(13 + i, 9)
Sheets("AMORT et CB").Cells(9 + i, 4) = DESIGNATION

VALEUR_HT = Sheets("Extration CADOR Immo").Cells(13 + i, 13)
Sheets("AMORT et CB").Cells(9 + i, 5) = VALEUR_HT

DOTATION_IMMO = Sheets("Extration CADOR Immo").Cells(13 + i, 85)
Sheets("AMORT et CB").Cells(9 + i, 6) = DOTATION_IMMO

Sheets("AMORT et CB").Cells(9 + 1, 12).Formula = "=somme(h10:k10)"
Sheets("AMORT et CB").Cells(9 + 1, 13).Formula = "=si(g10>0;l10/g10;0)"
Sheets("AMORT et CB").Cells(9 + 1, 14).Formula = "=m10*f10"

Sheets("AMORT et CB").Cells(9 + 1, 20).Formula = "=somme(p10:s10)"
Sheets("AMORT et CB").Cells(9 + 1, 21).Formula = "=si(g10>0;t10/g10;0)"
Sheets("AMORT et CB").Cells(9 + 1, 22).Formula = "=u10*f10"
Next

End Sub

J'ai essayé de rajouter cette ligne : Sheets("Extration CADOR Immo").Range("i:i").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

elle fonctionne uniquement si mon extraction contient des des cellules vides dans ma colonne I mais pas quand mon extraction ne comporte pas de vide. Je ne trouve pas la condition qui me permet utiliser cette ligne dans les deux cas.

Je vous remercie pour votre aide.

Bonjour Billy98, bienvenue sur le forum.

A tester quelque chose comme cela ? (En supposant que le tableau s'étend jusque en colonne "CL"

For n = 1 To 90
If Sheets("Extration CADOR Immo").Cells(n, i) = "" Then Sheets("Extration CADOR Immo").Rows(i).Delete
Next n

Merci pour ton aide Gabin37,

Je me suis permis d'ajuster ton code, j'aimerais appliquerla condition à partir de la ligne 13 :

For n = 1 To LIGNE

If Sheets("Extration CADOR Immo").Cells(13 + n, i) = "" Then Sheets("Extration CADOR Immo").Rows(i).Delete

Next n

Mais j'ai une erreur d'exécution '1004 , Erreur définie par l'application ou par l'objet.

Bonjour,

Lors d'une suppression de lignes par boucle, il est préférable de commencer par la dernière et de finir par la première, pour éviter les mauvaises surprises liées au décalage induit par une suppression. Pour terminer ligne 13, il suffit de faire (en reprenant le code de Gabin) :

For n = 90 To 13 Step -1
    With Sheets("Extration CADOR Immo")
        If .Cells(n, i) = "" Then .Rows(i).Delete
    End With
Next n

Bonjour à tous,

Attention, lorsqu'on supprime des lignes, il faut commencer par le bas....sinon certaines lignes seront ignorées...

C'est plutôt n qu'il faut supprimer, non ?

For n = LIGNE To 13 Step -1
  If Sheets("Extration CADOR Immo").Cells(n, i) = "" Then Sheets("Extration CADOR Immo").Rows(n).Delete
 Next n

[EDIT] Hello Pedro22, ,désolé, je n'avais pas vu ta dernière réponse,


Cordialement,

J'ai toujours la même erreur qui s'affiche (Erreur '1004)

Avec ce code :

For n = LIGNE To 13 Step -1
With Sheets("Extration CADOR Immo")
If .Cells(n, i) = "" Then .Rows(i).Delete
End With
Next n

J'ai toujours la même erreur qui s'affiche (Erreur '1004)

Avec ce code :

For n = LIGNE To 13 Step -1
With Sheets("Extration CADOR Immo")
If .Cells(n, i) = "" Then .Rows(i).Delete
End With
Next n

Vérifie le contenu de tes variables en mode pas à pas (avec F8). LIGNE doit être un nombre (supérieur ou égal à 13), n aussi et i un nombre non nul également.

Salut xorsankukai !

Re,

Et pourquoi .Rows(i).Delete ?

Cordialement,

image

J'ai vérifie mais variable et je n'ai pas relevé d'erreur a ce niveau. J'ai plutot un probleme avec l'application ou un objet sur la ligne surlignée.

Re, supprimes With sheets(...) et end With avant et après l'erreur

A+

Re,

J'ai vérifie mais variable et je n'ai pas relevé d'erreur a ce niveau

Et que vaut i ?

Plus haut i = 9 pour la colonne I

image

Maintenant, mon code supprime tous sauf les lignes dont les cellules de colonne I sont vides. Pouvez-vous indiquez ce qui cloche dans mon code?

Pourquoi avoir rajouté l = 9 ? C'est trompeur d'autant plus que l représente une colonne.

bref, il faut imbriquer deux boucle ligne et colonne donc quelques chose comme cela:

For n = dernierligne To 13 Step -1
For l = 1 To 90
If Sheets("Extration CADOR Immo").Cells(n, l) = "" Then Sheets("Extration CADOR Immo").Rows(n).Delete
Next l
Next n

Je crois que nous nous sommes tous emmêlés les pinceaux entre lignes, colonnes, n,l,i etc.. ^^

EDIT -> l 1 to 90 car dans la premier post, il est sous entendu que ton tableau s'étend jusque en colonne CL

Re,

Encore une fois, pourquoi .Rows(i).Delete alors que tu boucle sur les lignes n ?

Où alors je suis à côté de la plaque....


[EDIT] @ gabin37 : tu me rassures, on est bien sur la même piste....https://forum.excel-pratique.com/s/goto/1025730


Merci xorsankukai c'est grâce à ton commentaire que j'au pu corriger l'erreur. Il fallait pas supprimer la colonne mais les lignes.

Re,

@xorsankukai tu as bien raison c'est n

C'est juste que dans le tout premier post, Billy utilisait i comme variable de ligne,

J'ai donc par la suite utilisé n comme variable de colonne,

Billy à repris mon code en utilisant cette fois n comme variable de ligne mais en laissant rows(i).delete,

Le vilain @Pedro à crée la zizanie en utilisant n comme variable de ligne (en précisant qu'il fallait utiliser step -1) alors que nous parlions de colonne !

Xorsankukai à repris l'idée en réutilisant n comme variable de ligne et donc en corrigeant rows(n).delete,

Au final une nouvelle variable de colonne l apparait ! "l" qui se confond avec "i" quel cauchemar

Bref.... 🤯

Morale de l'histoire, ne soyons pas fainéant et respectons une des règles de bases de la programmations: Utiliser des nom de variables claires et explicites !

Surtout que si l'on retournes dans le code plusieurs mois/année après bah c'est la merd* !

Le vilain Pedro a indiqué explicitement qu'il avait travaillé à partir du code du vilain Gabin !

J'avoue, je n'ai pas cherché à comprendre plus loin, ni à tester le code... Merci xorsankukai pour ta persévérance bienfaisante !

Je vais reprendre mes variables une à une pour que mon code soit plus clair. Merci pour votre aide et j'espère qu'on se reparlera par la suite.

Rechercher des sujets similaires à "suppression lignes fonction vide extraction"