Suppression lignes+compteur VBA excel
Résolu
Rixm86
-
rixm86 -
rixm86 -
Bonjour,
Je dois traiter un tres long fichier de données (une balance comptable), et je souhaite pouvoir supprimer les lignes superflues à l'aide d'un compteur, je m'explique:
Mon ficher comporte 4 colonnes, dont la première est un libellé (nombre entre 10000000 et 99999999).
Je n'ai besoin que des lignes dont le libellé est compris entre 600000000 et 799999999.
Le seul problème est que je souhaiterais créer une macro qui me permette de traiter ce type de fichier de la même manière selon les années, et le nombres de lignes comportant ces libellés peut varier.
Je sais utiliser l'enregistreur de macros, mais ne maitrise pas le code VBA. Voila ce que j'ai fait jusqu'ici:
j'ai mis dans une 5e colonne une condition: =if(or(left(A1)="6";left(A1)="7");A1;0) et je dois dérouler avec la souris pour coller sur toute la colonne la formule
1e question: pour simplifier ce déroulement, est-il possible d'aller directement à la dernière ligne remplie, histoire de ne pas dérouler 10 lignes de + par sécurité dans l'éventualité d'un nouveau document de base plus long.
Ensuite je filtre la colonne 5 pour isoler les termes avec 0 et je les supprime.
Tout ce système est lourd et me parait peu sûr, surtout au niveau du filtre..., sachant que justement j'ai besoin d'un truc en beton.
Mon idée était de toujopurs faire cette 5e colonne, en donnant 1 comme valeur aux fichiers superflus, et 0 à ceux qui m'intéressent, de les trier par ordre décroissant (on garde tt c'est plus sur que le filtre), puis grâce au VBA sommer cette colonne et supprimer le nombre de lignes correspondant au resultat.
d'après ce que j'ai cherché avant de poser cette question, le code que j'ai écrit (je ne maitrise pas du tt le langage, je le rappelle) est:
Sub Supprlignes()
Dim n as Long
n = Application.evaluate("sum(E:E)")
Rows("1:n").Select
Selection.Delete Shift:=xlUp
End Sub
L'éditeur me dit qu'il y a une Run-time error '13' Type mismatch au niveau de la ligne Rows(...)
Je ne sais pas si c'est la ligne du dessus ou celle là qui cloche
J'ai essayé avec n as integer, ca bug aussi, et en le remplacant par une valeur entière dans Rows ca marche, ms evidemment c'est pas ce que je veux faire.
Si quelqu'un pouvait m'expliquer ou est mon erreur de code ca serait super sympa et ca m'aiderait beaucoup pour continuer a programmer
Merci d'avance
Je dois traiter un tres long fichier de données (une balance comptable), et je souhaite pouvoir supprimer les lignes superflues à l'aide d'un compteur, je m'explique:
Mon ficher comporte 4 colonnes, dont la première est un libellé (nombre entre 10000000 et 99999999).
Je n'ai besoin que des lignes dont le libellé est compris entre 600000000 et 799999999.
Le seul problème est que je souhaiterais créer une macro qui me permette de traiter ce type de fichier de la même manière selon les années, et le nombres de lignes comportant ces libellés peut varier.
Je sais utiliser l'enregistreur de macros, mais ne maitrise pas le code VBA. Voila ce que j'ai fait jusqu'ici:
j'ai mis dans une 5e colonne une condition: =if(or(left(A1)="6";left(A1)="7");A1;0) et je dois dérouler avec la souris pour coller sur toute la colonne la formule
1e question: pour simplifier ce déroulement, est-il possible d'aller directement à la dernière ligne remplie, histoire de ne pas dérouler 10 lignes de + par sécurité dans l'éventualité d'un nouveau document de base plus long.
Ensuite je filtre la colonne 5 pour isoler les termes avec 0 et je les supprime.
Tout ce système est lourd et me parait peu sûr, surtout au niveau du filtre..., sachant que justement j'ai besoin d'un truc en beton.
Mon idée était de toujopurs faire cette 5e colonne, en donnant 1 comme valeur aux fichiers superflus, et 0 à ceux qui m'intéressent, de les trier par ordre décroissant (on garde tt c'est plus sur que le filtre), puis grâce au VBA sommer cette colonne et supprimer le nombre de lignes correspondant au resultat.
d'après ce que j'ai cherché avant de poser cette question, le code que j'ai écrit (je ne maitrise pas du tt le langage, je le rappelle) est:
Sub Supprlignes()
Dim n as Long
n = Application.evaluate("sum(E:E)")
Rows("1:n").Select
Selection.Delete Shift:=xlUp
End Sub
L'éditeur me dit qu'il y a une Run-time error '13' Type mismatch au niveau de la ligne Rows(...)
Je ne sais pas si c'est la ligne du dessus ou celle là qui cloche
J'ai essayé avec n as integer, ca bug aussi, et en le remplacant par une valeur entière dans Rows ca marche, ms evidemment c'est pas ce que je veux faire.
Si quelqu'un pouvait m'expliquer ou est mon erreur de code ca serait super sympa et ca m'aiderait beaucoup pour continuer a programmer
Merci d'avance
A voir également:
- Suppression lignes+compteur VBA excel
- Forcer suppression fichier - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
2 réponses
Bonsoir,
Pour recopier ta formule vers le bas, tu saisis une fois ta formule et tu double-cliques sur le petit carré en bas à droite de ta cellule sélectionnée. Tout se remplira jusqu'en bas du moment qu'il y a une valeur à gauche ou à droite
il faut ecrire :
Rows("1:" & n).Select
eric
Pour recopier ta formule vers le bas, tu saisis une fois ta formule et tu double-cliques sur le petit carré en bas à droite de ta cellule sélectionnée. Tout se remplira jusqu'en bas du moment qu'il y a une valeur à gauche ou à droite
il faut ecrire :
Rows("1:" & n).Select
eric
rixm86
Merci beaucoup pour les astuces, ca marche impec
bonjour
Je te propose de faire tes suppressions directement sans 5éme colonne
est-il possible d'aller directement à la dernière ligne remplie,
ctrl + flèche en bas si tu n'as pas de lignes vides dans la colonne
ou
crtl + fin donne la dernière ligne dernière colonne
Je te propose de faire tes suppressions directement sans 5éme colonne
Sub Supprlignes()
Dim n As Long
For n = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Left(Cells(n, 1), 1) < 6 Or Left(Cells(n, 1), 1) > 7 Then
Rows(n).Delete
End If
Next n
End Sub
est-il possible d'aller directement à la dernière ligne remplie,
ctrl + flèche en bas si tu n'as pas de lignes vides dans la colonne
ou
crtl + fin donne la dernière ligne dernière colonne