Rechercher : dans
Par :

VBA (Excel) - Supprimer une ligne

Dernière réponse le 6 jui 2009 à 15:06:04 XRay, le 22 oct 2003 à 20:52:51 
 Signaler ce message aux modérateurs

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)

1

DaNot, le 22 oct 2003 à 22:20:32

Salut,

Essayes :

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


DaNot

Répondre à DaNot

2

XRay, le 22 oct 2003 à 22:23:14

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 à XRay

3

DaNot, le 22 oct 2003 à 22:43:33

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

Répondre à DaNot

4

XRay, le 22 oct 2003 à 23:00:32

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 à XRay

5

DaNot, le 23 oct 2003 à 09:12:21
  • +4

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

Répondre à DaNot

6

XRay, le 23 oct 2003 à 11:36:00

Trop fort !!! ca marche !
Merci à toi !!! ;o)

Répondre à XRay

7

Mangda, le 24 oct 2003 à 07:47:57
  • +1

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.

Répondre à Mangda

8

XRay, le 24 oct 2003 à 11:44:05

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 !

Répondre à XRay

9

seb, le 27 fév 2006 à 09:37:31
  • +2

En fait tu veux effacer une ligne dans ton tableau excel???
mais est elle presente plusieurs fois dans ton tableau cette ligne??

Répondre à seb

10

scafandre, le 9 jan 2007 à 10:08:34

Bonjour
moi j'aimerai suprimer un ligne entiere qui ne commence pas par un nombre... est-ce possible ?

merci d'avance.

Répondre à scafandre

11

MrB, le 20 fév 2007 à 15:05:16

Et moi
je cherche à supprimer les lignes dont les 4 premieres cellules sont vide...
A vous lire, merci d'avance.

Répondre à MrB

12

poutz, le 20 fév 2007 à 15:40:00

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

Répondre à poutz

13

Felipe, le 7 aoû 2008 à 13:33:51

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

Répondre à Felipe

14

Felipe, le 7 aoû 2008 à 14:30:15

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 à Felipe

15

isabelle, le 15 sep 2008 à 13:43:39

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

Répondre à isabelle

16

Polux31, le 15 sep 2008 à 13:52:38

Bonjour,

Regarde cet exemple, ça peut t'aider.

Ou bien jete un oeil ici aussi.

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

17

 Lidy, le 6 jui 2009 à 15:06:04

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

Répondre à Lidy