• Initiateur de la discussion Initiateur de la discussion hasardeux
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
332
Réponses
14
Affichages
337
Réponses
18
Affichages
134
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
213
Retour