Macro, boucle et suppression de lignes

L

Lionel

Guest
Bonjour à tous,

J'ai un fichier excel qui contient un nombre important de lignes.
La première cellule de chaque ligne commence soit par SEC, soit par MA1, soit par MA2 soit par MA3.

Il faut que je supprime toutes les lignes ne commencant pas par MA3.
Je voulais faire une petite fonction comme ceci

For Each Row In ????
If ???? <> "MA3" Then
????supprimer la ligne
end if
Next


Le problème d'excel c'est qu'il ne comprend pas les "?" et mon problème a moi c'est que je ne sais pas parler dans le langage d'Excel.

Si qqn peut m'aider pour la traduction en langue macro excel, ca serait sympas.

Nayant pas trouver commente faire après avoir rechercher sur google et sur ce site, je vous demande de m'aider SVP.


D'avance je vous remercie tous!



Lionel
 
C

Creepy

Guest
Bonsoir à tous,

voici le code qui va bien avec les commentaires pour t'aider.

A adapter à tes besoins.

++

Creepy

------

Private Sub Dede()
Dim I, L As Integer
Dim Koa As Variant
I = Feuil1.Range("a1").End(xlDown).Row ' Trouve la fin de la colonne A
Range("a1:a" & I).Select 'Selectionne l'ensemble de la colonne jusqu'à Vide = True
L = 1
Start:
For Each Koa In Selection ' Pour chaque cellule dans la selection
If Koa = "MA3" Then ' Si valeur = MA3
Koa.EntireRow.Delete ' Efface la ligne
Range("a" & L & ":a" & Feuil1.Range("a1").End(xlDown).Row).Select ' Reselectionne la Colonne A depuis la ligne ne cours seulement
GoTo Start: ' recommence depuis le debut de cette selection
Else
L = L + 1 ' si <> de "MA3", incremente de 1
End If
Next
End Sub
-----
 
H

Hervé

Guest
Salut le fil

la même que les collègues mais en partant de la fin

Sub suppr()
Dim i As Integer
For i = Range("a5000").End(xlUp).Row To 1 Step -1
If Left(Range("a" & i), 3) <> "ma3" Then Range("a" & i).EntireRow.Delete
Next
End Sub

salut
Hervé

PS : si avec tout ca tu n'y arrive pas...........(lol)
 
P

Pascal76

Guest
Bonjour le fil

Et oui comme l'exemple d'Hervé le montre le plus simple souvent pour boucler et supprimer des lignes et de commencer du bas et de remonter vers les lignes du Haut. Cela évite de jongler avec le compteur

Bon courage

Pascal
 
L

Lionel

Guest
Je voulais vous remercier de m'avoir répondu.

J'ai repris le code de Hervé.
J'ai remplacé

End(xlUp) par End(xlDown) je pense que c'était une petite étourderie au milieu


J'ai un petit complément à vous demander dans le code de Hervé, à quoi correspond la valeur 5000 dans l'expression Range("a5000").End(xlUp).Row



Merci


Lionel
 
P

Pascal76

Guest
re

Non ce n'était pas une étourderie

en fait on fait souvent

Range("A65536").end(xlup).row

ce qui veut dire tu te places sur la dernière ligne et tu remontes (xlup) pour trouver la dernière ligne occupée.

Hervé est parti d'une ligne 5000 pour être puriste autant partir de la 65536 c'est à dire la dernière.

Pascal
 
L

Lionel

Guest
Ah OK, je comprend,

mais comme j'avais un peu plus de 6000 lignes, la boucle est parti du premier enregistrement, ca ne marchait donc pas.

Si j'ai bien compris, soit je mets
Range("A65536").end(xlup).row
soit
Range("A1").end(xlDown).row

??


Encore Merci
 
P

Pascal76

Guest
re
exact

Mais la différence c'est que si tu as une ligne vide entre deux
Range("A1").end(xlDown).row
s'arretera à cette ligne
alors que
Range("A65536").end(xlup).row
ira bien jusqu'à la toute dernière

Pascal
 
L

Lionel

Guest
OK, je vois la différence, j'ai utilisé
Range("A65536").end(xlup).row
Comme ca je n'aurais pas de problème.


Merci pour toutes ces infos.

Bonne journée à tous et un grand merci à toutes l'équipe pour ces bons conceils et les lignes de codes.


A+



Lionel
 

Discussions similaires

Réponses
2
Affichages
124

Statistiques des forums

Discussions
312 329
Messages
2 087 328
Membres
103 517
dernier inscrit
hbenaoun63