VBA pas plus simple ?

Salut tout le monde
Enfin... j'ai réussi à faire une chose que je souhaitais, mais je crains fort de faire eclater de rire tous els pro du forum et du VBA.
Je joins mon ti code au cas ou quelqu'un trouve un moyen de simplifier tout ca et qu'il peut me le faire comprendre...
Merci d'avance et longue vie au forum's
ya'v

Private Sub worksheet_activate()
jsold = Worksheets("BD").[F22].Value
ActiveSheet.Unprotect Password:="ZAZA"
Rows("20:49").Select
Selection.EntireRow.Hidden = False
Rows("59:88").Select
Selection.EntireRow.Hidden = True
If jsold = "1" Then
Rows("20:49").Select
Selection.EntireRow.Hidden = True
Rows("59:88").Select
Selection.EntireRow.Hidden = False
ElseIf jsold = "2" Then
Rows("21:49").Select
Selection.EntireRow.Hidden = True
Rows("60:88").Select
Selection.EntireRow.Hidden = False
ElseIf jsold = "3" Then
Rows("22:49").Select
Selection.EntireRow.Hidden = True
Rows("61:88").Select
Selection.EntireRow.Hidden = False

et caetera jusqu'à ...

ElseIf jsold = "30" Then
Rows("49:49").Select
Selection.EntireRow.Hidden = True
Rows("88:88").Select
Selection.EntireRow.Hidden = False
ElseIf jsold < "31" Then
Beep
End If
ActiveSheet.Protect Password:="ZAZA", DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("F18").Select
End Sub

bien de la job pour rien non ????

2 réponses

  1. Salut,

    En effet, le code est impressionnant !
    tu peux utiliser l'objet Cells qui selectionne une cellule en indiquant le numero de ligne et le numero de colonne.
    Ainsi, tu peux remplacer :
    If jsold = "1" Then
       ...
       Beep
    End If

    par
    Cells(20 + jsold, 49).EntireRow.Hidden = True
    Cells(59 + jsold, 88).EntireRow.Hidden = False

    Remarque : Si dans la cellule [F22], il y autre chose qu'un numerique, tu risque d'avoir une erreur. Si ca peut arriver, il faut faire un test sur la valeur avec la fonction VarType.

    DaNot
    un Libre ouvert à la source ...
    0
    1. bin merci, ca parrait tellement simple présenté comme cela !
      quant au problème du non-numérique, je suis couvert, c'est juste la différence entre une date de début et de fin (+1 pour que tous les jours soient pris en considération !) et j'aurais un message d'erreur dejà sur la première feuille en cas de fausse entrée.
      Encore merci et longue vie aux forum's
      ya'v
      0
    2. arghhhh, ca coince ...
      en effet si jsold = 24
      il me masque la ligne 44 et affiche la 83 au lieu de masquer de 44 à 49 et d'afficher de 83 à 88
      ai déjà tenté une dizaine de bidouillages sans succès...
      et en plus je n'arrive pas à avoir une vérification ou un message d'erreur si jsold>31...
      merci en tous cas pour la solution proposée qui me mettra peut-être un jour sur la bonne voie
      ya'v
      0
  2. Dans ce cas, essayes plutot :

    Private Sub worksheet_activate()

       jsold = Worksheets("BD").[F22].Value
       ActiveSheet.Unprotect Password:="ZAZA"

       Rows("20:49").EntireRow.Hidden = False
       Rows("59:88").EntireRow.Hidden = True

       If jsold < 31 Then
          Rows((20 + jsold - 1) & ":49").EntireRow.Hidden = True
          Rows((58 + jsold) & ":88").EntireRow.Hidden = False
       Else
          Beep
       End If

       ActiveSheet.Protect Password:="ZAZA", DrawingObjects:=True, Contents:=True, Scenarios:=True
       Range("F18").Select
    End Sub

    En relisant ton code, je m'apercois que je n'avais pas tres bien compris ce que tu voulais faire.

    DaNot
    un Libre ouvert à la source ...
    0
    1. merci pour le temps investi pour moi, et là je me tappe la tête contre les murs, j'ai testé 15 - 20 solutions sans tomber sur les parenthèses & ... et le reste
      merci encore et merci à tous ceux qui ont aussi essayé de trouver...
      ya'v
      0