Menu

VBA (Excel) - Supprimer une ligne [Résolu/Fermé]

-
Hello !

J'aimerai savoir comment rechercher une valeur dans une colonne et supprimer la ligne correspondante...
Voila ce que j'ai fait :

    Range("A1").Select
    Do While ActiveCell <> "toto"
        ActiveCell.Offset(1, 0).Select
    Loop
        
    Selection.Delete Shift:=xlUp


En fait, je n'arrive pas à sélectionner la ligne entière pour la supprimer...

QQ'un a une soluce ?...
Merci d'avance ! ;o)
Afficher la suite 

14 réponses

Meilleure réponse
approuvée par Jean-François Pillou le 14 déc. 2018
70
Merci
Et tout simplement un
Selection.EntireRow.Delete

Ca ne serait pas plus simple ?
Ou un peu plus complique, mais plus simple que ce qui a ete propose:
Rows(Selection.Row).Delete shift:=xlUp


Mais je vis au moins deux problemes a ton code:
  • Si toto apparaît deux fois, il ne sera supprimer qu' une seule fois
  • Si toto n’apparaît jamais, a la ligne 65536 tu vas avoir une erreur sur le offset.


Ne sachant pas combien de ligne tu as, tu pourrais mettre comme code:
For i = Cells(1, 1).CurrentRegion.Rows.Count To 1 Step -1
   If Cells(i, 1).Value = "toto" Then Cells(i, 1).EntireRow.Delete
Next

en sachant que tu peux remplacer Cells(1, 1).CurrentRegion.Rows.Count par le nombre de lignes correspondant.

Dire « Merci » 70

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 39456 internautes nous ont dit merci ce mois-ci

vous êtes hyper fort !jhhhhhhhhhhhhhhhhhhhhhh
Annalord
J'ai un peu le même problème
J'ai copié des tutos sur le net avec open office mais je n'arrive pas a supprimer les lignes sans enlever le texte
Quelqu'un a peu être une astuce
Merci d'avance
Sub supprimer_lignes()
    ThisWorkbook.Worksheets("Feuil3").Activate
    j = 1
    For i = 1 To Range("C65536").End(xlUp).Row   'calcule la dernière cellule remplie dans la colonne 3 colonne C
        If Cells(j, 3).Value = "pas de défaillance" Then
            Cells(j, 3).EntireRow.Delete
        Else
            j = j + 1
        End If
    Next i
    MsgBox "Macro terminée"
End Sub
Messages postés
221
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
4 novembre 2005
157
10
Merci
C'est plus simple que je ne pensais ;-)

Il existe la propriété Row d'un objet de type Range qui contient le # de la ligne. Donc, il suffit d'utiliser
Range(Trim(Str(ActiveCell.Row)) & ":" & Trim(Str(ActiveCell.Row))).Select


voulou...

DaNot
Trop fort !!! ca marche !
Merci à toi !!! ;o)
3
Merci
DaNot, la fonction que tu avais donné m'a été très utile, mais il y a just un problème:
Quand aValue=0, alors ça bug...

Donc pour ceux qui vont se servir encore de cette fonction, voici une petite ajuste à la fonction de DaNot:

---
Function GetColumn(aValue As Long) As String

    If aValue <> 0 Then
        If aValue < 26 Then
            GetColumn = Chr(64 + aValue)
        Else
            GetColumn = Chr(64 + (Int(aValue \ 26))) & GetColumn(aValue Mod 26)
        End If
    Else:
        Exit Function
    End If
    
End Function

---

Felipe
Désolé pour avant..
J'ai dit n'importe quoi..
Bon, ci-dessous, une fonction qui a fonctionné pour tous les cas que j'ai pu essayer:

---
Function GetColumn(aValue As Long) As String

    If aValue Mod 26 = 0 Then
        If aValue = 26 Or aValue = 0 Then
            GetColumn = "Z"
        Else
            GetColumn = Chr(64 + (aValue \ 26 - 1)) & GetColumn(aValue Mod 26)
        End If
    Else
        If aValue < 26 Then
            GetColumn = Chr(64 + aValue)
        Else
            GetColumn = Chr(64 + (aValue \ 26)) & GetColumn(aValue Mod 26)
        End If
        
    End If
        
