[excel macro] effacer ligne ayant A vide [Résolu/Fermé]

Signaler
-
gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
-
bonjour en faite j'aimerai faire un macro qui me permette nt d'effacer toute les lignes qui on une case vide en A ...
merci d'avance
testos

8 réponses

Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 924
bonjour

Tu peux modifier ainsi :
Sub efface_vide()
Dim l As Long
For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
    If Cells(l, "E").Value = "" _
        Or Cells(l, "F").Value = "" Then Cells(l, 1).EntireRow.Delete
Next l
End Sub

Comme tu as plusieurs colonnes j'ai changé la détection de la taille de ton tableau.
Si tu veux que E et F soit vide, il faut remplacer OR par And
7
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 78353 internautes nous ont dit merci ce mois-ci

Ok compliquons un peu les choses,

J'ai quelques notions de VB mais visiblement pas assez pour pouvoir me démerder tout seul:
Voila j'ai des fins de phrases qui ont sauté de ma derniere colonne (L) pour venir s'insérer dans une nouvelle ligne vide en case A

exemple :

J'avais
France 24;54;78;98;MSN98;FALSE
Allemagne 54;90;76;64;76;87;KSKS2;FALSE

et (ne me demandez quoi comment g fé ca) il y a eu plusieurs ligne pour lesquels il s'est passé le suivant:
France 24;54;78;98;MSN98
;FALSE
Allemagne 54;90;76;64;76;87;KSKS2;FALSE

Je n'ai aucune prémice d'idée de comment faire, déjà que je ne sais pas ajouter du texte en fin de chaine de texte d'une cellule sous VB!

Merci énormément pour votre aide
gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 924 > ancelot
bonjour

Si c'est toujours ";FALSE" qui est passé en colonne A ligne suivante, avec cette macro cela devrait recoller en colonne L
Sub recolle_efface()
Dim l As Long
For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
    If Range("A" & l).Value = ";FALSE" Then
         Range("L" & l - 1).Value = Range("L" & l - 1).Value & Range("A" & l).Value
         Rows(l).Delete
    End If
Next l
End Sub
> gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018

Génial!! ça marche du tonnerre!

Grand merci,
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 924
bonjour

Je ne vois pas l'intérêt de supprimer une ligne lorsque une "case est vide",
mais si c'est le but, alors cette macro le fait :

Sub efface_A_vide()
Dim l As Integer
For l = Cells(65256, 1).End(xlUp).Row To 1 Step -1
If Cells(l, 1).Value = "" Then Cells(l, 1).EntireRow.Delete
Next l
End Sub


merci de nous dire si cela fonctionne pour toi.
Salut. Lartur pour te remercier de ta connaissance au sujet de l'élimination d'une ligne. Cela fonctionne sur une de mes bécane mais la macro ne s'arrête plus... que faire dans un tel cas, je n'ai toujours pas la solution alors je cherche
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 924
bonjour

Cette macro doit s'arrêter, mais elle contient une erreur car il faut définir l'ndex de ligne en "long" et non en "integer" car sinon le maximum de lignes est 32 767.
D'autre part en excel 2007, il faut augmenter le nombre de lignes au-delà de 65356 mais je vous laisse chercher le nouveau maximum !

Sub efface_A_vide()
Dim l As long
For l = Cells(65356, 1).End(xlUp).Row To 1 Step -1
If Cells(l, 1).Value = "" Then Cells(l, 1).EntireRow.Delete
Next l
End Sub 
Salut,

Je vais poser une question basique mais je n'ai malheureusement pas trouvé la réponse par moi-même.

Si je veux appliquer cette macro sur les colonnes E et F comment dois-je m'y prendre ?

Merci d'avance !

Hilys
Tip Top !

Un grand merci !

Hilys
Bonjour à tous,
Puis-je solliciter votre aide s’il vous plait ?

La macro de gbinforme modifier ainsi me convient parfaitement pour supprimer les cellules contenant « zzz » de la colonne A sans effacer la ligne entière :
Sub efface_A_vide()
Dim l As Integer
For l = Cells(65256, 1).End(xlUp).Row To 1 Step -1
If Cells(l, 1).Value = "zzz" Then Cells(l, 1). Delete
Next l
End Sub

Seulement lorsque la dernière cellule de la colonne A contient “zzz”, la cellule d’à coté colonne B passe dans la colonne A (bien sûr cela ce passe aussi bien si la cellule est en A30 qu’en A500)

Je pense que le problème (mise à part mes faibles connaissances en la matière) se trouve ligne3 de la macro avec le mot « Row » alors que je veux rester dans la colonne j’ai ce mot « ligne ».

Merci de aide,
Patrick
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 924
bonjour

Ce que tu as noté n'a rien à voir avec row mais est provoqué par delete.

Comme tu supprime la cellule, une autre en bas ou à droite prends la place.

Pour éviter remplaces delete par clearcontents : tu auras une cellule vide sans déplacement des autres.
Merci gbinforme pour cette réponse rapide,
Réponse évidente, à ma portée, elle me convient parfaitement….

Pour supprimer les cellules vides (car je souhaite aussi les supprimer) j’ai ajouté une ligne et de cette façon j’arrive au but :
Sub efface_A_vide4()
Dim l As Long
For l = Cells(65356, 1).End(xlUp).Row To 1 Step -1
If Cells(l, 1).Value = "zzz" Then Cells(l, 1).ClearContents
If Cells(l, 1).Value = "" Then Cells(l, 1).Delete
Next l
End Sub

En attendant une réponse, j’avais bricolé un peu la macro qui ce passait de « ClearContents » et cela marchait aussi, bien qu’inutile, pour l’humour je vous la présente :

Sub efface_A_vide3() 'ok
Sheets("Feuil1").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "provisoire"
Dim l As Long
For l = Cells(65356, 1).End(xlUp).Row To 1 Step -1
If Cells(l, 1).Value = "zzz" Then Cells(l, 1).Delete
If Cells(l, 1).Value = "" Then Cells(l, 1).Delete
Next l
Range("A65536").End(xlUp).Offset(0, 0).Select
Selection.ClearContents
End Sub

Par contre cette macro ne fonction pas pour supprimer les cellules contenant #VALEUR ! , je vais continuer à chercher pour ce problème. Mais peut-être avez-vous une réponse magique ? :)

Merci encore et bonne soirée
Patrick
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 924
bonjour

cette macro ne fonction pas pour supprimer les cellules contenant #VALEUR !
If Left(Cells(l, 1).Text, 1) = "#" Then Cells(l, 1).Delete

Ainsi tu supprimes les cellules en erreur.

Cependant ta macro ne peux pas fonctionner correctement car à la fin de son déroulement ta colonne A est complètement décalée de la colonne B et les 2 colonnes sont totalement déphasées.

Désolé mais tu ne peux pas supprimer une cellule et garder l'intégrité de ton fichier, ce qui est possible en supprimant la ligne.

Ta nouvelle formule fonctionne par hasard car au départ tu avait un paramètre par défaut de delete à xlleft ce qui amenait la cellule B en colonne A. Ce paramètre est passé à xlup par tes manipulations ce qui fait que ta cellule A remonte d'une ligne.