VBA boucle find dans feuille entière

samo.m

XLDnaute Nouveau
Bonjour à tous !

Je suis nouveau sur le site et je débute en VBA. J'aurais besoin de vos lumières car je bloque sur un problème depuis quelques jours maintenant.

J'ai plusieurs tableaux dans différents fichiers excel, jusqu'à là rien d'exceptionnel ^^
Le problème est que ces tableaux ont des tailles complètement différentes et surtout énormes, cela va parfois à 1500 lignes et en colonne QNZ. De nombreuses cellules dans mes tableaux contiennent la valeur "NI" et je souhaiterais effacer le contenu de ces cellules pour qu'elles soient vierge.

J'ai commencé un peu de code (pas grand chose) mais le problème est que lorsque j'exécute la macro, cela efface une seule cellule, je dois l'exécuter autant de fois qu'il y a de cases.
Pouvez-vous donc m'aider à effectuer une boucle qu'il effacerait la cellule tant qu'il trouverait cette valeur, et qui s'arrêterait automatiquement lorsqu'il ne trouverait plus cette valeur.

Voila le code que j'avais crée:

Sub TEST1()
Cells.Find(What:="N/I").Select
Selection.Clear

End Sub

Merci pour votre aide ! :D
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : VBA boucle find dans feuille entière

Bonsoir,

Code:
Sub raz_plusieurs()
  Cells.Interior.ColorIndex = xlNone
  mot = "NI"
  Set champ = Nothing
  Set c = Cells.Find(mot, , , xlWhole)
  If Not c Is Nothing Then
      premier = c.Address
      Do
        c.Interior.ColorIndex = 4
        If champ Is Nothing Then Set champ = c Else Set champ = Union(champ, c)
        Set c = Cells.FindNext(c)
      Loop While Not c Is Nothing And c.Address <> premier
   End If
   champ.Value = Empty
End Sub


cf FIND

JB
 

Pièces jointes

  • Classeur1.xls
    34.5 KB · Affichages: 46
  • Classeur1.xls
    34.5 KB · Affichages: 50
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : VBA boucle find dans feuille entière

Bonjour, samo.m, BOISGONTIER :), mapomme :), le Forum,

Bienvenue sur XLD, samo.m.

Autre suggestion :

Code:
Option Explicit
Sub Valeur_x_supprimer()
    Application.ScreenUpdating = False
    Cells.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Replace What:="N/I", Replacement:="", LookAt:=xlWhole, MatchCase:=True
    Application.ScreenUpdating = True
End Sub

A bientôt :)
 

samo.m

XLDnaute Nouveau
Re : VBA boucle find dans feuille entière

Merci à tous. J'ai opté pour la solution de DoubleZero qui fonctionne très bien ! :) Cependant peut tu m'expliquer ta ligne de code principale histoire que je ne recopie pas cela bêtement sans savoir pourquoi cela fonctionne.
Cells.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Replace What:="NA", Replacement:="", LookAt:=xlWhole, MatchCase:=True
Je ne vois pas de boucle et c'est pourquoi je ne comprends pas comment cela fonctionne.

Merci encore une fois !
 
Dernière modification par un modérateur:

DoubleZero

XLDnaute Barbatruc
Re : VBA boucle find dans feuille entière

Bonjour, samo.m, BOISGONTIER :), mapomme :), Papou-net :), le Forum,

...expliquer ta ligne de code principale...

Cells.SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Replace What:="NA", Replacement:="", LookAt:=xlWhole, MatchCase:=True...

Cette ligne permet de trouver et vider l'ensemble des cellules, visibles, dont le contenu est égal à "N/I".

Les formules ne sont pas prises en compte.

Elle évite de recourir aux multiples "select" qui ne font que ralentir l'exécution de la macro.

A bientôt :)
 

Discussions similaires

Réponses
2
Affichages
153