suppr ligne sous condition

mohamedlion

Habitué
St tout le monde
j'ai besoin de créer une macro qui permet de supprimer des lignes sous quelques conditions.
exemlpe1:
A
p
5
S
Z
2
B
Exemple2
A
5
Z
B
Exemple3
A
6
S
B
alors mon but c'est de créer une macro qui me permet de supprimer toutes les lignes qui existent entre A et B sachant que je peux avoir 2, 3 , 10 , ......, 200 lignes entre A et B
Voilà ma macro mais malheureusement, ça marche pas
[cpp]
Sub suppr_ligne()
Dim i As Integer
Dim j As Integer
For i = 200 To 2 Step -1 'j'ai mis 200 parce que au maximum je peux avoir 200 lignes entre A et B'
If Cells(i, 1) = "B" Then
i = j
End If
Next i
For i = j - 1 To 2 Step -1
Rows(i).Delete shift:=xlUp
Next i
End Sub
[/cpp]
S'il y a quelqu'un qui a une idée, merci de m'aider

 

littlerainbow

Habitué
Une petite idée (la cellule contenant A est ici la cellule A1):

Code:
Range("A1").Select
ActiveCell.Offset(1, 0).Select
Do Until ActiveCell.Value = "B"
If ActiveCell.Value <> "B" Then
Selection.Delete Shift:=xlUp
End If
Loop
 

littlerainbow

Habitué
Oups, pour effacer les lignes entières (la macro précédente effaçait juste les cellules entre A et B):

Code:
Range("A1").Select 
ActiveCell.Offset(1, 0).Select 
Do Until ActiveCell.Value = "B" 
If ActiveCell.Value <> "B" Then 
Selection.EntireRow.Delete Shift:=xlUp 
End If 
Loop
 

mohamedlion

Habitué
littlerain bow> merci pour ton aide, j'ai essayé ta macro mais malheureusement ça marche pas, je pense qu'il faut définir une limite parce que la boucle tourne sans arrêter.
zeb> i=j peut être ça pas de sens, mais mon but c'est de définir le numéro de la ligne pour laquelle la cellule contient B.
voilà
 

mohamedlion

Habitué
littlerain bow>, c'est moi qui a fait une faute, désolé
Ta macro marche bien
Merci encore une fois
zeb> peux tu m'expliquer le truc de i=j s'il te plait, je sais bien que ça se fait mais je sais pas comment définir le numéro de la ligne d'une cellule bien défini.
littlerain bow> juste une petite question, peux tu m'expliquer cette ligne s'il te plait
[cpp]
ActiveCell.Offset(1, 0).Select
[/cpp]
Merci d'avance pour votre aide
Cdt
 

littlerainbow

Habitué
la ligne:
Code:
Activecell.Offset(1, 0).Select

décale la "sélection de cellule" ou cellule active d'une ligne vers le bas, et de zéro colonne.
donc si au départ ta cellule sélectionnée était A1, avec cette ligne la cellule sélectionnée devient A2.
 

zeb

Modérateur
Code:
i=j
Même en te relisant ?
Ecris plutôt ça, ça ira mieux :
Code:
j=i

peux tu m'expliquer cette ligne
M'enfin, il suffit de lire (et de comprendre) l'aide en ligne.

Savoir où chercher, trouver l'information, est une chose, jamais facile, pour le newbee ou pour le guru.
Savoir comment chercher s'acquière avec le temps, c'est justement bien là une grosse différence entre newbee et guru.
Ne pas savoir lire quand on te met le nez dessus, c'est grave, quand même.
 

mohamedlion

Habitué
littlerainbow> merci pour l'explication
zeb> bonne remarque, juste une petite chose, c'est que j'ai jamais eu de cours de programmation, j'ai fait une autoformation (j'achète des livres de programmation).
Concernant la ligne 6 i=j : t'as raison , il faut maitre j=i parce qu'on va affecter la valeur de i à j et non pas le contraire.

Encore une fois, Merci bien pour votre aide
 

zeb

Modérateur
En général, je ne donne pas de solution toute faite. Je préfère te mettre le nez dessus. C'est pour moi une forme de respect. C'est ton code, pas le mien, ce sont tes corrections, pas les miennes, autoformation ou pas.

En passant, lire l'aide de Offset aurait fait partie de ton autoformation.

Quoi qu'il en soit, bon, courage, et à bientôt dès que ça coince ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 829
Membres
1 586 367
Dernier membre
ramkin
Partager cette page
Haut