Aide pour optimisation de code (routine)

Bonjour,

J'ai créé un code qui me permet de cacher un ensemble de lignes en fonction de la valeur de C15.

Ce code est basique et peut être optimisé via création de routine. Mais je n'arrive pas à en créer une qui fonctionne... Pouvez vous m'aider svp?

Extrait de la macro correspondant à la feuille "Design" :

If Range("C15") = 1 Then                                 'Si valeur cellule C15 égal 1
                With Rows("45:240")                                  'Sélection des lignes 45 à 240
                If .Hidden Then .Hidden = True Else .Hidden = True   'Si sélection est cachée, alors on cache. sinon on cache
                End With
            End If

            If Range("C15") = 2 Then                                      'Si valeur cellule C15 égal 2
                With Rows("45:64")                                        'Sélection des lignes 45 à 64
                If Not .Hidden Then .Hidden = False Else .Hidden = False  'Si sélection n'est pas cachée, alors on ne cache pas. sinon on ne cache pas
                End With

                With Rows("67:240")                                       'Sélection des lignes 67 à 240
                If Not .Hidden Then .Hidden = True Else .Hidden = True    'Si sélection n'est pas cachée, alors on cache. sinon on cache
                End With
            End If

            If Range("C15") = 3 Then
                With Rows("45:240")
                If .Hidden Then .Hidden = False Else .Hidden = False
                End With

                With Rows("89:240")
                If Not .Hidden Then .Hidden = True Else .Hidden = True
                End With
            End If

Un grand merci !

Bonjour,

Le plus court que je peux faire avec mes connaissances ...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim X As Integer
Dim Z As Integer

If Not Application.Intersect(Target, Range("C15")) Is Nothing Then

X = Range("C15").Value
Select Case X
Case 1, Is >= 10
    If Range("C15") = X Then                 'Si veleur cellule C15 égal 1
        With Rows("45:240")                  'Sélection des lignes 45 à 240
            If .Hidden Then .Hidden = True Else .Hidden = True   'Si sélection est cachée, alors on cache. sinon on cache
        End With
    End If

Case 2
    If Range("C15") = 2 Then              'Si veleur cellule C15 égal 2
        With Rows("45:64")                'Sélection des lignes 45 à 64
            If Not .Hidden Then .Hidden = False Else .Hidden = False  'Si sélection n'est pas cachée, alors on ne cache pas. sinon on ne cache pas
        End With

        With Rows("67:240")               'Sélection des lignes 67 à 240
            If Not .Hidden Then .Hidden = True Else .Hidden = True    'Si sélection n'est pas cachée, alors on cache. sinon on cache
        End With
    End If

Case 3, 4, 5, 6, 7, 8, 9

    If Range("C15") = X Then
        With Rows("45:240")
            If .Hidden Then .Hidden = False Else .Hidden = False
        End With

        Z = (X * 22) + 23
        With Rows(Z & ":240")
            If Not .Hidden Then .Hidden = True Else .Hidden = True
        End With
    End If
End Select

End Sub

Gelinotte

Bonsoir,

Ci-joint une autre proposition (hello Gelinotte, croisement de messages ...) en quelques lignes, à tester.

Fonctionne si les espacements sont réguliers, comme dans le fichier fourni en exemple.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim iLig As Integer

    If Not Application.Intersect(Target, Range("C15")) Is Nothing Then
        iLig = 22 * Int(Range("C15").Value + 1)
        Rows("23:" & iLig).Hidden = False
        Rows(iLig + 1 & ":" & 243).Hidden = True
    End If

End Sub

Bonne soirée

Bouben

Bonjour,

Merci à vous deux. Ça fonctionne parfaitement bien !

Au plaisir de vous recroiser sur ce super forum.

Alex

Rechercher des sujets similaires à "aide optimisation code routine"