Macro, suppression ligne

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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
 
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
 
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
 
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+++
 
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
 
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+++
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
533
Réponses
10
Affichages
1 K
Réponses
7
Affichages
608
Réponses
21
Affichages
2 K
Retour