[excel macro] effacer ligne ayant A vide

Résolu
testos -  
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   -
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

gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
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
9
ancelot
 
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
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724 > 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
0
ancelot > gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention  
 
Génial!! ça marche du tonnerre!

Grand merci,
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
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.
1
lartur
 
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
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
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 
0
Hilys
 
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
0
Hilys
 
Tip Top !

Un grand merci !

Hilys
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Patate
 
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
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
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.
0
Patate
 
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
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
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.
0