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:

patricktoulon

XLDnaute Barbatruc
Bonsoir Laurent
pour repondre a ton MP au sujet des image de different type (picture ou activX)
et bien change la fonction pour celle ci
VB:
Public Function RollOverImage(rng As Range)
    dim cel
    Range("ref_Image").Value = Application.Caller.Value
    For Each cel In rng.Cells
        ActiveSheet.Shapes(cel.Value).Visible = False
        ActiveSheet.Shapes(Range("ref_Image").Text).Visible = True
    Next
End Function
et dans la formule a la place du "1" tu met l'address de la plage de cellule
Code:
=SIERREUR(LIEN_HYPERTEXTE(RollOverImage(B5:B11));"camion")
voila voila
comme tu vois c'est bien plus simple que ton truc
 

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
Re le Forum,
@patricktoulon , @TooFatBoy , @laurent950

Vous aviez vu l'ébauche, l'idée de la chose, appelez cela comme vous voulez 🤣 🤣 🤣

Et bien maintenant voilà le fichier.
Car franchement sans exemple précis on se demande vraiment à quoi pourrait servir le lien hypertexte en erreur … il y a peu je me posait encore la question en début du fil.
Mais j'aime bien donné un petit coup de main à mon petit Patrick qd je le peux (ce qui vrai aussi dans l'autre sens ;))
Bon arrêtons le texte voilà vraiment le fichier ;)

PS : il y a les vacances scolaire : 2022-2023 | 2023-2024 | 2024-2025
Vous pouvez dupliquer manuellement la feuille 2023 et la renommer manuellement en 2024 ou 2025
 

Pièces jointes

  • CP-RTT RyuAutodidacte.xlsm
    50.3 KB · Affichages: 7

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
Coucou @patricktoulon

Concernant le principe du fil il n y a que 2 Names JOURSFERIES et VAC
le reste et pour la gestion dans le fichier
En tout cas j'ai respecté le principe ;)
Et tout est automatique … tu dupliques la feuilles manuellement, tu l'as nomme 2024 est tout est ok directement … les bonnes dates, les bon jours fériés, les bonnes vacances des ZONES A|B|C

Note bien qq ch :

qd tu fais :
VB:
Function NomFunction()
    Names("NomName").Value = Application.Caller.Value
End function
Si tu as des instructions supplémentaires, celles-ci ne passe pas

Par contre si tu passes par une variable, tu peux y ajouter les actions que tu veux,
exemple avec mon code sur l'une de mes fonctions:
VB:
Function JOURSFER()
Dim JF$
    JF = Application.Caller.Value
    If JF = "AFFICHER" Then
        Names("AN").Value = [A2].Value
    Else
        Names("AN").Value = "X"
    End If
    Names("JOURSFERIES").Value = JF
End Function

des names il y en a beaucoup
je vais voir, je pense avoir moyen d'en supprimer avec qq modifications
une chose est sur c'est qu'il y a du boulot
yes je te le fais pas dire 🤣

Alors tu valides :D … ?
 

patricktoulon

XLDnaute Barbatruc
ben oui je valide
j'avoue ne pas trop comprendre le sens des tableaux avec ces lignes vides mais bon

pourrais tu remplacer les deux names référentiel par deux cells ref
car ça reste le moins lourd quand même
avec les names c'est excessivement lourd ( va savoir pourquoi)
 

patricktoulon

XLDnaute Barbatruc
re
regarde bien le curseur sur mon exemple quand j’arrête de bouger
demo.gif

et maintenant regarde le curseur dans ton exemple quand on arrête de bouger
bon on le vois pas trop clignoter mais il clignote à la mort
ma conclusion
soit il a des références circulaires soit tu fait un jump sub quelque part
demo.gif
 

TooFatBoy

XLDnaute Barbatruc
non la lourdeur je pense c'est les MFC et le fait que l'on fait appel a d'autre feuille
la feuille du tableau des fériés par exemple
Je ne disais pas ça par rapport au fichier de Ryu que je n'ai pas encore ouvert, mais juste par rapport à l'instruction LIENHYPERTEXT en elle-même.

Si tu regardes le nombre de fois où la fonction est appelée, tu vois que la fréquence est beaucoup plus élevées dans les cas que tu dis être plus lourds, que dans les cas que tu dis être plus légers.
 

TooFatBoy

XLDnaute Barbatruc
et maintenant regarde le curseur dans ton exemple quand on arrête de bouger
bon on le vois pas trop clignoter mais il clignote à la mort
ma conclusion
soit il a des références circulaires soit tu fait un jump sub quelque part
Non. À mon avis ça correspond à ce que je disais en #41 : ce que tu appelles "équivalent du mouse move" se produit même quand tu ne move pas la mouse.
 

Discussions similaires

Statistiques des forums

Discussions
312 381
Messages
2 087 830
Membres
103 667
dernier inscrit
datengo