Bug code VBA

Résolu/Fermé
Antoine - 18 mars 2010 à 09:26
 Antoine - 18 mars 2010 à 16:32
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.
A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 mars 2010 à 10:21
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 mars 2010 à 15:46
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 mars 2010 à 16:09
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
Génial Merci pour tout
0