Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Corriger une Macro

H

hasardeux

Guest
Bonsoir tout le monde,

Je vous soumettre sous-dessous une macro qui me permet de:
- Mettre la colonne L en format Numérique
- De remlpacer les cellules contenant la valeur 0 par A
- Un msgbox s'affiche pour demander la valeur à chercher pour détruire ensuite les cellules concernant
- et puis de me supprimer toutes les lignes dont la cellule de la colonne A contient la valeur A après demande de confirmation

Mais, je rencontre 2 problèmes auxquels, je voudrais avoir des solutions astucieuses:
1- Eviter de traiter toute la colonne A (ce qui alourdir la macro) en se limitant juste de L2 à la dernière cellule remplie de la colonne L (qqch comme end(xlUp)
2- Si j'ai deux cellules consécutives contenant la valeur A, la macro ne supprime qu'une seule ligne. il faut exécuter la macro une 2ème fois pourqu'elle supprime l'autre ligne. comment éviter cela.


Merci beaucoup pour vos aides.

voici la macro:


Sub ChercherEtDetruire()
Dim RECHERCHE As String
Dim c As Range
Columns("L:L").Select
Selection.NumberFormat = "#,##0.00"
Selection.Replace What:="0", Replacement:="A", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
RECHERCHE = InputBox("Votre recherche ? (attention aux Majuscules/Minuscules) ")
Range("L2").End(xlDown).Select
Set MaSelection = Range("L2:L65536")
Set Maplage = MaSelection
With Maplage
Set c = .Find(RECHERCHE, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlPatternGray50
'c.EntireRow.Delete (et non çà marche pas ici !!!, çà plante le "FindNext" puisque la ligne a été virée

Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

Alerte = MsgBox("Toutes les cellules grisées vont être supprimmées", vbYesNo, "Warning")
If Alerte = vbYes Then
For Each Cell In Maplage
If Cell.Interior.Pattern = xlPatternGray50 Then
Cell.EntireRow.Delete
End If
Next
Else: Alerte = vbNo
Maplage.Select
Selection.Interior.ColorIndex = xlNone
End If
Range("a1").Select
Set Maplage = Nothing
End Sub
 
@

@+Thierry

Guest
Salut Hazardeux, bonsoir le Forum

çà ... çà me rappelle un truc que j'ai écris pour le Fab... Je pense que si tu cherches bien dans le fil où tu as trouvé une partie de ce code, tu as déjà les réponses...

<http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=9298&t=8871>

111) Pour ce qui est de ta colonne tu fais un set de plage comme ceci
Set Maplage = Worksheets("Feuil1").Range("L2", [L65536].End(xlUp))
(Set MaSelection = Range("L2:L65536" Set Maplage = MaSelection
tu peux virer !)

222) Pour ce qui est du problème de ligne non supprimées... c'est ce que j'écrivais en détail dans le même post... Si tu regardes juste en dessous de l'endroit où tu as copié ton code... Il y a un PS ! avec une AUTRE METHODE que le "EntireRow.Delete" qui pose un problème en cas de cellules contenant la valeur recherchée sur des lignes adjacentes...

Voilà Hazardeux, suffit de lire un tant soit peu... et pas juste de copier coller...

Bon Week End
@+Thierry
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…