J'ai mis en place un outil d'aide à la décision correspondant à une cartographie dynamique qui fait référence à des indicateurs choisis via la formule INDEX (colonne x et y).
J'ai mis les cellules des colonnes x et y en forme conditionnelle afin d'avoir un comparatif de valeur, puis, j'ai copié-collé mes cellules en images liées sur ma carte afin d'avoir les informations essentielles, permettant une comparaison instantanée.
Seulement, les cellules de mon tableau correspondent à différents formats personnalisés ou non (Euros, m², m²/occ, Euros/occ...) et la fonction INDEX ne me renvoie que les valeurs dans les colonnes x et y et par conséquent sur ma carte dynamique aussi.
J'ai bien essayé de changer les formats des colonnes x et y, mais lorsque le loyer s'affiche en m², ca peut prêter à confusion... et la carte dynamique devient troublante. J'ai essayé de concatener, mais rien à faire. J'ai tenté de contourner en faisant un fonction SI "cette cellule est choisie; alors renvoie telle valeur + "format de la cellule"... là, ca marche, mais je perds la mise en forme conditionnelle, et donc un outil de comparaison facile et ludique.
Mon objectif : dans les colonnes x et y, j'aimerai pouvoir conserver la valeur + le format adéquat à la cellule de référence, ainsi que la mise en forme conditionnelle afin que la lecture sur la carte soit plus confortable et beaucoup moins sujette à confusion...
Je ne sais pas si c'est clair, mais vous trouverez en pièce jointe une version test de mon document... est ce que cela vous parait possible ?
Bonjour Cedricodelavega et Chris,
Vous ne trouvez rien parce que XL est magique !!!
Il existe un type de macro un peu particulière qui s'appelle macro événementielle. Elle se déclenche ... sur un événement.
Par exemple déclencher une macro sur un changement de valeur dans une cellule, un clic de souris, l'ouverture ou la fermeture d'un fichier.
Pour ces cas, le code est à mettre dans l'élément concerné, ouverture fermeture du classeur : la macro se met dans ThisWorkbook,
changement de valeur, clic souris la macro se met dans la feuille concernée. ( ici dan,s la feuille Carte dynamique indicateur immo )
A noter que ces macros doivent obligatoirement porter un nom particulier pour être compris d' XL. ( ici Worksheet_Change )
Donc dans...
Bonsoir cedricodelavega
Il faut rajouter la mise en forme dans la formule. Par ex en X2 : =INDEX(A2:W2;1;Liste_d_indicateurs) devient
=TEXTE(INDEX(A2:W2;1;Liste_d_indicateurs);"* # ##0 €""/""occ")
Attention aux guillemets, à cause du /.
et en Y2 :=INDEX(A2:W2;1;Liste_d_indicateurs_2) devient =TEXTE(INDEX(A2:W2;1;Liste_d_indicateurs_2);"* # ##0 €""/""\m²")
La mise en forme n'affecte pas la valeur et vous consevez votre MFC.
Bonjour tout le monde,
Cedricodelavega, j'ai dit une grosse sottise ci dessus.
Donc pour me faire pardonner, une PJ.
C'est pas très joli, mais je pense qu'il n'y a guère de solution.
Après avoir selectionné les deux indicateurs, vous cliquez sur Unités.
J'ai créé dans Indicateurs la liste des formats que je récupère avec Indicateurs comme index, et je copie les deux formats dans les colonnes X et Y.
Je sais, ce n'est pas très joli mais au moins votre carte a les bonnes couleurs.
Bonsoir cedricodelavega
Il faut rajouter la mise en forme dans la formule. Par ex en X2 : =INDEX(A2:W2;1;Liste_d_indicateurs) devient
=TEXTE(INDEX(A2:W2;1;Liste_d_indicateurs);"* # ##0 €""/""occ")
Attention aux guillemets, à cause du /.
et en Y2 :=INDEX(A2:W2;1;Liste_d_indicateurs_2) devient =TEXTE(INDEX(A2:W2;1;Liste_d_indicateurs_2);"* # ##0 €""/""\m²")
La mise en forme n'affecte pas la valeur et vous consevez votre MFC.
Bonsoir ou Bonjour,
En PJ un truc plus propre. Regardez si ça vous va.
J'ai un peu modifié les listes déroulantes pour les mettre dans des cellules.
Et j'ai un module Worksheet_Change qui gère les unités.
Bonjour tout le monde,
Cedricodelavega, j'ai dit une grosse sottise ci dessus.
Donc pour me faire pardonner, une PJ.
C'est pas très joli, mais je pense qu'il n'y a guère de solution.
Après avoir selectionné les deux indicateurs, vous cliquez sur Unités.
J'ai créé dans Indicateurs la liste des formats que je récupère avec Indicateurs comme index, et je copie les deux formats dans les colonnes X et Y.
Je sais, ce n'est pas très joli mais au moins votre carte a les bonnes couleurs.
Rebonsoir Sylvanu
Merci beaucoup pour votre nouveau message.
C'est exactement ce que je cherchais dans le résultat.
Est il possible d'automatiser une macro pour l'exécuter à chaque changement d'indicateur dans le menu déroulant ?
C'est ce que fais la dernière PJ.
C'est pour ça que j'ai remis les listes déroulantes dans les cellules ce qui permet de détecter un changement de valeur.
Sur ce, bonne nuit les petits !
C'est ce que fais la dernière PJ.
C'est pour ça que j'ai remis les listes déroulantes dans les cellules ce qui permet de détecter un changement de valeur.
Sur ce, bonne nuit les petits !
C'est ce que fais la dernière PJ.
C'est pour ça que j'ai remis les listes déroulantes dans les cellules ce qui permet de détecter un changement de valeur.
Sur ce, bonne nuit les petits !
Bonjour Sylvanu,
J'ai bien regardé le fichier carte dynamique TEST (V3) : je comprends techniquement les formules EQUIV et INDEX auxquelles vous faites appel, mais je ne vois pas de macro qui indique aux colonnes X et Y de rassembler valeur et format comme dans la version TEST 1.
Pourriez vous m'expliquer afin que je puisse comprendre svp ?
Merci encore
Bonjour Cedricodelavega et Chris,
Vous ne trouvez rien parce que XL est magique !!!
Il existe un type de macro un peu particulière qui s'appelle macro événementielle. Elle se déclenche ... sur un événement.
Par exemple déclencher une macro sur un changement de valeur dans une cellule, un clic de souris, l'ouverture ou la fermeture d'un fichier.
Pour ces cas, le code est à mettre dans l'élément concerné, ouverture fermeture du classeur : la macro se met dans ThisWorkbook,
changement de valeur, clic souris la macro se met dans la feuille concernée. ( ici dan,s la feuille Carte dynamique indicateur immo )
A noter que ces macros doivent obligatoirement porter un nom particulier pour être compris d' XL. ( ici Worksheet_Change )
Donc dans Feuil1 vous allez trouvez ceci :
VB:
' On arrive ici quand une valeur change dans la feuille'
Sub Worksheet_Change(ByVal Target As Range)
' On regarde si les modifications ont lieu dans les cellules qui nous interessent'
If Not Intersect(Target, Range("$Z$1:$Z$2")) Is Nothing Then
' Si oui alors on récupère le format et on l'applique aux colonnes X et Y
Range("X:X").NumberFormat = [Unité1]
Range("Y:Y").NumberFormat = [Unité2]
End If
End Sub
J'ai maché le travail à la macro en extrayant le format à appliquer ( Unité1 et Unité2 ), mais on aurait pu le faire par macro. C'est un choix.
Si vous changez la position des deux listes en Z1Z2 pensez à changer aussi le code, Range("$Z$1:$Z$2") en Range(x,y).
J'ai fait le code le plus simple possible.
Bonjour Cedricodelavega et Chris,
Vous ne trouvez rien parce que XL est magique !!!
Il existe un type de macro un peu particulière qui s'appelle macro événementielle. Elle se déclenche ... sur un événement.
Par exemple déclencher une macro sur un changement de valeur dans une cellule, un clic de souris, l'ouverture ou la fermeture d'un fichier.
Pour ces cas, le code est à mettre dans l'élément concerné, ouverture fermeture du classeur : la macro se met dans ThisWorkbook,
changement de valeur, clic souris la macro se met dans la feuille concernée. ( ici dan,s la feuille Carte dynamique indicateur immo )
A noter que ces macros doivent obligatoirement porter un nom particulier pour être compris d' XL. ( ici Worksheet_Change )
Donc dans Feuil1 vous allez trouvez ceci :
VB:
' On arrive ici quand une valeur change dans la feuille'
Sub Worksheet_Change(ByVal Target As Range)
' On regarde si les modifications ont lieu dans les cellules qui nous interessent'
If Not Intersect(Target, Range("$Z$1:$Z$2")) Is Nothing Then
' Si oui alors on récupère le format et on l'applique aux colonnes X et Y
Range("X:X").NumberFormat = [Unité1]
Range("Y:Y").NumberFormat = [Unité2]
End If
End Sub
J'ai maché le travail à la macro en extrayant le format à appliquer ( Unité1 et Unité2 ), mais on aurait pu le faire par macro. C'est un choix.
Si vous changez la position des deux listes en Z1Z2 pensez à changer aussi le code, Range("$Z$1:$Z$2") en Range(x,y).
J'ai fait le code le plus simple possible.
Rebonjour,
Je suis clairement mitigé entre un sentiment de frustration et d'admiration !!
Cela fait a peu près un an que j'ai vraiment mis les mains dans excel, et je vais de surprise en surprise quant aux possibilités de ce logiciel.
Merci beaucoup pour votre aide en tous cas
Re,
Juste pour enfoncer le clou, sachez que vous n'atteindrez jamais les limites d' XL.
On apprends chaque jour, au gré d'un fil, une nouvelle astuce, formule, graphique ou autre.
D'où le plaisir d'apprendre.
J'ai commencé avec XL97, j'en suis à XL2019 et il y a encore des trucs que je ne connais pas. Et c'est tant mieux.
Bonne journée.
Re,
Juste pour enfoncer le clou, sachez que vous n'atteindrez jamais les limites d' XL.
On apprends chaque jour, au gré d'un fil, une nouvelle astuce, formule, graphique ou autre.
D'où le plaisir d'apprendre.
J'ai commencé avec XL97, j'en suis à XL2019 et il y a encore des trucs que je ne connais pas. Et c'est tant mieux.
Bonne journée.