Suppression lignes+compteur VBA excel

Résolu/Fermé
Rixm86 - 21 mai 2008 à 20:53
 rixm86 - 24 mai 2008 à 04:13
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
A voir également:

2 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
21 mai 2008 à 23:44
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
0
Merci beaucoup pour les astuces, ca marche impec
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
22 mai 2008 à 00:02
bonjour

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
0