Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

suppression de lignes avec bcp de critères différents

6 réponses
Avatar
francois45
bonjour,

je dois supprimer des lignes qui contiennent certaines "catstat" dans
l'exemple O1A et O1B...., le problème est qu'il y a une bonne centaine de
codes que je nommerais "catstat" or, ce n'est pas très souple pour supprimer
les lignes....il faut connaitre un minimum la programmation sous VBA...
est-il possible de mettre ces codes dans une feuil2 qui constituerait une
base de code "catstat" à supprimer accessible à tout le monde(ne connaissant
pas le VBA) pour les mettre à jour facilement et que la macro aille chercher
les codes (d'une plage par exemple) et supprime les lignes dans autre
feuil1 par exemple (feuille ou j'importerai les données brutes avant épurage
???
attention ces "catstat" se retouvent à plusieurs reprises dans les données
brutes mais toujours dans la même colonne...

si vous avez une idée ???? je suis preneur...

pour l'instant j'utilise ceci:


Sub sup_ligne_catstat()
Range("B2").Select ' début de la liste
Do While ActiveCell <> ""
'----------------
If ActiveCell = "01A" Then
Range(Selection, Selection.End(xlToRight)).Select ' sélectionne la
ligne
Selection.EntireRow.Delete ' supprime (obtenu par enreg auto)
Else
ActiveCell.Offset(1, 0).Select ' on traite la ligne suivante
End If
Loop
'2ème donnée à supprimer etc...etc...un peu fastidieux...
Range("B2").Select
Do While ActiveCell <> ""
If ActiveCell = "01B" Then
Range(Selection, Selection.End(xlToRight)).Select ' sélectionne la
ligne
Selection.EntireRow.Delete ' supprime (obtenu par enreg auto)
Else
ActiveCell.Offset(1, 0).Select ' on traite la ligne suivante
End If
Loop
end sub

6 réponses

Avatar
Jacques ALARDET
Bonjour,

Si tu mets la liste des codes dans un onglet feuill2, tu va ensuite charger
ces codes en mémoire

Moi je fais comme cela

Dim Tableau(100) as string 'Tableau des codes en mémoire
Dim T_nb as integer 'nombre de code

Sheets("feuil2").select
For I = 1 to 100
tableau(I) = Cells(1,I)
T_nb=T_nb+1
next

Ensuite dans tu traites chaque ligne, il faut explorer les codes en mémoire

For L = nombre de ligne to 1 step -1 (on part par la fin)
For I = 1 to T_nb
if cells(L, ?) = Tableau(I) then
'Détruire la ligne
endif
next
next

J a c q u e s

"francois45" a écrit dans le message de
news:%
bonjour,

je dois supprimer des lignes qui contiennent certaines "catstat" dans
l'exemple O1A et O1B...., le problème est qu'il y a une bonne centaine de
codes que je nommerais "catstat" or, ce n'est pas très souple pour
supprimer les lignes....il faut connaitre un minimum la programmation sous
VBA...
est-il possible de mettre ces codes dans une feuil2 qui constituerait une
base de code "catstat" à supprimer accessible à tout le monde(ne
connaissant pas le VBA) pour les mettre à jour facilement et que la macro
aille chercher les codes (d'une plage par exemple) et supprime les lignes
dans autre feuil1 par exemple (feuille ou j'importerai les données brutes
avant épurage ???
attention ces "catstat" se retouvent à plusieurs reprises dans les
données brutes mais toujours dans la même colonne...

si vous avez une idée ???? je suis preneur...

pour l'instant j'utilise ceci:


Sub sup_ligne_catstat()
Range("B2").Select ' début de la liste
Do While ActiveCell <> ""
'----------------
If ActiveCell = "01A" Then
Range(Selection, Selection.End(xlToRight)).Select ' sélectionne la
ligne
Selection.EntireRow.Delete ' supprime (obtenu par enreg auto)
Else
ActiveCell.Offset(1, 0).Select ' on traite la ligne suivante
End If
Loop
'2ème donnée à supprimer etc...etc...un peu fastidieux...
Range("B2").Select
Do While ActiveCell <> ""
If ActiveCell = "01B" Then
Range(Selection, Selection.End(xlToRight)).Select ' sélectionne la
ligne
Selection.EntireRow.Delete ' supprime (obtenu par enreg auto)
Else
ActiveCell.Offset(1, 0).Select ' on traite la ligne suivante
End If
Loop
end sub




Avatar
Michel Angelosanto
une solution sans macro les codes étant en feuil2 colonne A
tu ajoute une colonne avec la formule en D2 (par exemple)
=sommeprod((feuil2!A:A²)*1)
tu recopies cette formule sur la colonne
tu mets un filtre personnalisé sur valeur>0
tu supprime les lignes
tu enlève le filtre
tu efface la colonne temporaire D

ensuite, si c'est répétitif, tu peux enregistrer cette manip dans une macro

"francois45" a écrit dans le message de
news:%
bonjour,

je dois supprimer des lignes qui contiennent certaines "catstat" dans
l'exemple O1A et O1B...., le problème est qu'il y a une bonne centaine de
codes que je nommerais "catstat" or, ce n'est pas très souple pour
supprimer les lignes....il faut connaitre un minimum la programmation sous
VBA...
est-il possible de mettre ces codes dans une feuil2 qui constituerait une
base de code "catstat" à supprimer accessible à tout le monde(ne
connaissant pas le VBA) pour les mettre à jour facilement et que la macro
aille chercher les codes (d'une plage par exemple) et supprime les lignes
dans autre feuil1 par exemple (feuille ou j'importerai les données brutes
avant épurage ???
attention ces "catstat" se retouvent à plusieurs reprises dans les
données brutes mais toujours dans la même colonne...

si vous avez une idée ???? je suis preneur...

pour l'instant j'utilise ceci:


Sub sup_ligne_catstat()
Range("B2").Select ' début de la liste
Do While ActiveCell <> ""
'----------------
If ActiveCell = "01A" Then
Range(Selection, Selection.End(xlToRight)).Select ' sélectionne la
ligne
Selection.EntireRow.Delete ' supprime (obtenu par enreg auto)
Else
ActiveCell.Offset(1, 0).Select ' on traite la ligne suivante
End If
Loop
'2ème donnée à supprimer etc...etc...un peu fastidieux...
Range("B2").Select
Do While ActiveCell <> ""
If ActiveCell = "01B" Then
Range(Selection, Selection.End(xlToRight)).Select ' sélectionne la
ligne
Selection.EntireRow.Delete ' supprime (obtenu par enreg auto)
Else
ActiveCell.Offset(1, 0).Select ' on traite la ligne suivante
End If
Loop
end sub



--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/

Avatar
francois45
bonjour Jacques et merci pour tes réponses,

je préfererais plutot traiter par macro, ce sera plus simple pour les
utilisateurs...
j'ai essayé d'adapter ta macro en faisant une compile avec la mienne mais ça
colle pas vraiment...mon niveau en excel relève plus de la bidouille que de
la réelle compréhension de ce que j'écris...faut bien débuter!!!


Sub supligndejacques()

Dim Tableau(100) As String 'Tableau des codes en mémoire
Dim T_nb As Integer 'nombre de code

Sheets("feuil1").Select 'les codes de ligne a sup sont sur la feuille 1
For I = 1 To 100
Tableau(I) = Cells(1, I)
T_nb = T_nb + 1
Next

'Ensuite dans tu traites chaque ligne, il faut explorer les codes en mémoire

'For L = nombre de ligne to 1 step -1 (on part par la fin) 300 lignes
For I = 1 To T_nb
If Cells(L, 300) = Tableau(I) Then
'____________________
'Do While ActiveCell <> ""
'If ActiveCell = "01B" Then
Range(Selection, Selection.End(xlToRight)).Select ' sélectionne la
ligne
Selection.EntireRow.Delete ' supprime (obtenu par enreg auto)
'Else
'ActiveCell.Offset(1, 0).Select ' on traite la ligne suivante
'End If
' Loop
'-----------------------
'Détruire la ligne
End If
Next


End Sub
Avatar
francois45
re- bonjour

j'ai essayé mais ça bug, je ne sais pas réparer (le tableau est hyper
simplifié) si vous pouvez y jeter un oeuil expert !!!ce serait cool.

merci d'avance.


http://cjoint.com/?fdjYVvZFN3
Avatar
Youky
Bonjour Francois ceci efface toutes les lignes comme tu le souhaite
j'ai mis le codename des feuilles plutot que le name
Ta feuille "données" est ....Feuil2 voir en fenetre projet
catstaSUP est Feuil1
C'est préférable au cas ou qlq'un renomme l'onglet.
Donc à verifier feuil1 ou Feuil2 ou autres
Youky

Sub SupprimerLinge()
For k = Feuil2.[A65536].End(3).Row To 4 Step -1
For lg = 1 To Feuil1.[A65536].End(3).Row
If Feuil2.Cells(k, 2) = Feuil1.Cells(lg, 1) Then
Feuil2.Rows(k).Delete
End If
Next
Next
End Sub

"francois45" a écrit dans le message de news:

re- bonjour

j'ai essayé mais ça bug, je ne sais pas réparer (le tableau est hyper
simplifié) si vous pouvez y jeter un oeuil expert !!!ce serait cool.

merci d'avance.


http://cjoint.com/?fdjYVvZFN3



Avatar
francois45
Rebonjour Youky,

c'est exactement ce que je voulais c'est vraiment génial, dire que j'avais
fait la macro de départ en y passant des heures et je te raconte pas le
nombre de ligne.(903 lignes!!!)..et là en 9 lignes tu en résumes des
centaines....ça me laisse songeur...y arriverais-je un jour ??!!

en tout cas merci beaucoup de ton aide, ça va me simplifier la tache et
cette macro pourra me resservir pour d'autres fichiers ou je me servais de
la sup de ligne.

encore merci et à bientôt
François.