Code VBA marche pas du 1er coup mais du 2ème
Résolu
Maxi
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai écris un code VBA pour qu'à chaque fois qu'il trouve les mots suivants dans les colonnes concernés (voir code ci-dessous), il efface la ligne contenant ces mots. Ce qui est bizarre c'est que lorsque je l'exécute une fois, il n'efface pas toutes les lignes concernées directement, il faut que je le lance 3, 4 fois avant que mon nombre de lignes n'évolue plus.
Quelqu'un pourrait-il m'expliquer qu'est-ce que j'ai raté dans ce code?
Merci
Sub SuppRow()
Dim Wbk As Workbook
Dim ws As Worksheet
Set Wbk = Workbooks("!20120627 BASECARBONE - Copie.xls")
For i = 55 To 3001
Wbk.Worksheets("MasterSheet").Activate
If Cells(i, 2).Value Like "*end of life*" Then
Rows(i).Delete
ElseIf Cells(i, 6).Value Like "déchets*" Then
Rows(i).Delete
ElseIf Cells(i, 6).Value Like "immobilisations*" Then
Rows(i).Delete
End If
Next i
End Sub
J'ai écris un code VBA pour qu'à chaque fois qu'il trouve les mots suivants dans les colonnes concernés (voir code ci-dessous), il efface la ligne contenant ces mots. Ce qui est bizarre c'est que lorsque je l'exécute une fois, il n'efface pas toutes les lignes concernées directement, il faut que je le lance 3, 4 fois avant que mon nombre de lignes n'évolue plus.
Quelqu'un pourrait-il m'expliquer qu'est-ce que j'ai raté dans ce code?
Merci
Sub SuppRow()
Dim Wbk As Workbook
Dim ws As Worksheet
Set Wbk = Workbooks("!20120627 BASECARBONE - Copie.xls")
For i = 55 To 3001
Wbk.Worksheets("MasterSheet").Activate
If Cells(i, 2).Value Like "*end of life*" Then
Rows(i).Delete
ElseIf Cells(i, 6).Value Like "déchets*" Then
Rows(i).Delete
ElseIf Cells(i, 6).Value Like "immobilisations*" Then
Rows(i).Delete
End If
Next i
End Sub
A voir également:
- Code VBA marche pas du 1er coup mais du 2ème
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
2 réponses
Bonjour,
Ben commence par le 2ème coup ! ;-)
Quand on supprimme des lignes il faut faire la boucle en partant du bas.
Sinon lorsque tu supprime la ligne 10, au next suivant tu passes à la 11. Qui est en fait l'ancienne 12 remontée d'un cran et tu as raté l'ancienne 11.
Donc :
For i = 3001 to 55 step -1
eric
PS:
derlig = Wbk.Worksheets("MasterSheet").Cells(rows.count, 2).end(xlup).row
te donne la dernière ligne utilisée de la colonne 2.
Si la colonne B est remplie jusqu'à la dernière donnée tu peux boucler que sur les lignes nécessaires et non 3000 lignes à chaque fois.
Et la méthode .find est plus rapide pour rechercher des données (voir l'aide excel)
Ben commence par le 2ème coup ! ;-)
Quand on supprimme des lignes il faut faire la boucle en partant du bas.
Sinon lorsque tu supprime la ligne 10, au next suivant tu passes à la 11. Qui est en fait l'ancienne 12 remontée d'un cran et tu as raté l'ancienne 11.
Donc :
For i = 3001 to 55 step -1
eric
PS:
derlig = Wbk.Worksheets("MasterSheet").Cells(rows.count, 2).end(xlup).row
te donne la dernière ligne utilisée de la colonne 2.
Si la colonne B est remplie jusqu'à la dernière donnée tu peux boucler que sur les lignes nécessaires et non 3000 lignes à chaque fois.
Et la méthode .find est plus rapide pour rechercher des données (voir l'aide excel)
Merci beaucoup pour ces éclaircissement eriiic! C'est vrai que je n'avais pas pensé aux lignes qui "remontent".
J'avais regardé pour la fonction find mais si ma cellule ne contenait pas le mot seul dans la cellule, il ne le trouvait pas...
J'avais regardé pour la fonction find mais si ma cellule ne contenait pas le mot seul dans la cellule, il ne le trouvait pas...