EXCEL - mon code VB est pourri, aidez moi !

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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à :)
    1. MErci Ricky c'est qd même pas mal pour un début, tu m'as qd meme appris un truc !
  2. Contributeur
    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
    1. 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
    2. Et au fait: c'est bcp plus rapide en execution !
      thanks!
    3. @CroquetteEn 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? ^^
    4. @CroquettePour ê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
  3. Contributeur
    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
    1. 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...
  4. Contributeur
    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
    1. 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!