Problème pour supprimer des lignes en VBA

bambino -  
Polux31 Messages postés 7219 Statut Membre -
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

4 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. koji56 Messages postés 35 Statut Membre 6
     
    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
  3. bambino
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. bambino
       
      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
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    4. bambino
       
      je ne peux pas envoyer cela en pièce jointe c'et vraiment confidentiel
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  4. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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