EXCEL - mon code VB est pourri, aidez moi !

Fermé
Croquette - 5 janv. 2010 à 19:47
 Croquette - 6 janv. 2010 à 11:55
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
A voir également:

4 réponses

Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 459
5 janv. 2010 à 20:05
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
MErci Ricky c'est qd même pas mal pour un début, tu m'as qd meme appris un truc !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
5 janv. 2010 à 22:38
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
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
Et au fait: c'est bcp plus rapide en execution !
thanks!
0
Croquette > Croquette
6 janv. 2010 à 10:50
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
Croquette > Croquette
6 janv. 2010 à 11:05
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
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
6 janv. 2010 à 11:01
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
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
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
6 janv. 2010 à 11:21
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
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