End Function

---

Felipe
3
Merci
Bonjour,

J'ai un problème avec VBA? Est ce que vous pouvez m'aider?

j'ai des données sur excel et j'ai une colonne F qui contient les codes, donc je voulais faire une boucle qui recherche dans la colonne F et lorsque elle trouve le code "NOT", elle supprime la ligne entière correpondant à ce code

voici ce que j'ai essayé mais malhereusement ça ne marche pas


Range("F2").Select
ActiveCell.Offset(-1, 0).Select

Do While ActiveCell.Value <> "NOT"
  If ActiveCell.Value = "NOT" Then
    Selection.EntireRow.Delete
  End If
Loop


merci
coucou, c'est vieux, mais comme c'est rigolo..
Donc tu dis a VBA :

- tant que la valeur de cellule active est différent de "NOT"

SI la valeur de la cellule active = "NOT"

alors on supprime la ligne de la cellule active


......

deja, ta boucle va tourner sur la meme cellule ("F1") vu que tu change pas la selection dans la boucle

mais surtout, des que ta cellule aura la valeur "NOT", tu sors de la boucle, donc tu la supprime pas...

bref, c'est bien rigolo, j'imagine que depuis tu as trouve un solution en lisant les post du dessus :-D
Messages postés
221
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
4 novembre 2005
157
2
Merci
Salut,

Essayes :
Range ("A:A").Select
Selection.Delete ...


DaNot
En fait, ça je sais faire ! Mais merci kan meme ;o)
Le problème c'est ke je ne veux pas selectionner la ligne A mais la ligne sur laquelle je suis positionné !
Oila !
2
Merci
effectivement, c'est plus simple et ca fonctionne aussi bien !
Pour les doublons, je me base sur un code unique donc pas de problème pour ca mais merci de ton conseil !
Messages postés
2
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
20 février 2007
2
2
Merci
Bonjour
j'ai une programme de comptage pour determiner des entrants et des sortants à la minute
je voudrais qu'il soit toutes les 10 minutes

voici le code :
Public FeuilleSource As String

Sub TraitementComptage()

Dim TempsDépart As Date
Dim DépartComptage As Boolean

'saisir le premier temps constaté sur une campagne de comtage

TempsDépart = InputBox("Heure de début de campagne de comptage", "initialisation temps")
'Génération d'une feuille pour chaque touche
FeuilleSource = ActiveSheet.Name
For i = 1 To 4
Sheets.Add
ActiveSheet.Name = "T" & i
Next
'Génération Feuille Synthèse
Sheets.Add
ActiveSheet.Name = "Synthèse"
For i = 1 To 4
Range(Chr(i + 66) & 1).Value = "T" & i

Next i
'Ventilation des données dans la feuille touche correspondante
Sheets(FeuilleSource).Select
i = 1
Do While Sheets(FeuilleSource).Range("A" & i).Value <> ""
ValeurCellule = Sheets(FeuilleSource).Range("A" & i).Value
Sheets(ValeurCellule).Range("A" & i).Value = ValeurCellule
Sheets(ValeurCellule).Range("B" & i).Value = Sheets(FeuilleSource).Range("B" & i)
Sheets(ValeurCellule).Range("C" & i).Value = Sheets(FeuilleSource).Range("C" & i)
Sheets(ValeurCellule).Range("D" & i).Value = Sheets(FeuilleSource).Range("D" & i)
Sheets(ValeurCellule).Range("E" & i).Value = Sheets(FeuilleSource).Range("E" & i)
i = i + 1
Loop
'Tri des feuilles
For i = 1 To 4
Sheets("T" & i).Select
Columns("A:G").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Next i
'Insertion d'une colonne contenant l'information de la nieme minute depuis le temps de départ
For i = 1 To 4
Sheets("T" & i).Select
j = 1
Do While Range("A" & j).Value <> ""
Range("G" & j).Value = 1 + Minute(Range("E" & j).Value - TempsDépart) + 60 * Hour(Range("E" & j).Value - TempsDépart)
j = j + 1
Loop
If j > 1 Then
'enregistrement du nombre de minutes entre début et fin de comptage
'et du nombre de lignes pour la feuille
Range("F1").Value = Range("G" & j - 1)
Range("F2").Value = j - 1
End If
Next i
'Remplissage dans la feuille synthèse des colonnes de regroupement indiquant le nombre de comptage
'pour chaque minute écoulée et chaque touche

