Votre avis sur écriture code

Marc_du_78

XLDnaute Accro
Bonjour le Forum,
Juste pour vous demander si l'écriture de ce code est correcte où s'il peut être amélioréc de quelle façon.
En vous remerciant.

Sub SelectMois()
Columns('A:AV').EntireColumn.Hidden = False
If Range('X1') = 'JANVIER' Then
Columns('M:W').EntireColumn.Hidden = True
Columns('AA:AO').EntireColumn.Hidden = True
Else
End If
If Range('X1') = 'FEVRIER' Then
Columns('L:L').EntireColumn.Hidden = True
Columns('N:W').EntireColumn.Hidden = True
Columns('Z:Z').EntireColumn.Hidden = True
Columns('AB:AO').EntireColumn.Hidden = True
Else
End If
.........................

If Range('X1') = 'DECEMBRE' Then
Columns('L:V').EntireColumn.Hidden = True
Columns('Z:AJ').EntireColumn.Hidden = True
Columns('AL:AO').EntireColumn.Hidden = True
Else
End If
Exit Sub
End Sub

En vous remerciant chaleureusement.
 

CBernardT

XLDnaute Barbatruc
Bonjour Marc_du_78 et le forum,

J'ai supposé qu'en cas de test positif d'une condition, il fallait afficher toutes les colonnes puis masquer certaines autres colonnes.

Sub SelectMois()
Range('A:AV').EntireColumn.Hidden = False
If Range('X1') = 'JANVIER' Then Range('A:AV').EntireColumn.Hidden = False: _
Range('M:V,AA:AO').EntireColumn.Hidden = True
If Range('X1') = 'FEVRIER' Then Range('A:AV').EntireColumn.Hidden = False: _
Range('L:L,N:W,Z:Z,AB:AO').EntireColumn.Hidden = True
'.........................

If Range('X1') = 'DECEMBRE' Then Range('A:AV').EntireColumn.Hidden = False: _
Range('L:V,Z:AJ,AL:AO').EntireColumn.Hidden = True
End Sub

Cordialement

Bernard
 

jeromegmc

XLDnaute Occasionnel
Salut,

Voici quelques modifications, j'espère que cela t'aidera à comprendre la syntaxe de la fonction 'if' car je pense que tu n'as pas tout à fait compris:

Code:
Sub SelectMois()

Columns('A:AV').EntireColumn.Hidden = False

If Range('X1') = 'JANVIER' Then
    Columns('M:W').EntireColumn.Hidden = True
    Columns('AA:AO').EntireColumn.Hidden = True

ElseIf Range('X1') = 'FEVRIER' Then
    Columns('L:L').EntireColumn.Hidden = True
    Columns('N:W').EntireColumn.Hidden = True
    Columns('Z:Z').EntireColumn.Hidden = True
    Columns('AB:AO').EntireColumn.Hidden = True

ElseIf Range('X1') = 'DECEMBRE' Then
    Columns('L:V').EntireColumn.Hidden = True
    Columns('Z:AJ').EntireColumn.Hidden = True
    Columns('AL:AO').EntireColumn.Hidden = True

End If

A+

Message édité par: jeromegmc, à: 27/02/2006 14:08
 

Jam

XLDnaute Accro
Salut Marc, Bernard, Jérome,

Aïe ( :)) non non les p'tits gars pas de If..Then...Else dans ce cas, un bon vieux Select Case fera beaucoup mieux l'affaire:
Code:
Select Case Range('X1').Value
   Case 'Janvier'
       ...
   Case 'Février'
       ...
(...)
   Case 'Décembre'
       ...
End Select

Bon courage
 

Jam

XLDnaute Accro
Salut Marc,

Tout simplement parce que la structure est plus simple à gérer d'une part, d'autre part parce que c'est beaucoup plus rapide.
Imagine que Range('X1')='Décembre'. Et bien dans le cas des If, toutes les itérations de if vont être testées les unes après les autres, pas avec un Select Case. Il s'agit donc d'une perte de temps. D'un point de vue programmation le ElseIf est à utiliser avec forte modération car c'est lent.
Imagine aussi maintenant que tu ne veuilles traiter que 3 mois de l'année et pas les autres alors tu peux avoir le code suivant:
Code:
Select Case Range('X1').Value
   Case 'Janvier'
       ...
   Case 'Février'
       ...
   Case 'Décembre'
       ...
   Case Else
       'ne rien faire ;-)
