XL 2016 Optimisation VBA

Tony P.

XLDnaute Nouveau
Bonjour,

Je suis vraiment pas très doué concernant le VBA. J'ai réussi à faire un code qui marche mais qui est beaucoup trop long à l’exécution.

Sub EP_Masquer_Lignes()

For Each cellule In [E79:E83]
If cellule.Value = "" Then cellule.EntireRow.Hidden = True
Next cellule

For Each cellule In [F84:F86]
If cellule.Value = "" Then cellule.EntireRow.Hidden = True
Next cellule

For Each cellule In [E87:E92]
If cellule.Value = "" Then cellule.EntireRow.Hidden = True
Next cellule

For Each cellule In [F93:F95]
If cellule.Value = "" Then cellule.EntireRow.Hidden = True
Next cellule

For Each cellule In [E96:E101]
If cellule.Value = "" Then cellule.EntireRow.Hidden = True
Next cellule

For Each cellule In [F102:F104]
If cellule.Value = "" Then cellule.EntireRow.Hidden = True
Next cellule

For Each cellule In [E105:E110]
If cellule.Value = "" Then cellule.EntireRow.Hidden = True
Next cellule

For Each cellule In [F111:F113]
If cellule.Value = "" Then cellule.EntireRow.Hidden = True
Next cellule

Etc.... sur plusieurs lignes...

Pouvez-vous me dire ce que vous en pensez et ce que vous me préconisez pour améliorer tout ça ?

Merci d'avance.

Tony.
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

tout dépend comment elles sont vides.
Les 2 façons, peut-être qu'une seule te suffira :
VB:
Sub test()
    Dim pl As Range, pl2 As Range
    Set pl = Union([E79:E83], [F84:F86], [E87:E92]) ' jusqu'à 30 plages
    Set pl2 = pl.Find("", , xlValues, xlWhole) 'formule retourne ""
    If Not pl2 Is Nothing Then pl2.EntireRow.Hidden = True
    Set pl2 = pl.SpecialCells(xlCellTypeBlanks) ' vides de chez vide
    If Not pl2 Is Nothing Then pl2.EntireRow.Hidden = True
End Sub
eric
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Une p'tite macro:
  • Vous indiquez les lignes à supprimer dans les constantes C1, C2, ..., Cn
  • Le premier élément d'une constante Cn est la colonne concernée
  • Dans Array(C1, C2, ...) indiquer toutes les constantes concernées
VB:
Sub EP_Masquer_Lignes()
Dim c, s, i As Long, xcell, n1 As Long, n2 As Long

Const C1 = "E,73-83,87-92,96-101,105-110"
Const C2 = "F,84-86,93-95,102-104,111-113"
   Application.ScreenUpdating = False
   For Each c In Array(C1, C2)
      s = Split(c, ",")
      For i = 1 To UBound(s)
         n1 = Split(s(i), "-")(0): n2 = Split(s(i), "-")(1)
         For Each xcell In Range(s(0) & n1).Resize(n2 - n1 + 1)
            If xcell = "" Then xcell.EntireRow.Hidden = True
         Next xcell
      Next i
   Next c
End Sub
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
121
Réponses
21
Affichages
277

Statistiques des forums

Discussions
312 163
Messages
2 085 862
Membres
103 006
dernier inscrit
blkevin