Problème pour supprimer des lignes en VBA

Fermé
bambino - 25 mai 2010 à 11:52
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 25 mai 2010 à 15:20
Bonjour,

je cherche à supprimer des lignes dans mon tableau Excel. En fait je veut les supprimer lorsque je trouve la valeur "ACDT" dans la colonne G de" mon tableau. Mon code ne fonctionne pas mais je ne comprend pas pourquoi: voilà mon code

Sub suppressionlignesacdt()
For i = 1 To 1000
If Cells(7, i).Text = "ACDT" Then
Cells(7, i).EntireRow.Delete
End If
Next
End Sub


A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 25/05/2010 à 12:20
Bonjour,
1- utiliser Cells(ligne, col).Value plutôt que .Text
2- vous avez inversé ligne et colonne dans le cells. 7 = col, i = ligne :
Cells(i, 7).Value
3- préférer lors de suppression de ligne une boucle "inversée" en commençant par la dernière ligne et en "remontant" :
Sub suppressionlignesacdt()   
For i = 1000 To 1 Step - 1   
If Cells(i, 7).Value = "ACDT" Then   
Cells(i, 7).EntireRow.Delete   
End If   
Next i  
End Sub


Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
0
koji56 Messages postés 30 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 5 juillet 2010 6
Modifié par koji56 le 25/05/2010 à 12:22
Je pense qu'il faut que tu précise dans quelle feuille il faut supprimer les lignes :

Si tes données se trouvent dans la feuille 1 voila ce que ça donnerait (et tu a oublié le i après le next :
Sub suppressionlignesacdt()  
For i = 1 To 1000  
If Feuil1.Cells(7, i).Text = "ACDT" Then  
Feuil1.Cells(7, i).EntireRow.Delete  
End If  
Next i
End Sub  
0
cela ne fonctionne toujours pas avec le code suivant:

Sub suppressionlignesacdt()
For i = 1000 To 1 Step -1
If Cells(i, 7).Value = "ACDT" Then
Cells(i, 7).EntireRow.Delete
End If
Next i
End Sub


De plus lorsque je précise la feuille le code n'est pas correct.

Si quelqu'un a une autre idée, je ne vois vraiment plus aucun problème mais quand j'éxécute les lignes que je veut supprimer sont toujours là à mon grand désespoir
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 mai 2010 à 14:42
Sub suppressionlignesacdt()
With Sheets("NomDeTaFeuille")
For i = 1000 To 1 Step -1
If .Cells(i, 7).Value = "ACDT" Then
.Cells(i, 7).EntireRow.Delete
End If
Next i
End With
End Sub

Sinon vérifier que dans votre colonne G, les cellules ou l'on trouve ACDT ne comprennent pas d'espace genre : " ACDT "...
0
Cela ne fonctionne toujours pas!!

Je me demande si ce n'est pas le format de la cellule qui n'est pas bon, en tout cas il n'y a pas d'espace dans les cellules contenant ACDT
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 mai 2010 à 14:53
peut être pourrais tu placer ici (grâce à cjoint ou ci-joint) une copie de ton classeur sans données confidentielles... Parce que là ton code est bon...
0
je ne peux pas envoyer cela en pièce jointe c'et vraiment confidentiel
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 mai 2010 à 15:18
Tu peux également essayer l'opérateur Like pour comparer tes 2 chaines de caractères. Mais attention, si tu as "LACDTEUR" dans une cellule colonne G la ligne sera supprimée également...
Sub suppressionlignesacdt()
With Sheets("NomDeTaFeuille")
For i = 1000 To 1 Step -1
If .Range("G" & i).Value Like "*ACDT*" Then
.Rows(i).EntireRow.Delete
End If
Next i
End With
End Sub

Si c'est un problème de format de cellule, essaye :
Sub suppressionlignesacdt()
Dim i As Integer
Dim chaine As String
With Sheets("NomDeTaFeuille")
For i = 1000 To 1 Step -1
chaine = CStr(.Range("G" & i).Value)
If chaine Like "*ACDT*" Then
.Rows(i).EntireRow.Delete
End If
Next i
End With
End Sub
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 25/05/2010 à 15:21
Bonjour,

Peut être comme ça:

Sub suppressionlignesacdt() 
Dim i As Long 
Dim ws As Worksheet 

Set ws = Worksheets(1)  ' ou le nom de l'onglet : Workseets("MonOnglet") 

For i = 1 To 1000 
   If ws.Cells(i, 7).Value = "ACDT" Then 
      ws.Rows(i).Delete 
      i = i - 1 
   End If 
Next i 

Set ws = Nothing 
End Sub


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