Supprimer des lignes disperses sur excel

amnay2

XLDnaute Nouveau
Bonjour,

J'ai une base de données avec des milliers de lignes, ou il y a des lignes disperses contenanant que des 0. est ce qu'il n y a pas de manipulation sur excel pour supprimer toutes ses lignes d'un coup, ou alors un programme en vb qui peut faire ca?

Merci
 

SergiO

XLDnaute Accro
Re : Supprimer des lignes disperses sur excel

Bonjour amnay2,

Voici un code VBA :

Code:
Sub Sup_zero()
Dim i%

For i = Range("A65536").End(xlUp).Row To 1 Step -1
    If Not InStr(1, LCase(Cells(i, 1).Value), "0") = 0 Then
        Rows(i).Delete
    End If
    
Next i
End Sub
@+
 

amnay2

XLDnaute Nouveau
Re : Supprimer des lignes disperses sur excel

Re Sergio

La je sais pas si c'est possible, enfin on sait jamais... voila j'ai une base de données ou je fais sortir une liste de produits avec leurs differentes data sur excel. le probleme c'est que lorsque je retire cette info, j'ai des lignes qui on va dire se repete ou sont la somme de plusieurs...

exemple:
produit A + B (celui la est la somme générale)
produit A (celui ci est la somme de tous les produits A)
produit A1
produit A2
Produit B (celui ci est la somme de tous les produits B)
produit B1
produit B2

donc en fait moi je veux garder que la ligne A1, A2, B1, B2.... et dis toi que c'est une tres grande base ou je dois donc enlever à chaque fois les sommes..

Merci
 

porcinet82

XLDnaute Barbatruc
Re : Supprimer des lignes disperses sur excel

Salut amnay2, SergiO,

Pour les doublons ca ne devrait pas poser trop de problème, mais comment peut-on distinguer tes données ou se trouve la somme de plusieurs lignes?

Tiens nous au courant,

@+
 

amnay2

XLDnaute Nouveau
Re : Supprimer des lignes disperses sur excel

Salut Porcinet82

je me disais bien que c'etait comment j'allais expliquer la chose qui allait etre difficile.. je vais essayer de mieux faire.

exemple:

