Optimiser macro worksheet by change

Bonjour,

En colonne A : =SI(ESTTEXTE(D9);1;0)

En colonne B : du texte

L'idée :

B9 contient du texte donc en colonne A9 = 1

B10 ne contient pas de texte donc A10 = 0

Si j'ajoute du texe en B10, alors A10 = 1 et donc : afficher la ligne 11 sinon la masquer.

Pour que cela soit ergonomique, j'utilise worksheet by change.

Cependant, du fait qu'il y a de nombreuse ligne à vérifier, à chaque changement de celulle, cela mouline un peu, rendant alors l'utilisation du fichier pas si ergonomique que ça...

Le code :

Sub AFFICHER_MASQUER_LIGNES

    Dim xRg As Range

    Application.ScreenUpdating = False

        For Each xRg In Range("A8:A761")
            If xRg.Value = 1 Then
                xRg.EntireRow.Hidden = False

            Else
                xRg.EntireRow.Hidden = True
            End If
        Next xRg

Application.ScreenUpdating = True

End Sub

Sauriez-vous comment est-ce que je pourrais optimiser cette utilisation ?

Merci par avance,

Bonjour

Pour que cela soit ergonomique, j'utilise worksheet by change.

Ce n'est pas le code que l'on voit... dans votre demande

La formule fait référence à D9 et vous mentionnez B9, juste ou pas ?

- La plage concernée va de la ligne 8 à la ligne 761 ?
- Si B8 est vide, les lignes 9 à 761 sont masquées ?
- Est-ce qu'il se peut qu'une ligne dont vous avez 1 en colonne A soit changée et que A de cette ligne devienne 0 ?

crdlt

Bonjour Dan,

Merci pour votre retour !

Effectivement, que de flous dans mon précédent poste...

Ce n'est pas le code que l'on voit... dans votre demande

Oui effectivement, j'ai passé le code via un clique sur un bouton. Mais l'idée reste de l'utiliser avec worksheet by change.

La formule fait référence à D9 et vous mentionnez B9, juste ou pas ?

En exemple :

En cellule A9 : =SI(ESTTEXTE(B8);1;0)

- Si B8 est vide, les lignes 9 à 761 sont masquées ?

J'étire la formule de la ligne A9 jusqu'à A761. Si la ligne i contient du texte, alors prendre la valeur 1 sinon 0.

A partie de là, la macro viendra masquer toutes les lignes où elle trouvera en colonne Ai = 0 sinon elle les affiche.

Je souhaite utiliser worsheet by change pour que cela donne l'utilisation suivante :

Quand j'ajoute du texte sur une ligne i, ça affiche la ligne i+1. Si j'efface le texte de la ligne i, alors ça masque la ligne i+1.

J'espère que c'est plus compréhensible ?
Merci beaucoup !

Bonjour,

Ok pour vos explications.

Essayez le code comme ceci

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B8:B761")) Is Nothing Then
    If Range("A" & Target.Row) = 1 Then
        Rows(Target.Row + 1).Hidden = False
        Rows(Target.Row + 2 & ":" & 761).Hidden = True
    Else: Rows(Target.Row + 1).Hidden = True
    End If
End If
End Sub

si ok pensez à

Cordialement

Re Dan !

J'ai testé votre macro, mais il semble qu'elle ne prend pas en compte les lignes après le target.

Exemple : Si j'ajoute du texte en B6, il va me masquer toutes les lignes ensuite, dont la ligne 13 alors que A13 = 1

Merci beaucoup !

8test.xlsm (26.34 Ko)

re

Ok je vois. Je pensais que vous étiez progressif dans le remplissage de B et surtout que votre formule texte en colonne A faisait référence à B sur la même ligne.

Essayez ceci

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dlg As Integer
Dim c As Range
Dim prem As String

If Target.Count > 1 Then Exit Sub
dlg = Range("A" & Rows.Count).End(xlUp).Row
If Not Intersect(Target, Range("B2:B" & dlg)) Is Nothing Then
    With Range("A2:A" & dlg)
        .EntireRow.Hidden = False
        Set c = .Find(CStr("0"), LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            prem = c.Address
            Do
                With Rows(c.Row)
                    If .Hidden = False Then .Hidden = True Else: .Hidden = False
                End With
                Set c = .FindNext(c)
            Loop While Not c Is Nothing
        End If
    End With
End If
End Sub

Remarque : mais pourquoi faites-vous une fusion des colonnes B à E. C'est fou le nombre de personnes qui font cela. Il faut toujours éviter les fusions avec VBA. Défusionnez puis élargissez votre colonne B tout simplement.

Crdlt

Dan,

Ca fonctionne, merci beaucoup pour ton aide et conseils !

Rechercher des sujets similaires à "optimiser macro worksheet change"