End Select
C'est plus simple, le code est plus lisible et en une ligne de code le problème est réglé. Et si demain tu veux rajouter une nouvelle ligne c'est plus simple, ou bien réunir par trimestre, par exemple:
Code:
Select Case Range('X1').Value
   Case 'Janvier', 'Février', 'Mars'
       ...
   Case 'Avril', 'Mai', 'Juin'
       ...
   Case 'etc.....'
       ...
   Case Else
       'ici on peut y mettre une gestion d'erreur ;)
End Select
Avec des ElseIf il faudra recoder 12 itérations, quand là ca ne me prend que quelques secondes.

Dernier avantage, tu peux y mettre des conditions (cf l'aide VBA pour plus de détail) de façon assez simple et efficace.

J'espère que cela te conviendra comme réponse.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour à tous

Juste rapidos pour Jam, ok pour le Select Case mais pas dacodac sur ton dernier Post pour un petit truc !

Le Case Else pour 'Ne Rien Faire' est absolument inutile...

C'est comme le Else de Marc au début du Fil, il ne sert à rien...

Bon Aprèm
[ol]@+Thierry[/ol]
 

Jam

XLDnaute Accro
Salut _Thierry, et vous autres,

J'ai juste mis le Case Else pour info surtout. Je t'accorde bien volontier qu'il ne sert à rien dans ce cas, et donc qu'il faut le retirer. Par expérience, je sais qu'on 'oublie' parfois son existence.

Bon fin de journée.
 

Ti_

Nous a quitté
Repose en paix
Salut,
Mon message ne veut pas passer, j'envoie ces quelques lignes pour voir s'il n'y aurait pas des caractères interdits...

Bon, 5 essais différents, ça veut pas passer, j'en ai marre, j'ai fait un pdf en pièce jointe. Pas simple tout ça, vivement que le forum redevienne pleinement fonctionnel. (j'ai déjà eu le même problème la semaine dernière avec un post auquel je n'ai jamais pu répondre)
[file name=post.zip size=3756]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/post.zip[/file]

Message édité par: Ti_, à: 27/02/2006 17:21
 

Pièces jointes

  • post.zip
    3.7 KB · Affichages: 20
  • post.zip
    3.7 KB · Affichages: 16
  • post.zip
    3.7 KB · Affichages: 13

Ti_

Nous a quitté
Repose en paix
Bon, en plus ma macro a été coupée au pdfage, je remets donc le fichier... [file name=post_20060227172746.zip size=3908]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/post_20060227172746.zip[/file]
 

Pièces jointes

  • post_20060227172746.zip
    3.8 KB · Affichages: 15

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Ti, le Fil

Je crois que c'est Hervé, ou Pascal, qui m'ont expliqué que c'est les comparateurs 'Different de' qui rejettent le Post ...

Donc c'est ta ligne :
If Plage [DIFFERENT DE] '' Then .Range(Plage).EntireColumn.Hidden = True

Je teste ton code d'une autre manière :

Sub SelectMois()
Dim Plage$
   
With Worksheets('Feuil1')
        .Columns('A:AV').EntireColumn.Hidden =
False
           
Select Case Range('X1').Value
               
Case 'JANVIER': Plage = 'M:W,AA:AO'
               
Case 'FEVRIER': Plage = 'L:L,N:W,Z:Z,AB:AO'
           
'Case ....
               
Case 'DECEMBRE': Plage = 'L:V,Z:AJ,AL:AO'
           
End Select
       
'test final pour ne pas renvoyer d'erreurs...
       
If Not Plage = '' Then .Range(Plage).EntireColumn.Hidden = True
   
End With
End Sub

Pour la partie du CodeName... Arf ça nous rajeunit pas à l'époque on était tous les deux ;) :
Lien supprimé !!!!

Bonne Soirée
[ol]@+Thierry[/ol]
 

Ti_

Nous a quitté
Repose en paix
Salut,
Ouf, merci Thierry, moi aussi je m'endormirai ce soir un peu moins ignorant... concernant le caractère sourcilleux de ce forum !

Arf, Thierry, je suis retourné voir ce fil historique. Oui effectivement depuis cette époque j'ai changé ma façon de faire et j'ai opté dans l'immense majorité des cas pour utiliser le CodeName des feuilles et non pas le style Worksheets('NomFeuille') (même s'il m'arrive encore de l'utiliser dans certaines circonstances).
Je crois me souvenir d'ailleurs d'un fil où j'expliquais pourquoi, et je crois que Véri s'était mêlé à la discussion et que ça avait dégénéré en joyeuse rigolade, mais quant à le retrouver...

Message édité par: Ti_, à: 28/02/2006 10:27
 

Discussions similaires

Réponses
13
Affichages
247
Réponses
1
Affichages
170
Réponses
2
Affichages
493

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal