Copie de formule sur plusieurs lignes

Bonjour à tous,

Je sollicite votre aide pour mon fichier en pièce jointe.

L'idée est d'ouvrir ou fermer un menu à l'aide du double clic ou du clic droit.

Par contre j'ai des centaines de lignes .. j'ai commence à taper le code pour toutes ces lignes mais ... Je pense qu'il doit y avoir un moyen d'alléger tout ca !

Donc merci d'avance si vous avez une solution à m'apporter

13extract-sap.xlsm (45.86 Ko)

Bonjour,

A essayer :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim lig%, col%, lis%, lfin%
    If Target.Column < 4 Or Target.Column > 6 Or Target.Row < 5 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    lfin = Application.Match("FIN", Me.Columns(4), 0)
    lig = Target.Row: col = Target.Column
    lis = Application.Match("*", Me.Range(Cells(lig + 1, col), Cells(lfin, col)), 0) + lig
    Me.Range(Cells(lig, col + 1), Cells(lis, col + 1)).SpecialCells(xlCellTypeConstants) _
     .EntireRow.Hidden = False
    Cancel = True
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim lig%, col%, lis%, lfin%
    If Target.Column < 4 Or Target.Column > 6 Or Target.Row < 5 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    lfin = Application.Match("FIN", Me.Columns(4), 0)
    lig = Target.Row: col = Target.Column
    lis = Application.Match("*", Me.Range(Cells(lig + 1, col), Cells(lfin, col)), 0) + lig
    If col = 6 Then
        If Me.Cells(lis - 2, col - 2) <> "" Then
            lis = lis - 2
        ElseIf Me.Cells(lis - 1, col - 1) <> "" Then
            lis = lis - 1
        End If
    ElseIf col = 5 Then
        If Me.Cells(lis - 1, col - 1) <> "" Then lis = lis - 1
    End If
    Me.Rows(lig + 1 & ":" & lis - 1).Hidden = True
    Cancel = True
End Sub

Un léger aménagement : ligne 1145, col. D, E, F : le mot FIN (police à blanc pour le masquer). Si tu étends, tu recules les "FIN" à la fin !

(Et si tu dépasses 32000 lignes tu passes toutes les variables en Long (remplacer % par &)).

Cordialement.

Bonjour

Ma contribution

Dans le code j'ai placé la dernière ligne à 2000 - à changer si plus grand

Bonjour ,

Merci à vous deux pour votre contribution.

Cela fonctionne exactement comme je le souhaitai

Par contre étant donné le nombre de ligne que ma feuille comporte , pensez vous qu'il est possible d'ajouter une function de recherché sur la feuille ? Du genre , si je tape un mot ou un nombre , toutes les lignes comportant ce mot s'affiche ?

Bonjour,

A-priori pas de raison de ne pouvoir le faire...

Un point à préciser : la recherche porte-t-elle toujours sur un éléments final (colonne G) ou peut-elle porter sur un élément intermédiaire ?

(L'idée est qu'en cherchant dans la colonne G on est sûr de trouver [sauf élément inexistant], si on ne cherche que sur un "final" le résultat et unique, et on peut suivre tous les niveaux précédents pour l'afficher ; dans le cas d'un niveau intermédiaire, on élimine ce qui vient après pour n'ouvrir que jusqu'au niveau. Cela ne change pas grand chose à la façon d'opérer, mais cela permet de cadrer sur ce qu'on veut en verrouillant s'il y a lieu ce qu'on ne veut pas...)

Cordialement.

La recherche devrait porter sur les colonnes "G" ou "H" uniquement ( étant donné que la colonne "G" contient deja les informations des colonnes precedents)

Ok ! Bonne idée ta méthode d'affichage complet... ! J'ai donc déjà rajouté un bouton pour masquer en utilisant le même principe.

(NB- Je devrais être ailleurs en ce moment, mais tu bénéficies du fait que le taux d'embouteillage actuel à l'endroit où je devais me rendre est dissuasif !)

A suivre.

je reviens !

De D à G on a des mentions hiérachisées, on peut donc suivre la hiérarchie et opérer l'ouverture des niveaux concernés par une inscription en G.

Par contre en H, on n'obéit plus à cette logique. Si on opère à partir de la valeur en G de la même ligne, on retrouve la logique... Mais il faut savoir si une même mention en H peut être répétée sur des niveaux divers situés diversement dans la base ou si on ne trouvera duplication que sur un même niveau (parmi les niveaux distingués en F).

Un filtrage sur la valeur de H est possible, mais fait disparaître tous les niveaux (avec procédure qui devient plus complexe pour les rétablir) et nécessité de défiltrer pour que l'ensemble refonctionne correctement ensuite.

Voilà un premier maillon, la recherche appliquée sur G. Cela semble bien fonctionner mais à toi de voir si cela répond...

Note (à toute fin utile) comment "détourner" une évènementielle pour l'utiliser hors évènement.

Pour la suite (voir comment modifier...) j'attends tes précisions sur H.

(NB- Pas de regret d'avoir fait ça... le niveau d'embouteillage n'a fait que s'agraver...)

Cordialement.

Merci d'avoir pris le temps de te pencher sur mon besoin ( au lieu d'attendre betement dans ta voiture , coincé dans les embouteillages !!)

Je pense que la recherché sur la colonne "G" est bien suffisante et fonctionne parfaitement.

Merci également pour l'ajout du bouton pour tout masque ( je n'y avais pas penser ).

Mon fichier est Presque terminé grace à votre aide

Ok !

J'ai à te remercier aussi car je n'aurais pas pensé à utiliser un filtre de cette façon ! Ingénieux.

Bonne continuation.

Rechercher des sujets similaires à "copie formule lignes"