For i = 1 To 4
Sheets("T" & i).Select
Sheets("Synthèse").Range(Chr(i + 66) & 2).Value = Range("B1").Value
k = 1
DerniereLigneComptée = 1
For j = 1 To Range("F1").Value 'nb de minutes
Sheets("Synthèse").Range("A" & j + 2).Value = j 'minute courante
Sheets("Synthèse").Range("B" & j + 2).Value = DateAdd("n", j - 1, TempsDépart) 'temps courant
comptage = 0
DépartComptage = False
For k = DerniereLigneComptée To Range("F2").Value 'nombre de lignes
If Range("G" & k) = j Then
DépartComptage = True
comptage = comptage + 1
End If
If DépartComptage And Range("G" & k) <> j Then
DerniereLigneComptée = k 'mémorisation pour entrée de boucle suivante
Exit For
End If
Next k
Sheets("Synthèse").Range(Chr(i + 66) & j + 2).Value = comptage 'indication du nb de comtage pour la minute courante
Next j
Next i


End Sub

merci beaucoup pour votre aide
J'ai aussi un petit problème ç ce sujet: comment dois-je supprimer plusieurs lignes deja sélectionnées? Par exemple j'ai sélectionné 10 lignes, quel code dois-je mettre à l'aide d'un bouton pour supprimer toutes les 10 lignes au même moment?

Aussi, comment dois-je trier par ordre croissant et de croissant mon datagridview?
Merci bcp
2
Merci
Bonjour,

comment peut-on supprimer dans excel un mot qui apparait 2 fois ou plus pour qu'il disparaisse complétement et ne garder que les mots uniques qui n'ont pas de doublons dans la colonne ?

merci pour vos réponse

isabelle
Polux31
Messages postés
6941
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1059 -
Bonjour,

Regarde cet exemple, ça peut t'aider.

Ou bien jete un oeil ici aussi.

;o)
2
Merci
ActiveCell.EntireRow.Delete 'pour une ligne
ActiveCell.EntireColumn.Delete 'pour une colonne
Messages postés
221
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
4 novembre 2005
157
1
Merci
Ah, ok...

Voilà une petite fonction qui te sera peut etre utile :

Function GetColumn(aValue As Long) As String

    If aValue < 26 Then
        GetColumn = Chr(64 + aValue)
    Else
        GetColumn = Chr(64 + (aValue \ 26)) & GetColumn(aValue Mod 26)
    End If
End Function


Cette fonction renvoie la colonne associée à un nombre (ex. 49 retourne "AW", 55 retourne "BC"). Il ne te reste plus qu'à :

Range (GetColumn (ActiveCell.Column) & ":" & GetColumn (ActiveCell.Column)).Select
Selection.Delete....


DaNot
Merci à toi pour cette fonction mais...
T'aurais pas la même qui renvoie la ligne plutot que la colonne...(J'ai pas réussi à le faire)
Merci encore ! ;o)
Messages postés
1
Date d'inscription
jeudi 23 juillet 2015
Statut
Membre
Dernière intervention
23 juillet 2015
0
Merci
Avec du retard....

' supprime la ligne complète
Dim plage As Range, s As Range

Set plage = Range("A1").EntireRow

For Each s In plage
    s.Delete Shift:=xlUp
Next s
-1
Merci
en fait tu veux effacer une ligne dans ton tableau excel???
mais est elle presente plusieurs fois dans ton tableau cette ligne??
-1
Merci
bonjour
moi j'aimerai suprimer un ligne entiere qui ne commence pas par un nombre... est-ce possible ?

merci d'avance.
Messages postés
2
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
20 février 2007
9
-1
Merci
et moi
je cherche à supprimer les lignes dont les 4 premieres cellules sont vide...
A vous lire, merci d'avance.