Bug code VBA

Résolu
Antoine -  
 Antoine -
Bonjour, j'ai une formule pour ne garder que certaines informations dans une colonne précise mais lorsque je l'exécute elle supprime tout alors que j'ai vérifié il y a au moins 50 lignes dans ma colonne qui ont le mot recherché voici le code j'ai l'impression que c'est le Step -1 qui bug mais je ne sais pas quoi mettre à la place

derlig = Range("A65536").End(xlUp).Row
For ilig = derlig To 2 Step -1
Nom = Range("D" & ilig).Value
If Nom <> "DFP" Then
Rows(ilig).Delete Shift:=xlUp
End If
Next ilig

Merci d'avance.
Configuration: Windows XP / Internet Explorer 6.0

1 réponse

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Salut,
    Tu veux supprimer toutes les lignes qui contiennent "DFP" en colonne D?
    Si oui, tu as fait l'inverse. Je reprends ton code en l'annotant :
    'on détermine la dernière ligne de la colonne A
    derlig = Range("A65536").End(xlUp).Row 
    'boucle de la dernière ligne à la deuxième
    For ilig = derlig To 2 Step -1 
    'on attribue à la variable Nom (déclarée As String j'espère) la valeur contenue dans la colonne D
    Nom = Range("D" & ilig).Value
    'Si valeur dans "D" différente de "DFP" alors 
    If Nom <> "DFP" Then 
    'on supprime la ligne
    Rows(ilig).Delete Shift:=xlUp 
    'fin du Si
    End If 
    'Au suivant...
    Next ilig 
    
    0
    1. Antoine
       
      Non justement je veux les garder mais la macro supprime quand même tout... Je ne comprends pas pourquoi j'ai regardé dans ma colonne D il y a des cases DFP...
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Pourtant ta macro fonctionne. As tu effectivement "DFP" dans tes cellules ? Il peux y avoir un espace caché ou je ne sais quoi d'autres... Mais je te confirme que ce code fonctionne...
      Dim ilig As Integer, derlig As Integer
      Dim Nom As String
      derlig = Range("A65536").End(xlUp).Row 
      For ilig = derlig To 2 Step -1 
      Nom = Range("D" & ilig).Value 
      If Nom <> "DFP" Then 
      Rows(ilig).Delete Shift:=xlUp 
      End If 
      Next ilig
      
      0
    3. Antoine
       
      J'ai trouvé il y a un espace dans mes cellules de la colonne D ... Le truc débile :-)

      Par contre j'ai un nouveau problème dans ma marco suit à ce tri...

      Je calcule un délai moyen de dénouement grâce à 3 colonnes....

      Voilà le code si dessous de ma formule... Le souci est qu'il peut arriver mais c'est rare que la colonne L soit totalement vide... donc la formule ne peut pas s'exécuter ça me donne un message d'erreur "dépassement de capacité" et me plante le reste de ma macro en me soulignant dans le débogage la ligne avant End With. Dans le cas ou cette particularité se présente (c'est le cas avec mon fichier d'aujourd'hui...) J'aimerai que la macro finisse de s'exécuter et à la limite à la fin me mette un Msg Box disant "aucune action dénouée aujourd'hui

      Dim i As Long
      Dim res As Long
      Dim ct As Long

      res = 0
      ct = 0
      i = 2
      With Sheets("Extraction SIGMA")
      While (.Range("J" & i).Value <> "")
      If (.Range("L" & i).Value <> "" And .Range("J" & i).Value = "1650") Then
      res = res + ((.Range("L" & i).Value) - (.Range("K" & i).Value))
      ct = ct + 1
      End If
      i = i + 1
      Wend
      Sheets("KPI").Range("D17").Value = res / ct
      End With
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Si l'erreur n'intervient que lorsque L est vide, il est relativement aisé de s'en "occuper" :

      Sub tralalalala()
      Dim i As Long 
      Dim res As Long 
      Dim ct As Long 
      On Error GoTo ErrorHandler
      res = 0 
      ct = 0 
      i = 2 
      With Sheets("Extraction SIGMA") 
      While (.Range("J" & i).Value <> "") 
      If (.Range("L" & i).Value <> "" And .Range("J" & i).Value = "1650") Then 
      res = res + ((.Range("L" & i).Value) - (.Range("K" & i).Value)) 
      ct = ct + 1 
      End If 
      i = i + 1 
      Wend 
      Sheets("KPI").Range("D17").Value = res / ct 
      End With
      Exit Sub
      ErrorHandler:
          MsgBox "aucune action dénouée aujourd'hui"
      End Sub
      

      Pour la gestion des erreurs et bien d'autres choses passionnantes, voici un très bon lien
      0
    5. Antoine
       
      Génial Merci pour tout
      0