Macro, suppression ligne

  • Initiateur de la discussion Fredrennes
  • Date de début
F

Fredrennes

Guest
Re-Hello,

Je voudrais créer une macro telle que :

Si il y a par ex "X" en H2, H3.....alors suppression de toutes ces lignes.

Je ne souhaite pas que vous me donniez la macro toute faite mais seult une petite aide...

Pour le moment j'en suis à :

Sub suppression_ligne ()
IF (H2="X",delete.......

Je débute en vba vous l'aurez compris....

Je suppose qu'il faut que j'utilise une fonction du style delete row 2 ou qq chose dans ce style....

Si vous pouvez me dire si je commence à peu près bien ou si j'ai tout faut, cela m'arrangerait.

Merci pour votre aide.

Cdlt

Fred
 
M

Moa

Guest
Salut Fredennes !

Tiens une macro à adapter.


Sub DeleteX()
Sheets("TaFeuille").Select

Sheets("TaFeuille").Activate
i = 1
While Range("A1").Offset(i).Value <> ""
If Range("A1").Offset(i).Value = "X" Then
Range("A1").Offset(i).EntireRow.Select
Selection.Delete Shift:=xlUp
'Selection.Hidden = True
i = i - 1
End If
i = i + 1
Wend
End Sub


@ +

Moa
 
D

Dan

Guest
Bonjour,

Voilà quelque chose qui devrait corespondre à ce que tu souhaites.

Sub SupprimeLigne()
Range("H2").Select
'Sélection de la cellule de départ avec décalage sur les lignes(Offset(1,0))
Do Until ActiveCell = ""
If ActiveCell = "X" Then
Selection.EntireRow.Delete
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
Range("A1").Select
End Sub

@+ Dan
 
F

Fredrennes

Guest
Merci à vous 2...

Je vois que vos 2 macros sont qq peu différentes....je débute, je vais essayer de comprendre tout cela......ça va me prendre qq minutes, voire qq heures je pense.....je vous tiens au courant

Amicalement
Fred
 
F

Fredrennes

Guest
Dan,

J'ai qq petites question concernant ta macro; elles vont sûrement te paraître basiques mais je pense que cela devrait m'aider à progresser...

- Tu commences par "Range ("H2")....si j'ai plusieurs sheets, je pense que je dois préciser dans lequel je travaille, non ? Un truc du genre "sheets1.select".......je me trompe ?

- Je n'ai pas compris la signification de "offset(1,0)

- Comment ça se passe si j'ai pls valeurs pour lesquelles je dois supprimer la ligne ? Utilise-t-on "OR" ?

- Je ne comprends pas la fin de ta macro :

ActiveCell.Offset(1, 0).Range("A1").Select
Loop
Range("A1").Select

Merci de ton aide Dan

Cdlt
Fred
 
D

Dan

Guest
1. Tu ne trompes pas. Si tu as plusieurs sheets, il faut effectivement que tu précises dans laquelle tu travailles : Sheets("Feuil1").Select

2. Offset : instruction de déplacement ligne, colonne (1 ligne vers le bas, 0 colonne)

3. Je ne comprends pas bien ta question. Merci de préciser.

4. J'ai trouvé cette instruction dans une de mes archives, si je me rappelle bien, l'offset se fait en prenant la cellule A1 comme référence. Tu peux remplacer "Range("A1").Select" par "Activate".

@+ Dan
 
Z

zon

Guest
Bonjour à tous,



Dan , Moa et Fred, au lieu de balayer toutes les cellules , on peut utiliser la la fonction EQUIV, MATCH en anglais comme suit, cela permet sérieusement d'accélerer le code car on récupére le N° de ligne:

Sub SupLignes()
Dim Res As Integer

1
On Error GoTo Sortie
Res = WorksheetFunction.Match("X", Range("H2:H32767"), 0)
Rows(Res).Delete
GoTo 1
Sortie:
End Sub

Pour " Comment ça se passe si j'ai pls valeurs pour lesquelles je dois supprimer la ligne ? Utilise-t-on "OR" ?"=> Oui

Pour le offset c'est pour se déplacer d'une cellule à l'autre sans etre oblligé de la selectionner, mais il faut une range pour commencer: [B2].offset(-1,-1).select => [A1].select, avec activecell on se déplace ligne par ligne dans la boucle

On peut écrire ici ActiveCell.Offset(1, 0).Select au lieu de ActiveCell.Offset(1, 0).Range("A1").Select car H2 est sélectionnée au départ...


A+++
 
F

Fredrennes

Guest
Merci Zon.

Dan, concernant la 3ème question......si au lieu de supprimer les lignes dans lesquelles "X" apparait en colonne H je veux supprimer également les lignes comportant "Y " dans cette même colonne....

Tu vois ce que je veux dire ?

Merci encore.

Cdlt
Fred
 
Z

zon

Guest
Re,


Je reste sur mon idée voici un code plus général, cette macro supprimera la ligne si la chaine est trouvée dans la plage:

Sub SupLignes(Chaine As String, Plage As Range)
Dim Res As Integer

1
On Error GoTo Sortie
Res = WorksheetFunction.Match(Chaine, Plage, 0)
Rows(Res).Delete
GoTo 1
Sortie:
End Sub


Ensuite il suffit de l'appeler
Sub Supprim()
call suplignes("X"),Range("H2:H65536"))
call suplignes("Y"),Range("H2:H65536"))
End sub



Sinon par rapport à ce que tu demandais : If ActiveCell = "X" or If ActiveCell = "Y" Then
A+++
 
F

Fredrennes

Guest
J'ai un petit souçi avec le "Or" dont je parlais précédemment.

J'ai écrit tq :

IF or(activcell="X", activcell="Y") Then

mais a priori ça ne colle pas....pouvez-vous m'aider svp ?

Merci

Cdlt
Fred
 
F

Fredrennes

Guest
est-ce que cela est correct ?

Sub suppression_lignes()
Datas.Select
Range(H2).Offset(1, 0).Select
Do Until activcell = ""
If activcell = "X" Or activcell = "Y" Then
Selection.EntireRow.Delete
End If
End Sub


Cela suffit-il ?

Je me suis basé sur la macro de Dan......je n'ai pas repris la fin...

Je vais maintenant regarder les autres macros que vous m'avez soumis

Merci
 
D

Dan

Guest
Fred,

tu si tu as deux conditions tu peux faire ceci

Cela donne cette macro
Sub SupprimeLigne()
Range("H2").Select
'Sélection de la cellule de départ avec décalage sur les lignes(Offset(1,0))
Do Until ActiveCell = ""
If ActiveCell = "X" Then
Selection.EntireRow.Delete
ElseIf ActiveCell = "Y" Then
Selection.EntireRow.Delete
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
Range("A1").Select
End Sub

Zon, je pense qu'avec la déclaration de "Range("H2:H65536"))", ta macro va vérifier jusqu'en bas de la sheet même s'il n'y a pas de valeur dans la cellule. Donc probablement plus long pour la macro à exécuter.

@++
Dan
 

Discussions similaires

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 822
dernier inscrit
holale