Excel - afficher le contenu d'une cellule
Résolu
mic13710
Messages postés
1087
Date d'inscription
Statut
Membre
Dernière intervention
-
mic13710 Messages postés 1087 Date d'inscription Statut Membre Dernière intervention -
mic13710 Messages postés 1087 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Dans un tableau excel 2003, je souhaiterais lorsque je déplace le curseur dans une cellule afficher sous forme de commentaire le contenu d'une autre cellule.
Je sais comment faire pour mettre une image en commentaire, mais pour une cellule, je sèche. Je ne sais même pas si c'est possible.
Si quelqu'un a une solution (simple ou en vba), je suis preneur.
D'avance merci.
Dans un tableau excel 2003, je souhaiterais lorsque je déplace le curseur dans une cellule afficher sous forme de commentaire le contenu d'une autre cellule.
Je sais comment faire pour mettre une image en commentaire, mais pour une cellule, je sèche. Je ne sais même pas si c'est possible.
Si quelqu'un a une solution (simple ou en vba), je suis preneur.
D'avance merci.
A voir également:
- Excel afficher le contenu d'une cellule dans une autre
- Aller à la ligne dans une cellule excel - Guide
- Déplacer une colonne excel - Guide
- Excel cellule couleur si condition texte - Guide
- Bloquer une cellule excel - Guide
- Liste déroulante excel - Guide
2 réponses
Bonjour,
une autre proposition :
Ne marche que pour les colonnes jusqu'à AZ (BA, etc, posent un problème sûrement inutile à traiter ?)
Une formule du type =Feuil1!B4&"toto" ou =Feuil1!B4+12 sera sans commentaire.
Si la formule change le commentaire évolue ou est supprimé.
CommentaireAuto.xls
eric
EDIT: fichier mis à jour et complété grace aux remarques et apports de mic 13710
une autre proposition :
Private Sub Worksheet_Change(ByVal Target As Range) MajCommentaire Target End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MajCommentaire Target End Sub Sub MajCommentaire(Target) ' commentaire auto Dim shComment As Worksheet, lig As Long Set shComment = Worksheets("Feuil1") ' à adapter Target.ClearComments If Left(Target.Formula, Len(shComment.Name) + 3) = "=" & shComment.Name & "!B" Then If IsNumeric(Mid(Target.Formula, Len(shComment.Name) + 4)) Then lig = Mid(Target.Formula, Len(shComment.Name) + 4) Target.AddComment Target.Comment.Visible = False Target.Comment.Text Text:=shComment.Cells(lig, 5).Value End If End If End Sub
Ne marche que pour les colonnes jusqu'à AZ (BA, etc, posent un problème sûrement inutile à traiter ?)
Une formule du type =Feuil1!B4&"toto" ou =Feuil1!B4+12 sera sans commentaire.
Si la formule change le commentaire évolue ou est supprimé.
CommentaireAuto.xls
eric
EDIT: fichier mis à jour et complété grace aux remarques et apports de mic 13710
Bonjour,
Je ne sais pas si c'est exactement cela mais voici une proposition.
Insérer en VBA dans le code associé à la feuille dans laquelle on souhaite avoir ce comportement, une macro du type :
Dans cet exemple on suppose que l'on veut en commentaire de la cellule B3 le texte qui se trouve dans la cellule A1.
Le code de la macro est donc activée chaque fois que la cellule A1 est modifiée.
A+
Je ne sais pas si c'est exactement cela mais voici une proposition.
Insérer en VBA dans le code associé à la feuille dans laquelle on souhaite avoir ce comportement, une macro du type :
Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then Range("B3").Comment.Text Text:=Range("A1").Value End If End Sub
Dans cet exemple on suppose que l'on veut en commentaire de la cellule B3 le texte qui se trouve dans la cellule A1.
Le code de la macro est donc activée chaque fois que la cellule A1 est modifiée.
A+
Salut Pilas et merci pour ta réponse.
Je n'ai pas encore essayé mais j'y vois deux problèmes dans mon application :
1- j'ai 150 cellules à surveiller
2- je fais des classements sur ces 150 cellules et donc elles changent de place alors que les cellules contenant les commentaires sont toujours à la même place.
Je m'explique.
Pour simplifier, j'ai un fichier avec 2 feuilles.
Sur la première feuille se trouvent listées dans un tableau les 150 lignes de données.
Dans la colonne B se trouvent les noms simples et dans la colonne E les descriptions détaillées correspondantes.
Sur la deuxième feuille j'ai des liens vers les 150 cellules de la colonne B (noms simples) sur lesquels j'opère des classements selon différents critères.
Afin de ne pas avoir à changer à chaque fois de feuille pour consulter la description associée à un nom simple, je souhaiterais pouvoir la faire apparaître sous forme de commentaire directement en posant la souris sur le nom simple (ou au pire, en cliquant dessus).
Il faut donc associer ce commentaire à la cellule correspondante dans la première feuille.
Par exemple : Feuille1 cellule B15 (nom simple), cellule E15 (détail), la cellule de la feuille 2 comportant la formule "=Feuille1!B15" dont la position peut varier selon le classement doit avoir un commentaire toujours associé au contenu de la cellule E15 de la feuille1.
Donc le seul élément de la feuille 2 qui peut renvoyer vers la bonne cellule de la feuille 1 est la formule "=Feuille1!B15".
Pour info, les classements se font sur la même colonne.
Crois-tu qu'en développant à partir de "Sub Worksheet_Change" on puisse réaliser ce que je souhaite ?
Je n'ai pas encore essayé mais j'y vois deux problèmes dans mon application :
1- j'ai 150 cellules à surveiller
2- je fais des classements sur ces 150 cellules et donc elles changent de place alors que les cellules contenant les commentaires sont toujours à la même place.
Je m'explique.
Pour simplifier, j'ai un fichier avec 2 feuilles.
Sur la première feuille se trouvent listées dans un tableau les 150 lignes de données.
Dans la colonne B se trouvent les noms simples et dans la colonne E les descriptions détaillées correspondantes.
Sur la deuxième feuille j'ai des liens vers les 150 cellules de la colonne B (noms simples) sur lesquels j'opère des classements selon différents critères.
Afin de ne pas avoir à changer à chaque fois de feuille pour consulter la description associée à un nom simple, je souhaiterais pouvoir la faire apparaître sous forme de commentaire directement en posant la souris sur le nom simple (ou au pire, en cliquant dessus).
Il faut donc associer ce commentaire à la cellule correspondante dans la première feuille.
Par exemple : Feuille1 cellule B15 (nom simple), cellule E15 (détail), la cellule de la feuille 2 comportant la formule "=Feuille1!B15" dont la position peut varier selon le classement doit avoir un commentaire toujours associé au contenu de la cellule E15 de la feuille1.
Donc le seul élément de la feuille 2 qui peut renvoyer vers la bonne cellule de la feuille 1 est la formule "=Feuille1!B15".
Pour info, les classements se font sur la même colonne.
Crois-tu qu'en développant à partir de "Sub Worksheet_Change" on puisse réaliser ce que je souhaite ?
Je n'ai pas encore regardé si mon exemple peut se généraliser à ton cas mais mon premier reflexe dans le cas décrit est plutôt l'utilisation de RECHERCHEV.
Par exemple si ton libéllé court se trouve en colonne A (de la feuille2) tu peux mettre automatiquement dans une autre colonne de la feuille 2 la formule suivante (en ligne1) puis en copiant vers le bas :
ainsi, si tu fais des tris sur ta colonne A, la description ramenée par la formule RECHERCHEV sera toujours la bonne.
A+
Par exemple si ton libéllé court se trouve en colonne A (de la feuille2) tu peux mettre automatiquement dans une autre colonne de la feuille 2 la formule suivante (en ligne1) puis en copiant vers le bas :
=RECHERCHEV(A1;Feuil1!$B$1:$E$150;4;FAUX)
ainsi, si tu fais des tris sur ta colonne A, la description ramenée par la formule RECHERCHEV sera toujours la bonne.
A+
Merci Pilas pour ton aide. Je connais bien ces fonctions de recherches matricielles mais ce n'est pas ce que je cherche.
C'est un commentaire que je souhaite afficher et non effectuer la copie d'une cellule dans une autre.
La solution qu'eriiic propose ci-dessous me semble plus se rapprocher de mon besoin car c'est réellement le détail sous forme de commentaire qui s'affiche.
Je vais donc creuser dans cette direction.
Merci encore d'avoir consacré de ton temps pour me venir en aide.
C'est un commentaire que je souhaite afficher et non effectuer la copie d'une cellule dans une autre.
La solution qu'eriiic propose ci-dessous me semble plus se rapprocher de mon besoin car c'est réellement le détail sous forme de commentaire qui s'affiche.
Je vais donc creuser dans cette direction.
Merci encore d'avoir consacré de ton temps pour me venir en aide.
Ouah ! Ca c'est un beau code !
Merci beaucoup pour ta proposition, elle marche au poil pour associer les commentaires avec les cellules.
J'aurais pensé qu'il y avait une fonction d'excel pour faire cela, mais s'il faut en passer par du vba, pourquoi pas !
J'ai donc copié et adapté ton code a mon projet.
J'ai ensuite limité la zone d'application aux seules cellules concernées en rajoutant les lignes suivantes dans les Sub Worksheet :
If Target.Row >= 10 And Target.Row <= 159 And Target.Column = 2 Then
MajCommentaire Target
End If
Puis j'ai fait des essais, et j'ai rencontré quelques problèmes.
Tout d'abord, les cellules sur lesquelles doivent s'appliquer les commentaires sont protégées (j'avais oublié de le préciser), et même si j'autorise les commentaires (DrawingObjects:=False), la macro plante. Elle ne fonctionne que si j'ôte la protection sur la feuille. Franchement, je ne souhaite pas déprotéger cette feuille pour que les commentaires puissent fonctionner car les utilisateurs sont plutôt du genre "gros doigts" et sont tout à fait capables de me véroler le programme.
Ensuite, la macro plante aussi si je sélectionne plusieurs cellules. Il faudrait qu'elle ne soit active que pour un choix unique de cellule.
Enfin, la dimension par défaut du cadre des commentaires est insuffisante pour afficher tout le texte. Est-ce que la dimension du cadre peut-être variable en fonction du texte a y insérer (largeur fixe par exemple et hauteur variable par exemple), et sinon, est-il possible de définir une dimension du cadre dans la macro ?
Je ne suis pas un spécialiste en vba et je n'ai pas compris l'astuce entre les Sub Worksheet_Change(ByVal Target As Range) et Worksheet_SelectionChange(ByVal Target As Range).
Merci encore une fois pour ton aide.
Michel
les cellules sur lesquelles doivent s'appliquer les commentaires sont protégées
Au .protect ajoute le paramètre UserInterfaceOnly = True
Ca devrait suffire
la macro plante aussi si je sélectionne plusieurs cellules
Au début de la macro principale ajoute :
if target.cells.count >1 then exit sub
la dimension par défaut du cadre des commentaires est insuffisante
Après le .addcomment ajoute :
Target.Comment.Shape.Width = 200 'largeur
Target.Comment.Shape.Height = 100 'hauteur
A toi de trouver les valeurs qui te vont bien.
Quant à régler la hauteur.... amuse toi à trouver le coefficient qui va bien pour Height en fonction de la longueur de la chaine ;-)
Worksheet_Change(ByVal Target As Range)
Fabrique ou supprime le commentaire sur une édition de la cellule, qu'il apparaisse dès la saisie de la formule sans avoir besoin de sélectionner une autre cellule pour revenir sur celle qui doit avoir le commentaire.
Worksheet_SelectionChange(ByVal Target As Range).
Fabrique ou supprime le commentaire sur sélection de la cellule : pour ne pas t'obliger à revalider toutes les formules déjà existante. Le commentaire se met lorsque tu la sélectionnes.
Ou bien tu vides une plage, les commentaires restent : tu peux les enlever en cliquant sur chaque cellule.
eric
Tout d'abord merci pour ta patience et tes explications.
J'ai continué à travailler sur le code avec les infos de ton dernier message et voila ce qu'il est devenu :
J'ai supprimé le "Private Sub Worksheet_Change(ByVal Target As Range)" car toutes mes cellules sont déjà renseignées par les formules de manière permanente et protégée.
J'ai donc supprimé aussi la vérification de la formule puisqu'inutile (If Left(Target.Formula, Len(shComment.Name) + 3) = "=" & shComment.Name & "!B" Then)
J'ai par contre gardé le "If IsNumeric" car j'ai une cellule dans le range qui n'a pas de formule (que du texte) et n'a pas de commentaire attaché.
J'ai finalement été obligé de désactiver/réactiver la protection car la macro plantait toujours. Pour info, j'avais déjà le" UserInterfaceOnly:=True" dans ma macro Sub Workbook_Open().
Enfin, j'ai dû rajouter une vérification du contenu de la cellule contenant le texte du commentaire (If shComment.Cells(lig, 5) > 0 Then) car une cellule vide plantait la macro.
Tout ceci fonctionne à merveille grâce a tes explications.
Dernier point sur lequel je bute encore en tant que newbie : je voudrais passer la taille des caractères à 10 pour plus de lisibilité. J'ai essayé ".Font.size = 10" et ".Shape.Font.Size = 10" dans le "With Target.Comment", mais je me fais jeter. As-tu une solution à me proposer ?
L'instruction a rajouter dans le "With Target.Comment" est la suivante :
J'en ai profité pour travailler sur les dimensions automatiques et la présentation des commentaires.
Après quelques recherches sur la toile, voici mon code final :
Avec ce code, la hauteur des cadres des commentaires s'ajuste automatiquement en fonction de leur surface si leur largeur est supérieure à 300.
J'ai aussi arrondi les angles pour faire moins austère et le résultat est très convaincant.
Mon problème est donc résolu et tout fonctionne comme je le souhaitais.
Merci à Pilas31 pour son aide et surtout à Eric qui m'a donné toutes les bases nécessaires pour réussir mon projet.
Je le met quand même car ça ouvre d'autres perspectives : mettre en gras ou en couleur des mots etc
Et merci à toi pour le retour, pas mal pour un newbie (qui apprend vite) ;-)
eric