Bienvenue invité ( Connexion | Inscription )
![]() ![]() |
15-09-2008 - 10:52
Message
#1
|
|
![]() Membre Groupe : Membres Messages : 130 Inscrit : 09-02-2005 Lieu : Lyon - France Membre n° 5 750 |
Bonjour à tous,
Je cherche, à l'aide d'une macro, à supprimer les lignes d'un tableau Excel pour lesquelles il y a dans la cellule (colonne A) un "8" en dernière position, exemple 108. J'ai pour l'instant le code ci-dessous, mais il ne fonctionne pas. Sub sup_les_8() Dim derlig As Long, cellule As Range derlig = Range("A65536").End(xlUp).Row Range("A2:I" & derlig).Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Range("A2").Select For Each cellule In Range("a:a") If Right(cellule, 1) = "8" Then Rows(Cells).EntireRow.Delete 'ActiveCell.Rows(Cells).EntireRow.Select 'Selection.Delete shift:=xlUp 'ActiveCell.Offset(-1, 0).Select End If Next End Sub Le trie fonctionne tant qu'il n'y a pas de nombre qui fini par 8. Mais dès que cette occurence est traitée la macro s'arrête avec un panneau qui m'indique : " Incompatibilité de type " Y-a-t-il une âme généreuse qui pourrait m'aider et surtout m'expliquer pourquoi mon code ne fonctionne pas. En vous remerciant par avance. Webmicalement. Laurent. |
|
|
|
15-09-2008 - 12:04
Message
#2
|
|
|
Membre Groupe : Membres Messages : 48 Inscrit : 27-10-2007 Lieu : Aubenas(fr) Membre n° 12 286 |
Bonsoir,
a essayer ( maxi récurrences chez moi: env 1150 données avec 8 à droite CODE Sub supprimer_les_huitadroite() Application.ScreenUpdating = False On Error Resume Next lig = Columns(1).Find("*8", Range("A65536"), , xlWhole).Row Rows(lig).Delete If Err.Number > 0 Then: End supprimer_les_huitadroite End Sub edit: valable que si tu rends la main à l'utilisateur (utilisation du "end") Bonne soirée -------------------- Michel
|
|
|
|
16-09-2008 - 3:03
Message
#3
|
|
![]() Membre Groupe : Membres Messages : 130 Inscrit : 09-02-2005 Lieu : Lyon - France Membre n° 5 750 |
Bonjour Michel,
Tout d'abord merci pour ta macro. Elle fonctionne parfaitement, et ce quelque soit le nombre d'occurence. Je ne comprend pas ta remarque concernant "edit". edit: valable que si tu rends la main à l'utilisateur (utilisation du "end") Es-tu en mesure de m'aider à modifier MA macro et m'expliquer ce qui ne va pas dans For Each cellule In Range("a:a") If Right(cellule, 1) = "8" Then Rows(Cells).EntireRow.Delete End If Bonne journée à toi. Laurent. |
|
|
|
16-09-2008 - 4:03
Message
#4
|
|
![]() Membre Groupe : Membres Messages : 130 Inscrit : 09-02-2005 Lieu : Lyon - France Membre n° 5 750 |
A tous ( et à Michel ),
J'ai essayé comme code : Range("A1").Select For Each cellule In Range("A1:I" & derlig) If Right(cellule, 1) = "8" Then cellule.EntireRow.Select cellule.EntireRow.Delete End If Next Le problème est que si j'ai successivement 2 cellules avec un 8 en dernière position. La 2ème cellule n'est pas traitée. Je pense que le suppression d'une ligne décale les données, mais que le "compteur" For each cellule ne fait pas "un pas en arrière" et ne prend donc pas en compte la valeur de la cellule suivante. Pas facile la manipulation des données avec une boucle. Laurent. |
|
|
|
16-09-2008 - 4:38
Message
#5
|
|
|
Membre Groupe : Membres Messages : 48 Inscrit : 27-10-2007 Lieu : Aubenas(fr) Membre n° 12 286 |
Bonjour Laurent
------ Range("A1").Select inutile car tu détermines en dessous ta zone de travail; select-selection est à éviter au maximum: ralentit tout, bouffe de la mémoire, fait scintiller l'écran (l'enregistreur de macro est un assistant: donc, quand tu sélectionne une cellule, il marque "select") ----- For Each cellule In Range("A1:I" & derlig) If Right(cellule, 1) = "8" Then pourquoi I ? tu parlais au départ de la colonne A ----- cellule.EntireRow.Select cellule.EntireRow.Delete à remplacer par rows(cellule.row).delete End If Next END: cette instruction ferme toutes les macros en cours: si "sup les 8" est une sous- macro, le retour à la macro principale ne se fera pas Cordialement -------------------- Michel
|
|
|
|
24-09-2008 - 7:08
Message
#6
|
|
![]() Membre Groupe : Membres Messages : 130 Inscrit : 09-02-2005 Lieu : Lyon - France Membre n° 5 750 |
Michel,
Merci de ta réponse. Ton code est évidemment plus "propre" que le mien ! Je bute toujours sur le cas de figure où 2 cellules contigues ont un 8 en dernier caractère. Avec la macro, le 2ème 8 n'est pas supprimé et la macro passe en revu les lignes suivantes. As-tu une idée pour contourner ce problème ? Cordialement. Laurent. |
|
|
|
![]() ![]() |
|
Version bas débit | Nous sommes le : 05-12-2008 - 3:20 |