Intégrer "bouton" de redirection

Bonjour, je vous explique brièvement mon Excel,

Il consiste à calculer des données et à les afficher en page d'accueil, pour l'instant j'ai réussi à m'en sortir même si le code est un peu brouillon (je suis débutant en vba). Il suffit de modifier certaines cases pour effectuer les calculs et reporter les données la où elles doivent-être. Sur ma page d'accueil, dès qu'une donnée < 50 elle s'affiche, si elle repasse > 50 elle disparait.

J'aimerais que lorsqu'elle apparait, un bouton dans la case à sa gauche (colonne A) apparaisse pour qu'il renvoie l'utilisateur à l'opération correspondante dans la feuille Archive1 (pour l'instant). J'utilise beaucoup de coordonnées (i et j), par exemple pour reporter dans la feuille Archive1 de nouvelles opérations si elles ont étés rajoutés dans la feuille Machine1, peut être faudrait-il utiliser la même méthode ?

Je vous remercie en espérant avoir été clair.

3test.xlsm (60.04 Ko)

Je précise que je n'utilise pas select car je bascule beaucoup entre les feuilles dans les calculs, je crois que pour pouvoir sélectionner une case il faut être dans la feuille active.

Bonjour,

Si j'ai bien compris vous voulez retrouver l'opération de la feuille Accueil dans la feuille Archive1. Dans ce cas, dans le module de la feuille Accueil :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim LR As Long, REF$, C As Object
LR = Cells(Rows.Count, Target.Column).End(xlUp).Row
If Not Application.Intersect(Target, Range(Cells(12, Target.Column), Cells(LR, Target.Column))) Is Nothing And Target <> "" Then
    REF = Target
    With Worksheets("Archive1")
        .Activate
        Set C = .Rows("2:3").Find(REF)
        .Cells(2, C.Column).Activate
    End With
End If
End Sub

Ainsi lorsque vous double cliquez sur une opération de la colonne B, vous arrivez directement sur l'opération de la feuille Archive1. Ca évite les multiples boutons par opération qui alourdiraient vos feuilles. On pourrait également créer un bouton unique qui après sélection de l'opération puis activation de ce dernier, renverrai vers la position adéquate dans votre classeur.

PS : Je vous conseille de bien réfléchir à l'organisation de votre fichier car une machine par feuille, une archive par machine par feuille, vous allez démultiplier vos macros. Peut être inutilement.

A vous de réfléchir à votre besoin et d'élaborer le design correctement.

Cdlt,

Merci beaucoup,

Ca marche très bien et c'est mieux que d'ajouter des boutons, je vais essayer de comprendre le code, le seul problème c'est quand je clique sur le chiffre a droite du nom de l'opération.

Je pense aussi réorganiser mon code pour ne pas le faire 3x, est ce que dans ce cas je devrais le mettre dans ThisWorkbook en précisant a chaque ligne la feuille ?

Bonjour,

C'est là où mon PS est essentiel. Il faut bien que vous définissiez votre besoin en amont (la phase de design du fichier) car les procédures événementielles peuvent être capricieuses.

Posez vous les questions suivantes : quel est le but de ce fichier ? Ne pourrais-je pas travailler sur une feuille machine et une feuille archive unique ? Que souhaites-t-on tirer des données ? Sont-elles toutes à exploiter ? Quelle analyse est à réaliser ? Combien pourrais-je avoir de machine ?

Vous pouvez le mettre dans le module ThisWorkbook, récupérer le dernier caractère de la feuille sur laquelle a eu lieu le double clic, l'ajouter a la fin du mot "Archive" afin de reconstituer la bonne feuille.

Ainsi le code suivant est plus léger, que de recopier trois fois le même code. Je l'ai commenté afin que vous compreniez la logique derrière et puissiez l'adapter ou adapter votre fichier à ce code :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim LR As Long, REF$, C As Object
LR = Cells(Rows.Count, Target.Column).End(xlUp).Row 'Défini la dernière ligne de la plage cliquée
If Not Application.Intersect(Target, Rows("12:" & LR)) Is Nothing And Target <> "" Then 'Si le double clique se passe en dessous de la ligne 12 et que la cellule n'est pas vide
    If IsNumeric(Target) Then 'Si la valeur est numérique
        REF = Target.Offset(, -1) 'La ref est la colonne de gauche
        N = Right(Cells(2, Target.Column).Offset(, -1), 1) 'Le numéro est le dernière caractère de la cellule d'en tête de la colonne de gauche
    Else 'Sinon
        REF = Target 'On garde la REF comme étant la valeur cliquée
        N = Right(Cells(2, Target.Column), 1) 'Le numéro est le dernière caractère de la cellule d'en tête
    End If
    With Worksheets("Archive" & N) 'Avec la feuille Archive suivi du numéro de machine
        .Activate 'On l'active
        Set C = .Rows("2:3").Find(REF) 'On cherche la référence dans la ligne fusionnée 2:3
        .Cells(2, C.Column).Activate 'On active cette cellule
    End With
End If
End Sub

Cdlt,

PS : Je reste tout de même persuadé qu'une feuille Machine et une feuille Archive unique sont préférables. Mais c'est un tout autre sujet. Je vous laisse méditer.

Cdlt,

Merci beaucoup, les commentaires vont beaucoup m'aider.

Je vais réfléchir, je pense garder ce nombre de feuilles car le nombre d'opérations va grandement augmenter et il y a 3 machines, je réfléchirai à comment tout mettre dans ThisWorkbook pour que les calculs changent en fonction de la feuille (il va y avoir beaucoup de if ^^).

Rechercher des sujets similaires à "integrer bouton redirection"