|
|
|
|
Macro excel supprimer des lignes
Dernière réponse le 1 fév 2008 à 17:27:59 maloi1278, le 30 jan 2008 à 14:58:04Bonjour,
J'ai un très gros fichier excel.
Dans ma colonne A, je vais avoir diverses données.
ex: A1= AAAA
A2= AAAA
A34= BBBBB
A35=CCCCC
A36= FFFFF
Je veux supprimer toutes les lignes dont les cellules contiennent certaines données comme CCCCC et FFFFF.
J'avais commencé une macro en faisant une boucle mais c'est super long vu que j'ai beaucoup de lignes à supprimer en fonction de mes critères.
ex: si ma cellule = CCCCC alors
je descend d'une ligne
sinon
je supprime la ligne
Et tout ça tant que je suis pas à la fn du fichier.
Et donc je suis obligé de marquer les valeurs de ma cellule une par une ! Et je trouve ça un peu trop fastidieux, il doit y avoir un meilleur moyen !
Je voulais donc savoir comment faire que ma macro aille comparer, sur une autre feuille (feuille2), la liste de mes données à supprimer.
En clair, je ferai sur une autre feuille:
A1=CCCCC
A2=FFFFF ....
Et ma macro comparerait chaque ligne de ma feuille 2 avec chaque ligne de ma feuille 1. Si elles sont égales, la ligne en feuille 1 est supprimée.
Voilà ce que je pensais faire. J'ai peur que ce soit long aussi.
A votre avis, est ce une meilleure idée que la 1ère?
J'espère avoir été clair !
Merci beaucoup !
Configuration: Windows XP Internet Explorer 7.0
Bonjour
Sub supprime()
Dim lig As Double
For lig = Cells(65536, 1).End(xlUp).Row To 1 Step -1
Select Case Cells(lig, 1).Value
Case "CCCCC", "FFFFF"
Rows(lig).Delete
End Select
Next lig
End Sub
Tu peux rajouter d'autres valeurs, séparées par des virgules. toujours zen |
Bonjour,
|
Bonjour
Sub supprime()
Dim lig As Double
Dim del As Object
Dim prm As Range
Set prm = Workbooks("ton-classeur.xls").Sheets("tafeuille").Range(" A1:A5 " )
' il faut modifier la ligne ci-dessus pour définir tes paramètres de suppression :nom classeur, feuille et range
For lig = Cells(65536, 1).End(xlUp).Row To 1 Step -1
Set del = Nothing
Set del = prm.Find(What:=Cells(lig, 1).Value, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not del Is Nothing Then Rows(lig).Delete
Next lig
End Sub
J'ai voulu changer le nombre de lignes dans le code suivant mais il me met un message d'erreur. Effectivement il y a le double de lignes en 2007 mais si tu as mis une valeur correcte tu ne devrais pas avoir d'erreur. Quelle erreur ? Le savoir est la seule matière qui s'accroît quand on la partage. (Socrate) |
Bonjour,
|
Bonjour
Set prm = Workbooks("ton-classeur.xls").Sheets("tafeuille").Range(" A1:A5 " )
tu remplaces ton-classeur.xls => par le nom de Classeur1-feuille1 tafeuille => par le nom de feuille1 du Classeur1 " A1:A5 " => par le range concerné "B:B" Set prm = Workbooks("Classeur1.xls").Sheets("feuille1").Range("B:B")
Cela ne doit pas être très loin... Petite précision : lorsque l'on supprime des lignes, vaut mieux commencer par le bas et remonter car après suppression, il y a toujours moins de lignes à traiter. Le savoir est la seule matière qui s'accroît quand on la partage. (Socrate) |
Je suis désolé, je suis vraiment très nul!!
|
Je suis désolé, je suis vraiment très nul!!
|
"65536" Access permet 65535 lignes
|
Bonjour
Set del = prm.Find(What:=Cells(lig, 1).Value, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Cette instruction recherche (Find) dans ton Classeur1-feuille1 : ma liste de données avec la colonne B qui contient mes éléments de contrôle (prm) la présence du contenu de ta colonne A (Cells(lig, 1).Value) en cours d'analyse. Elle recherche pour chaque ligne de ton classeur à épurer. Le début, ça va ça parcours bien mon classeur1 en partant de la fin. Et ensuite, qu'est-ce qui ne fonctionne pas ? Le savoir est la seule matière qui s'accroît quand on la partage. (Socrate) |