produit generale (c'est le produit qui est la somme de A+B+C+D+E......)

produit A ( cette reference est la somme de tous les produits A, ca varie, il peut en y avoir 1 ou meme 10, mais pas plus je pense;... cad A1+A2+A3+A4....)
produitA1
produit A2
....
....
Produit B (le B ca va etre la meme logique que A, sauf que c 'est une reference differente... la aussi on aura des sous refererences qui feront la somme de B, le nombre de reference sous B varie aussi)

et ainsi de suite avec le C,D,E,F

En fait le programme devrait enlever toutes les sommes et ne laisser que le detail.
Exemple2
A+B+C+D+E....= 100
A1+A2+A3+A4+....=A
B1+B2+B3+B4.....+B
C1+C2+C3+C4...=C
on peut encore avoir une sous reference par exemple pour C1
C1=C11+C12+C13+C14.....

et ainsi de suite, le truc c'est qu'a la fin, il faut qu'avec tous les details, je trouve la somme de 100...

j'espere que c t compréhensible....:eek:

Merci
 

amnay2

XLDnaute Nouveau
Re : Supprimer des lignes disperses sur excel

Bonjour Sergio et Porcinet82,

J'ai essayé aujourdhui le programme que m'a fait Sergio, il enleve bien les lignes ne comportant que des 0, mais il supprime aussi les lignes ne comportanat pas que des 0.

je voudrais en fait supprimer que les lignes comportant que des 0 dans ses colones, si par exemple j'ai une ligne et que dans toutes les colonnes il y a des zéros il supprime, mais si il y a juste une colonne ou le chiffre est different de 0, dans ce cas la il doit pas la supprime

Merci
 

G.David

XLDnaute Impliqué
Re : Supprimer des lignes disperses sur excel

Autre chose aussi sa structure : y a t il des colonne de texte par ex en colonne a:a le nom du produit ou des commentaires dans des cellules

a _______b _________c_________d__________e
machin __0_________ 0 _______soldé________ 0
un truc de ce genre
 

arnaud_garou

XLDnaute Nouveau
Re : Supprimer des lignes disperses sur excel

Bonjour.

Moi j'ai un petit probleme similaire alors je me permets de le poster ici...

Voila, j'ai un tableau et certaines lignes sont des erreurs, je souhaite les supprimer, en faisant un petit programme a la fin de la macro qui m'a permi de faire le tableau.
Ces lignes sont dispersees, mais toutes identiques, j'ai donc pense faire porter le controle sur une seule colonne.

Mon programme:

Sub Proprete()
'Elimination des lignes contenant les titres (fichiers d'extraction ...)
Sheets("Workfile").Select
Dim MaPlage2 As Range
Dim Cellule2 As Range
'controle limite a 1000 lignes!!!
'C est la colonne sur laquelle porte le controle
Set MaPlage2 = Range("C6:C1000")
For Each Cellule2 In MaPlage2
' les valeurs E_AsOf et 'E_AsOf caracterisent les lignes que je souhaite eliminer
If Cellule2.Value = "E_AsOf" Or Cellule2.Value = "'E_AsOf" Then
Rows(Cellule2.Row).delete
End If

Next Cellule2
End Sub



Le programme semble correcte, pourtant il n'elimine pas toutes les lignes souhaitees, mais si je le lance deux, ou trois fois de suite, c'est bon, en fin de compte, une partie des lignes est eliminees a chaque fois.


Est-ce possible que lors de la suppression de la ligne, la ligne qui la remplace ne soit pas controlee? Et dans ce cas je ne vois pas comment regler le probleme...


Merci!
 

porcinet82

XLDnaute Barbatruc
Re : Supprimer des lignes disperses sur excel

Bonjour a tous,

Pour Amnay2, voici un code qui fonctionne pour supprimer les lignes qui contiennent que des 0. Cependant, comme le dis David, il faudra peut etre l'adapter, notamment si tu as en colonne A des intitulé.
PHP:
Sub supp_val()
Dim i%, j%, x As Byte
For i = Range("A65536").End(xlUp).Row To 1 Step -1
    x = 0
    For j = 1 To Range("IV" & i).End(xlToLeft).Column
        If Cells(i, j).Value = 0 Then
            x = x + 1
        End If
        If x = Range("IV" & i).End(xlToLeft).Column Then
            Rows(i).Delete
            Exit For
        End If
    Next j
Next i
End Sub

Pour arnaud_garou, je jette un oeil a ton code et je reposte, mais il me semble que c'est un problème de pas. En effet, lorsque tu supprime une ligne, et que ta bucle va de haut en bas, tu sautes une ligne, d'ou un pas inversé comme dans mon code.

@+
 

porcinet82

XLDnaute Barbatruc
Re : Supprimer des lignes disperses sur excel

re,

Me revoilou, j'ai modifier ton code et il devrait fonctionner :
PHP:
Sub Proprete()
Dim i%
Sheets("Workfile").Select
For i = 1000 To 6 Step -1
    If Cells(i, 3).Value = "E_AsOf" Or Cellule2.Value = "'E_AsOf" Then
        Rows(i).Delete
    End If
Next i
End Sub

Par contre je reviens sur le problème d'amnay et de ces sommes de produit, je ne vois toujours pas comment savoir s'il s'agit d'un produit ou d'une somme de produit.
Est-ce que tu pourrais mettre un fichier joint en passant par Cjoint.com avec ce que tu as au départ et le résultat que tu souhaites obtenir.

@+
 

arnaud_garou

XLDnaute Nouveau
Re : Supprimer des lignes disperses sur excel

Super Porcinet, quelle activite aujourd'hui!
Merci en tout cas, j'avais trouve une autre solution mais celle la marche bien.
Bref, j'avance bien, et c'est presque fini!

Bon, autre question donc... Qui sera peut-etre la derniere pour la journee...

Attention c'est un peu complique...

J'ai ma feuille de sortie 'workfile', dont une colonne (la K, commence a la ligne 6)comporte des codes pays (12 pays), chaque ligne peut donc etre rattachee a un pays en theorie.
J'ai donc cree dans la sheet "anomalie, country code" une table avec en colonne D le code numerique du pays et en colonne E le nom du pays.
Et mon programme vise a verifier la colonne K de ma feuille workfile, a chaque ligne on va dans la table des correspondances, on recherche le code numerique du pays (colonne D) et on sort le nom (colonne suivante, la E), et on reinjecte le nom du pays dans la feuille workfile, a la ligne ou l'on se trouve mais dans la colonne A cette fois. Ainsi on conserve quand meme le code numerique pays dans la ligne, il n'y a pas de remplacement.

Voici mon programme:


Sub CodePays()

Windows( _
"Monthly Anomaly Report.xls" _
).Activate
Sheets("Workfile").Select
Dim MaPlage As Range
Dim Cellule As Range
Dim i As Integer
i = 6
'i commence a 6 car avant ce sont des cases de titre...
' on choisi la colonne jusqu'en bas, la ou debute la premiere case vide
Set MaPlage = Sheets("Workfile").Range("C6:" & Range("C6").End(xlDown).Address(0, 0))
For Each Cellule In MaPlage
Sheets("Anomalies, country codes").Select
Dim j As Integer
For j = 2 To 13
If Sheets("Anomalies, country codes").Cells(j, 4) = Sheets("Workfile").Cells(i, 8) Then
Sheets("Workfile").Cells(i, 3) = Sheets("Anomalies, country codes").Cells(j, 4)
End If
Next
i = i + 1

Next Cellule



End Sub



A ciao, et merci par avance
 

martinjl

XLDnaute Nouveau
Re : Supprimer des lignes disperses sur excel

Bonjor à tous,
je me branche sur ce fil car j'ai un problème un peu similaire à celui de Arnaud_Garou:
dans un tableau comportant des valeurs dans les colonnes A à H sur un nombre variable de lignes, je voudrais supprimer toutes les lignes où la valeur de la cellule en colonne C est inferieure à 15.
La commande suivante fonctionnes'il n'y a pas deux valeurs inf à 15 qui se suivent, si deux valeurs inf à 15 se suivent, seule la première ligne correspondante est effacée:

Dim sal As Range
Dim cel As Range
Set sal = Range("c1:c" & Range("c65536").End(xlUp).Row)
For Each cel In sal
If cel.Value < 15 Then Cells(cel.Row, 1).Range("a1:j1").Delete Shift:=xlUp
Next cel

J'ai tourné le problème dans tous les sens sans succès!
merci de l'aide que vous pourriez m'apporter
jean louis
 

porcinet82

XLDnaute Barbatruc
Re : Supprimer des lignes disperses sur excel

re, Salut martinjl,

Pour le problème de martinjl, c'est la même remarque que j'ai fais précédement, à savoir que lorsque l'on veut supprimer des lignes, on ne peut pas passer par For Each. En effet, lors de la supression d'une ligne en allant de haut en bas, même si ta ligne est supprimé, ta boucle est incrémentée, d'ou le soucis lorsque 2 lignes qui doivent etre supprimé se suivent. Il faut donc passé par un pas inversé

Sub test()
Dim i%

For i = Range("c65536").End(xlUp).Row To 1 Step -1
If Cells(i, 3).Value < 15 Then Rows(i).Delete
Next i
End Sub


@+
 

Discussions similaires

Réponses
6
Affichages
183

Statistiques des forums

Discussions
312 682
Messages
2 090 867
Membres
104 680
dernier inscrit
AvPi26