Définir une plage avec condition

Bonjour!

J'ai un petit souci à modifié ma macro :

Private Sub TextBox1_Change() ' Macro recherche
Dim DERligne
Sheets("Résultat").Unprotect ""
Application.ScreenUpdating = False
Dim Plage As Range
Dim cell As Range
DERligne = Sheets("Résultat").cells.Find(What:="FIN référentiel").Row
  Set Plage = Range("A4:G" & DERligne)  Application.ScreenUpdating = False
  Rows("4:" & DERligne).Hidden = True

  For Each cell In Plage
    If InStr(UCase(cell), UCase(TextBox1)) Then
      cell.EntireRow.Hidden = False
    End If
  Next

Application.ScreenUpdating = True
Sheets("Résultat").Protect "", True, True, True

End Sub

J'aimerai modifié ma plage de recherche, j'aimerai que ma plage soit égale à toutes les ligne non masquées et non vide.

En gros comment dire : Set Plage = toutes les celulles non masquées et non vides.

Merci d'avance

Cdt

Bonsoir,

Pour ce qui est des cellules visibles :

Set Plage = Range("A4:G" & DERligne).SpecialCells(xlCellTypeVisible)

Pour ce qui est des cellules non vides, il te faut parcourir les cellules de ta plage et chercher celles qui sont vides.

Ceci te donne les cellules vides mais il n'y a pas de fonction dans la méthode "SpecialCells" qui retourne les cellules non vides :

  Set Plage = Range("A4:G" & DERligne).SpecialCells(xlCellTypeBlanks)

Hervé.

-- 08 Fév 2011, 18:01 --

Re,

Pour optimiser ton code pourquoi ne pas utiliser :

Set cell = Plage.Find(TextBox1.Text & "*", , xlValues)
If Not cell Is Nothing Then
    cell.EntireRow.Hidden = False
End If

au lieu de :

For Each cell In Plage
    If InStr(UCase(cell), UCase(TextBox1)) Then
        cell.EntireRow.Hidden = False
    End If
Next

Juste une idée.

Hervé.

Bonsoir Hervé merci pour tes réponses,

Le code :

Set Plage = Range("A4:G" & DERligne).SpecialCells(xlCellTypeVisible)

marche pas tout à fait comme je le souhaite, mais ça m'avance... le problème est que lorsque j'efface ce que j'ai écrit dans la textbox, les lignes ne réapparaissent pas, j'aimerai qu'elles soient démarquées MAIS uniquement les lignes qui étaient visibles au début. J'espère être assez claire

Quand à ce code

Set cell = Plage.Find(TextBox1.Text & "*", , xlValues)
If Not cell Is Nothing Then
    cell.EntireRow.Hidden = False
End If

j'ai remplacer mais il masque tout les lignes dès le début alors...

Pour les cellules vide on peut oublier.

Rechercher des sujets similaires à "definir plage condition"