EXCEL - mon code VB est pourri, aidez moi !

Croquette -  
 Croquette -
Bonjour,

J'ai fais un code pour masquer des lignes entières en fonction d'une valeur d'une cellule qui s'incrémente ou qui diminue.

Le problème est qu'il est long à s'exécuter (1sec) et en plus il me parait vraiment neuneu... mais bon je sais pas faire autrement !

Auriez vous plus simple, plus intelligent et plus rapide???

Public Sub tab1()
Application.ScreenUpdating = False

If Range("j36") = 3 Then
Range("44:44").EntireRow.Hidden = True
Range("45:45").EntireRow.Hidden = True
Range("46:46").EntireRow.Hidden = True
Range("47:47").EntireRow.Hidden = True
Range("48:48").EntireRow.Hidden = True
Range("49:49").EntireRow.Hidden = True
Range("50:50").EntireRow.Hidden = True
Range("51:51").EntireRow.Hidden = True
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 4 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = True
Range("46:46").EntireRow.Hidden = True
Range("47:47").EntireRow.Hidden = True
Range("48:48").EntireRow.Hidden = True
Range("49:49").EntireRow.Hidden = True
Range("50:50").EntireRow.Hidden = True
Range("51:51").EntireRow.Hidden = True
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 5 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = True
Range("47:47").EntireRow.Hidden = True
Range("48:48").EntireRow.Hidden = True
Range("49:49").EntireRow.Hidden = True
Range("50:50").EntireRow.Hidden = True
Range("51:51").EntireRow.Hidden = True
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 6 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = True
Range("48:48").EntireRow.Hidden = True
Range("49:49").EntireRow.Hidden = True
Range("50:50").EntireRow.Hidden = True
Range("51:51").EntireRow.Hidden = True
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 7 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = True
Range("49:49").EntireRow.Hidden = True
Range("50:50").EntireRow.Hidden = True
Range("51:51").EntireRow.Hidden = True
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 8 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = False
Range("49:49").EntireRow.Hidden = True
Range("50:50").EntireRow.Hidden = True
Range("51:51").EntireRow.Hidden = True
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 9 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = False
Range("49:49").EntireRow.Hidden = False
Range("50:50").EntireRow.Hidden = True
Range("51:51").EntireRow.Hidden = True
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 10 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = False
Range("49:49").EntireRow.Hidden = False
Range("50:50").EntireRow.Hidden = False
Range("51:51").EntireRow.Hidden = True
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 11 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = False
Range("49:49").EntireRow.Hidden = False
Range("50:50").EntireRow.Hidden = False
Range("51:51").EntireRow.Hidden = False
Range("52:52").EntireRow.Hidden = True
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 12 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = False
Range("49:49").EntireRow.Hidden = False
Range("50:50").EntireRow.Hidden = False
Range("51:51").EntireRow.Hidden = False
Range("52:52").EntireRow.Hidden = False
Range("53:53").EntireRow.Hidden = True
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 13 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = False
Range("49:49").EntireRow.Hidden = False
Range("50:50").EntireRow.Hidden = False
Range("51:51").EntireRow.Hidden = False
Range("52:52").EntireRow.Hidden = False
Range("53:53").EntireRow.Hidden = False
Range("54:54").EntireRow.Hidden = True
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 14 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = False
Range("49:49").EntireRow.Hidden = False
Range("50:50").EntireRow.Hidden = False
Range("51:51").EntireRow.Hidden = False
Range("52:52").EntireRow.Hidden = False
Range("53:53").EntireRow.Hidden = False
Range("54:54").EntireRow.Hidden = False
Range("55:55").EntireRow.Hidden = True
End If
If Range("j36") = 15 Then
Range("44:44").EntireRow.Hidden = False
Range("45:45").EntireRow.Hidden = False
Range("46:46").EntireRow.Hidden = False
Range("47:47").EntireRow.Hidden = False
Range("48:48").EntireRow.Hidden = False
Range("49:49").EntireRow.Hidden = False
Range("50:50").EntireRow.Hidden = False
Range("51:51").EntireRow.Hidden = False
Range("52:52").EntireRow.Hidden = False
Range("53:53").EntireRow.Hidden = False
Range("54:54").EntireRow.Hidden = False
Range("55:55").EntireRow.Hidden = False
End If
Application.ScreenUpdating = True
End Sub
Configuration: Windows XP
Safari 532.0

