CommentCaMarche
Recherche
Posez votre question Signaler

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

XRay - Dernière réponse le 6 juin 2012 à 09:57
Hello !

J'aimerai savoir comment rechercher une valeur dans une colonne et supprimer la ligne correspondante...
oila 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)
Lire la suite 
Réponse
+51
moins plus
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 apparait deux fois, il ne sera supprimer qu' une seule fois
- Si toto n' apparait 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 peuyx remplacer Cells(1, 1).CurrentRegion.Rows.Count par le nombre de lignes correspondant.
fyj- 2 déc. 2010 à 16:53
vous êtes hyper fort !jhhhhhhhhhhhhhhhhhhhhhh
Répondre
Annalord- 10 sept. 2011 à 19:29
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
Répondre
Ajouter un commentaire
Réponse
+8
moins plus
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
XRay- 23 oct. 2003 à 11:36
Trop fort !!! ca marche !
Merci à toi !!! ;o)
Répondre
Ajouter un commentaire
Réponse
+7
moins plus
et moi
je cherche à supprimer les lignes dont les 4 premieres cellules sont vide...
A vous lire, merci d'avance.
Ajouter un commentaire
Réponse
+4
moins plus
en fait tu veux effacer une ligne dans ton tableau excel???
mais est elle presente plusieurs fois dans ton tableau cette ligne??
Ajouter un commentaire
Réponse
+3
moins plus
bonjour
moi j'aimerai suprimer un ligne entiere qui ne commence pas par un nombre... est-ce possible ?

merci d'avance.
Ajouter un commentaire
Réponse
+2
moins plus
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
Felipe- 7 août 2008 à 14:30
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
Répondre
Ajouter un commentaire
Réponse
+2
moins plus
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
timat- 6 juin 2012 à 09:57
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
Répondre
Ajouter un commentaire
Réponse
+2
moins plus
ActiveCell.EntireRow.Delete 'pour une ligne
ActiveCell.EntireColumn.Delete 'pour une colonne
Ajouter un commentaire
Réponse
+1
moins plus
Salut,

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


DaNot
XRay- 22 oct. 2003 à 22:23
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 !
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
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 !
Ajouter un commentaire
Réponse
+1
moins plus
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 6939Messages postés mardi 25 septembre 2007Date d'inscription 11 décembre 2014Dernière intervention - 15 sept. 2008 à 13:52
Bonjour,

Regarde cet exemple, ça peut t'aider.

Ou bien jete un oeil ici aussi.

;o)
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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
XRay- 22 oct. 2003 à 23:00
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)
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé «  VBA (Excel) - Supprimer une ligne  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.