Modification du texte dans les zones de texte d’un graphique (Microsoft Excel)
Don a plusieurs graphiques dans un classeur. Chaque graphique contient deux zones de texte avec les dates des données actuelles et les dates de mise à jour du graphique. Don aimerait changer tout le texte de ces zones de texte du graphique avec une macro mais ne connaît pas la technique appropriée pour effectuer la tâche.
Cela peut, bien sûr, être fait avec une macro, mais vous devez comprendre qu’il existe un moyen de le faire sans macro. Vous pouvez, si vous le souhaitez, lier ce qui est affiché dans une zone de texte au contenu d’une cellule. Cela signifie que vous pouvez rendre chacune de vos zones de texte « dynamique » de sorte que tout ce que vous avez à faire est de changer ce qui est dans la cellule associée. Cette cellule peut contenir une valeur de texte, une valeur numérique, une date ou une formule – cela n’a pas vraiment d’importance.
Voici comment réaliser cette technique: Sélectionnez la zone de texte que vous souhaitez associer à une cellule en cliquant dessus une seule fois. Les poignées familières doivent apparaître à l’extérieur de la zone de texte. Ensuite, dans la barre de formule, entrez une référence de cellule. Vous pouvez le faire en le saisissant comme ceci:
=$C$15
Cela lie le contenu de la zone de texte à ce qui se trouve dans la cellule C15. Vous pouvez également, si vous préférez, supprimer tout ce qui se trouve dans la barre de formule et, avec la barre de formule active, cliquer sur la cellule que vous souhaitez lier. L’adresse de la cellule doit apparaître dans la barre de formule. Appuyez sur Entrée et la tâche est terminée.
Maintenant, tapez quelque chose dans la cellule associée. Tout ce que vous tapez doit apparaître immédiatement dans la zone de texte.
Avant de pouvoir fournir des réponses potentielles liées aux macros, vous aurez besoin d’un peu d’informations sur le modèle d’objet d’Excel, accessible via VBA.
Il existe deux types de graphiques pouvant être contenus dans un classeur: une feuille de graphique et un graphique incorporé. Les feuilles de graphique sont représentées par un objet Chart et appartiennent à la collection Charts. Les graphiques incorporés, en revanche, sont représentés par un objet Chart qui appartient à la collection ChartObjects qui, à son tour, appartient à un objet de feuille de calcul.
Si vous placez une zone de texte sur une feuille de graphique réelle, vous pouvez y accéder de la manière suivante:
Sub FindTextBoxes1() Dim c As Chart Dim s As Shape Dim sMsg As String Dim sName As String For Each c In ActiveWorkbook.Charts For Each s In c.Shapes If s.Type = msoTextBox Then sMsg = s.TextFrame2.TextRange.Text sName = s.Name MsgBox "Text: " & sMsg, vbOKOnly, sName End If Next s Next c End Sub
Cette macro parcourt chaque feuille de graphique, puis chaque zone de texte de chaque feuille de graphique. Tout ce qui se trouve dans chaque zone de texte est ensuite affiché dans une boîte de message. Si vous souhaitez modifier le contenu d’une boîte de message, il vous suffit de définir la propriété Text de l’objet TextRange.
Les zones de texte sur les graphiques incorporés sont une autre histoire. Pourquoi? Parce qu’il est possible que la zone de texte ne fasse pas vraiment partie du graphique, mais fasse partie de la feuille de calcul. En d’autres termes, le « parent » de la zone de texte peut être le graphique incorporé ou la feuille de calcul.
Un bon moyen de savoir si la zone de texte fait partie du graphique incorporé consiste à créer une macro similaire à celle qui vient d’être présentée. Celui-ci, cependant, peut parcourir chaque graphique incorporé dans chaque feuille de calcul et trouver chaque forme (zone de texte) dans ce graphique.
Sub FindTextBoxes2() Dim w As Worksheet Dim c As ChartObject Dim s As Shape Dim sMsg As String Dim sName As String For Each w In ActiveWorkbook.Worksheets For Each c In w.ChartObjects For Each s In c.Chart.Shapes If s.Type = msoTextBox Then sMsg = "This text box is a child of the " sMsg = sMsg & "embedded chart" & vbCrLf sMsg = sMsg & "Text: " & s.TextFrame2.TextRange.Text sName = s.Name MsgBox sMsg, vbOKOnly, sName End If Next s Next c For Each s In w.Shapes If s.Type = msoTextBox Then sMsg = "This text box is a child of the " sMsg = sMsg & "worksheet" & vbCrLf sMsg = sMsg & "Text: " & s.TextFrame2.TextRange.Text sName = s.Name MsgBox sMsg, vbOKOnly, sName End If Next s Next w End Sub
Lorsque vous exécutez la macro, vous verrez une boîte de message pour chaque zone de texte qui est vraiment un enfant des graphiques incorporés. Ensuite, vous verrez une boîte de message pour toutes les zones de texte qui sont un enfant de la feuille de calcul. Comme dans la macro précédente, celle-ci vérifie que l’objet Shape est bien une zone de texte avant d’afficher des informations à son sujet. Cela est particulièrement important lorsque vous parcourez chaque forme dans la feuille de calcul, car tous les graphiques incorporés sur la feuille sont également considérés comme faisant partie de la collection Shapes.
Comme précédemment, pour modifier le texte contenu dans une zone de texte, il vous suffit de modifier la propriété Text de l’objet TextRange.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (13377) s’applique à Microsoft Excel 2007, 2010 et 2013.