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

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
132
Réponses
21
Affichages
314
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…