4 réponses

  1. Ricky38 Messages postés 5776 Date d'inscription   Statut Contributeur Dernière intervention   1 463
     
    Salut,

    je ne suis pas un pro en VBA mais je m'essaie ;)

    Public Sub tab1()
    Application.ScreenUpdating = False
    
    If Range("j36") = 3 Then
    Range("44:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 4 Then
    Range("44:44").EntireRow.Hidden = False
    Range("45:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 5 Then
    Range("44:45").EntireRow.Hidden = False
    Range("46:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 6 Then
    Range("44:46").EntireRow.Hidden = False
    Range("47:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 7 Then
    Range("44:47").EntireRow.Hidden = False
    Range("48:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 8 Then
    Range("44:48").EntireRow.Hidden = False
    Range("49:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 9 Then
    Range("44:49").EntireRow.Hidden = False
    Range("50:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 10 Then
    Range("44:50").EntireRow.Hidden = False
    Range("51:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 11 Then
    Range("44:51").EntireRow.Hidden = False
    Range("52:52").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 12 Then
    Range("44:52").EntireRow.Hidden = False
    Range("53:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 13 Then
    Range("44:53").EntireRow.Hidden = False
    Range("54:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 14 Then
    Range("44:54").EntireRow.Hidden = False
    Range("55:55").EntireRow.Hidden = True
    End If
    
    If Range("j36") = 15 Then
    Range("44:55").EntireRow.Hidden = False
    End If
    
    Application.ScreenUpdating = True
    End Sub
    


    Voilà :)
    0
    1. Croquette
       
      MErci Ricky c'est qd même pas mal pour un début, tu m'as qd meme appris un truc !
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    Un peu plus court :
    Public Sub tab1()
        Application.ScreenUpdating = False
        Select Case [J36]
        Case 3
            Range("44:55").EntireRow.Hidden = True
        Case Is > 3, Is <= 15
            Range("44:55").EntireRow.Hidden = True
            Range("44:44").Resize([J36] - 3).EntireRow.Hidden = False
        End Select
        Application.ScreenUpdating = True
    End Sub
    

    mais pas dit que tes lenteurs se situaient sur cette partie vue que tu faisais bien le .ScreenUpdating...

    eric
    0
    1. Croquette
       
      Merci bcp Eriiic !

      voilà une méthode que je ne connaissais pas les CASE. Cela à l'air très interessant et bcp plus simple que des IF je vais creuser tt ça...

      en tt cas cela fonctionne du tonnerre!

      merci
      0
    2. Croquette
       
      Et au fait: c'est bcp plus rapide en execution !
      thanks!
      0
      1. Croquette > Croquette
         
        En fait je ne sais pas pourquoi mais qd mon chiffre s'incrémente dans ma cellule J36 (toujours +1 ou -1 à l'origine) et bien avec ton code cela va avec +2 et j'ai donc deux lignes qui se masquent ou s'affichent d'un coup...

        bizarre!

        Pourquoi donc? ^^
        0
      2. Croquette > Croquette
         
        Pour être plus claire je remets tout mon code. Le problème est qu'avec le code d'eriiiiic, un clic sur mon bouton équivaut à +2 et 2 lignes sont en conséquence masquées ou affichées.

        je ne vois pas ou est le souci dans le code...

        Public Sub tab1()
        Application.ScreenUpdating = False
        Select Case [J36]
        Case 3
        Range("44:55").EntireRow.Hidden = True
        Case Is > 3, Is <= 15
        Range("44:55").EntireRow.Hidden = True
        Range("44:44").Resize([J36] - 2).EntireRow.Hidden = False
        End Select
        Application.ScreenUpdating = True
        End Sub

        -------------------------------------------------------------------------------

        Private Sub SpinButton1_SpinDown()
        If Range("j36") > 3 Then
        Range("j36").Value = Range("j36").Value - 1
        tab1
        Else
        Exit Sub
        End If
        End Sub

        -------------------------------------------------------------------------------

        Private Sub SpinButton1_SpinUp()
        If Range("j36") < 15 Then
        Range("j36").Value = Range("j36").Value + 1
        tab1

        Else
        Exit Sub
        End If
        End Sub
        0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Je ne sais pas si c'est dû à ça mais de toute façon j'avais fait une erreur.
    Essaie avec :
        Application.ScreenUpdating = False
        Select Case [J36]
        Case 3
            Range("44:55").EntireRow.Hidden = True
        Case 4 To 15
            Range("44:55").EntireRow.Hidden = True
            Range("44:44").Resize([J36] - 3).EntireRow.Hidden = False
        End Select
        Application.ScreenUpdating = True
    

    eric
    0
    1. Croquette
       
      Merci eriiic .

      je viens d'essayer ton nouveau code mais cela ne change rien en terme de comportement... Nous nous sommes croisés j'ai posté l'intégralité de mon code plus haut...
      0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    A 1ère vue je ne vois rien qui provoquerait ça.

    Sur mon exemple 1 seule ligne en plus ou en moins.
    Peut-être as-tu un évènement change où tu as oublié cancel=true (?)

    Pour ton SpinButton utilises ses propriétés linkedcell, min et max, ça fait toujours ça de lignes de codes en moins.
    eric
    0
    1. Croquette
       
      Ok. après quelques tests je vois bine que cela ne vient pas de ton code effectivement.

      je te remercie pour tes conseils.

      Bonne journée!
      0