XL 2013 RollOver sur cell sans boucle peut on modifier le lien avec une liste(array en VBA)

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
suite a une réponse qui a été donnée sur le forum avec un lien vers youtube
j'ai testé l'astuce et elle fonctionne
cependant je me demande si l'on peut pas remplacer la liste de ref par un array dans la fonction
en effet
voila l'astuce
  1. je fait une liste en A2:A8( j'en ai fait un tableau structuré mais c'est pas obligé)
  2. je vais prendre une cellule ailleurs et je vais lui donner le nom de Ref_cel
  3. je vais prendre une autre plage de même dimension que ma liste ayant les même valeurs
  4. dans la première cellule de cette plage je vais y mettre cette formule =SIERREUR(LIEN_HYPERTEXTE(getvalCel(B2));B2) et je l’étends sur les 7 lignes de cette plage
  5. dans un module standard je lui met cette fonction
VB:
Public Function getvalCel(nom_cellule As Range)
Range("Ref_Cel").Value = nom_cellule.Value
End Function

j'ajoute une mise en forme conditionelle à cette plage
1693920423995.png


et voila le resultat
demo.gif


donc sa fonctionne
j'ai bien l'impression que même si dans cette plage de reception ce n'est pas des liens , c'est bel et bien le fait qu'il y est la fonction lienhypertext qui fait le repeat et donc fait office d'event mouse move

deux questions

1° peut on dans ce contexte dans la fonction par exemple remplacer la plage liste originale par un array dans la fonctions
moyennant des modifs dans la formule utilisant l'indexage par la fonction ligne() par exemple sur un array

2° et remplacer la cellule D1 par un name
 

Pièces jointes

  • roll over sur cell.xlsm
    14.8 KB · Affichages: 12
Dernière édition:

RyuAutodidacte

XLDnaute Impliqué
o
ben ta capture ne me parle pas donc heu.....
ok
Sur la feuille LIST, j'ai les données des jours fériés qui sont calculés via des formules selon l'année indiqué :
1694172270343.png

En F1 de la feuille LIST j'ai un nom de champ "AN" afin de récupérer l'année des feuilles nommées de l'année correspondante :

1694172636394.png


1694172466352.png


Pour éviter de refaire le tableau des jours fériés pour chaque feuille/année, j'update l'année avec la formule :
VB:
=SIERREUR(LIEN_HYPERTEXTE("";GetAnnee());"ACTIVÉS")
et
VB:
Function GetAnnee()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> ActiveSheet.Name And ws.Name <> "LIST" Then
            ws.Range("E1:G1").Interior.Color = -1
            ws.Range("G1").Font.ColorIndex = 2
        Else
            Range("E1:G1").Interior.Color = 65535
            Range("G1").Font.ColorIndex = 3
            Names("AN").Value = [A2].Value
        End If
    Next
    'MsgBox "UPDATE DES JOURS FERIÉS"
End Function

permettant la mise en forme dans les différentes feuilles et de valider l'update :

1694172937005.png

qui diffère de :
1694172984565.png


Je peux dupliquer la feuille 2024 et la renommer en 2025 et updater les jours fériés, rien qu'en passant la souris surle faux lien de la case "ACTIVÉS" en G1 (le texte est en Blanc)
1694173470838.png

Pour l'activer et faire apparaître tous les jour fériés de l'année de la feuillle :
1694173558896.png

Voilà …

C'est plus clair … ?
 

TooFatBoy

XLDnaute Barbatruc
Je peux dupliquer la feuille 2024 et la renommer en 2025 et updater les jours fériés, rien qu'en passant la souris surle faux lien de la case "ACTIVÉS" en G1 (le texte est en Blanc)
Dupliquer une feuille rien qu'en passant sur le lien, c'est sûrement très pratique, mais ça me semble plutôt dangereux car tu risques de te retrouver avec des dizaines de feuilles en quelques secondes...
 

RyuAutodidacte

XLDnaute Impliqué
Dupliquer une feuille rien qu'en passant sur le lien, c'est sûrement très pratique, mais ça me semble plutôt dangereux car tu risques de te retrouver avec des dizaines de feuilles en quelques secondes...
Bonjour @TooFatBoy ;)
j'ai jamais dit que je dupliquer la feuille via une function personnelle
je ne fais que ceci :
VB:
Function GetAnnee()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> ActiveSheet.Name And ws.Name <> "LIST" Then
            ws.Range("E1:G1").Interior.Color = -1
            ws.Range("G1").Font.ColorIndex = 2
        Else
            Range("E1:G1").Interior.Color = 65535
            Range("G1").Font.ColorIndex = 3
            Names("AN").Value = [A2].Value
        End If
    Next
    'MsgBox "UPDATE DES JOURS FERIÉS"
End Function

L'année passe pas assez vite (surtout en début d'année) pour dupliquer la feuille toutes les 5 mn (surtout en début d'année) 🤣 😜;)

Edit : je l'ai spécifier avec le gras :
1694177010767.png
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
j'ai jamais dit que je dupliquer la feuille via une function personnelle
C'est ceci qui me l'a fait croire :
Je peux dupliquer la feuille 2024 et la renommer en 2025 et updater les jours fériés, rien qu'en passant la souris sur le faux lien de la case "ACTIVÉS" en G1 (le texte est en Blanc)

Mais si en réalité tu ne dupliques pas la feuille, ça me semble plus sage. D'autant que, comme tu dis, l'année ne passe pas si vite que ça 😅, même si au fur et à mesure qu'on vieilli les années passent de plus en plus vite (tu verras...). ☹️



En voyant ta macro, le camarade Toulonnais va te dire que ça ne sert à rien de faire des modifications dans des feuilles autres que celle affichée. 😉
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
En voyant ta macro, le camarade Toulonnais va te dire que ça ne sert à rien de faire des modifications dans des feuilles autres que celle affichée.
oui
par ce que l'on parle de mouse over c'est donc sur ce qui est affiché à l’écran que l'effet doit etre fait

et non
ça de ces changement si il en découle d'autre calculs
donc j’attends de voir la finalité ; bien sur autre que celle dont on parle depuis le début
car travailler sur X feuille doit être une nécessité

reste que l'exercice de style est amusant ;)
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri