Trucs et astuces Express - L'aide informatique au bout des doigts!

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Suppression en fonction du caractère de droite par Macro, Suppression d'une ligne si le caractère de droite de la cellule co
wildpegase
posté 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.
Go to the top of the page
 
+Quote Post
michel_m
posté 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
Go to the top of the page
 
+Quote Post
wildpegase
posté 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.
Go to the top of the page
 
+Quote Post
wildpegase
posté 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.
Go to the top of the page
 
+Quote Post
michel_m
posté 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
Go to the top of the page
 
+Quote Post
wildpegase
posté 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.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 

RSS Version bas débit Nous sommes le : 05-12-2008 - 3:20
annuaire