Multi graph - images liées via gestionaire de nom

francoisremacle

XLDnaute Nouveau
Bonjour à tous,

Première MERCI à ceus qui prendront le temps de me lire et m'aider à résoudre mon "problème".

Ci joint le fichier Excel qui me pose problème; 3 onglets :

1- Tab content : liste non exhaustive des graphiques;
2- Print : onglet ou je souhaite à travers 4 listes déroulantes, sélectionner 4 graphiques à afficher / imprimer
3- TEAM: les graphiques : j'en ai mis 8 mais il y en aura +- 100 dans le futur

Mon but, est de pouvoir selectionner via les listes déroulantes 4 graphs à imprimer dans l'onglet "PRINT".
"Hé oui, si je dois imprimer à chaque fois les 100 graphs, notre chère planète ne va pas apprécier"

Je m'y suis pris de cette façon :
Dans l'onglet TEAM : j'ai nommé chaque graphique (zone, rectangle autour du graph porte un nom) : GRAPH_1, GRAPH_2 ->8
Dans l'onglet Print, j'ai inséré une zone de graphique lié.
Quand je selectionne dans la liste déroulante un nom d'un graphique, il l'affiche en dessous => OK, ca fonctionne.

Mon problème, c'est que l'image lié fait appelle au nom GRAPHS_SHOW qui est une fonction CHOISIR => lié à un index.
Donc si je veux insérer un graph ou changer l'ordre des graphiques : c'est la galère (impossible à gérer).
J'aimerais qu'à la place de la fonction choisir, je puisse directement faire appel à une fonction qui va selectionner mon graph.

Or si je lie mon graph lié à la cellule B13 (onglet PRINT), il ne va pas recherche mon graph (qui est dans la liste des noms) mais va afficher le nom : ex GRAPH 2.

En d'autre terme, comme faire appel dans la barre de calcul à un NOM (définir dans le gestionnaire de nom) lié à une cellule par ex (B13 en question) ?

Comment résoudre le problème ???

Question subsidiaire : est il possible de définir un lier un nom (zone définir = un graph) à une cellule => le nom de la zone pourrait être "modifié" => GRAPH 1 pourrait devenir GRAPH 3 uniquement en changeant le nom de la cellule ?

Si autre solution plus simple que celle que j'ai essayé d'expliquée, je suis prenant également !!!!

EN AVANCE : MERCCCCCCCCCCCCCCCCCCCCCCCCIIIIIIIIIIIIIII !!!!!

François.
 

Pièces jointes

  • PROB_GRAPH_LIES.zip
    109.2 KB · Affichages: 37

job75

XLDnaute Barbatruc
Re : Multi graph - images liées via gestionaire de nom

Re,

Voici le bon code dans la feuille "PRINT" du fichier joint :

Code:
Option Compare Text 'la casse est ignorée
Dim flag As Boolean 'mémorise la variable

Private Sub CommandButton1_Click() 'RAZ
flag = True
GRAPH_LIST = ""
[O2:O6].ClearContents
On Error Resume Next
Me.ChartObjects.Delete
flag = False
End Sub

Private Sub GRAPH_LIST_Change()
If flag Then Exit Sub
Dim a, i As Byte, nom$, c As ChartObject, test As Boolean
If [O5] <> "" Then MsgBox "Cliquez sur RAZ...": Exit Sub
If GRAPH_LIST.ListIndex = -1 Then Exit Sub
flag = True
Application.ScreenUpdating = False
On Error Resume Next
[O6].End(xlUp)(2) = GRAPH_LIST
Me.ChartObjects.Delete
a = Array("B7", "M7", "B30", "M30") 'adresses
For i = 0 To 3
  nom = [O2].Offset(i).Value
  For Each c In Sheets("TEAM").ChartObjects
    test = False
    test = c.Chart.ChartTitle.Text = nom
    If test Then
      c.Chart.ChartArea.Copy
      Range(a(i)).Select
      Me.Paste
      Exit For
    End If
  Next
Next
flag = False
[A1].Select
End Sub
Nota 1 : les graphiques sont repérés, recherchés et trouvés, par leur titre (ChartTitle).

J'ai donc modifié les graphiques où le titre se trouvait dans une TextBox.

Nota 2 : voir le nom ListeTab qui définit la liste de la ComboBox.

A+
 

Pièces jointes

  • PROB_GRAPH_LIES(1).xls
    448 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re : Multi graph - images liées via gestionaire de nom

Re,

Il est mieux de créer la liste de la ComboBox par sa propriété List :

Code:
Private Sub GRAPH_LIST_GotFocus()
On Error Resume Next
GRAPH_LIST.List = [ListeTab].Value
End Sub
Le fichier pèsera moins lourd.

Fichier (2).

A+
 

Pièces jointes

  • PROB_GRAPH_LIES(2).xls
    451 KB · Affichages: 27
Dernière édition:

job75

XLDnaute Barbatruc
Re : Multi graph - images liées via gestionaire de nom

Re,

Voici une autre méthode, qui évite de modifier les graphiques.

1) J'ai renommé GRAPH_1 GRAPH_2 etc... tous les graphiques de la feuille "TEAM" avec cette macro :

Code:
Sub Renommer()
Dim c As ChartObject, lig&, col%, cel As Range
For Each c In Me.ChartObjects
  lig = c.TopLeftCell.Row - 2
  col = c.TopLeftCell.Column - 1
  For Each cel In Cells(lig, col).Resize(2, 4)
    If cel.Value Like "GRAPH*" Then c.Name = cel: Exit For
  Next
Next
End Sub
Bien sûr le nom utilisé est celui qui est dans une des cellules au-dessus du graphique.

2) Le nouveau code de la feuille "PRINT" :

Code:
Dim flag As Boolean 'mémorise la variable

Private Sub CommandButton1_Click() 'RAZ
flag = True: GRAPH_LIST = "": flag = False
[O2:O6].ClearContents
On Error Resume Next
Me.ChartObjects.Delete
End Sub

Private Sub GRAPH_LIST_GotFocus()
On Error Resume Next
GRAPH_LIST.List = [ListeTab].Value
End Sub

Private Sub GRAPH_LIST_Change()
If flag Then Exit Sub
Dim a, i As Byte, j As Variant, c As ChartObject
If [O5] <> "" Then MsgBox "Cliquez sur RAZ...": Exit Sub
If GRAPH_LIST.ListIndex = -1 Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
[O6].End(xlUp)(2) = GRAPH_LIST
Me.ChartObjects.Delete
a = Array("B7", "M7", "B30", "M30") 'adresses
For i = 0 To 3
  j = Application.Match([O2].Offset(i).Value, [ListeTab], 0)
  Set c = Nothing
  Set c = Sheets("TEAM").ChartObjects([ListeTab].Cells(j, 0))
  If Not c Is Nothing Then
    c.Chart.ChartArea.Copy
    Range(a(i)).Select
    Me.Paste
  End If
Next
[A1].Select
End Sub
Fichier joint.

A+
 

Pièces jointes

  • PROB_GRAPH_LIES Autre méthode(1).xls
    465 KB · Affichages: 28

job75

XLDnaute Barbatruc
Re : Multi graph - images liées via gestionaire de nom

Bonjour le forum,

On peut ne pas sélectionner les cellules de destination :

Code:
If Not c Is Nothing Then
  c.Chart.ChartArea.Copy
  Me.Paste
  With Me.ChartObjects(c.Name)
    .Top = Range(a(i)).Top
    .Left = Range(a(i)).Left
  End With
End If
Fichier (2).

A+
 

Pièces jointes

  • PROB_GRAPH_LIES Autre méthode(2).xls
    457 KB · Affichages: 25

job75

XLDnaute Barbatruc
Re : Multi graph - images liées via gestionaire de nom

Re,

Fichier (3) avec la mise en page pour l'impression :

Code:
Me.PageSetup.PrintArea = Range(a(0)).Resize(2).Address
'------
    With Me.ChartObjects(c.Name)
      .Top = Range(a(i)).Top
      .Left = Range(a(i)).Left
      Me.PageSetup.PrintArea = Me.PageSetup.PrintArea _
        & ":" & .BottomRightCell.Address
      Me.PageSetup.CenterHeader = "&""Arial,Gras""&20GRAPHIQUE" _
        & IIf(Me.ChartObjects.Count > 1, "S", "")
    End With
A+
 

Pièces jointes

  • PROB_GRAPH_LIES Autre méthode(3).xls
    461 KB · Affichages: 28

francoisremacle

XLDnaute Nouveau
Re : Multi graph - images liées via gestionaire de nom

Bonjour Job 75,

Quel plaisir de te lire ! C'est encore mieux que ce que j'avais imaginer. Vraiment merci.

Confirme moi : donc la fonction ListeTab ne sert plus à rien dans la dernière version ?
Idem pour tous les noms GRAPH_1 , 2 -> end ? Vu qu'il va rechercher le nom du graph ?

Oui, j'abuse, j'abuse, j'abuse ! :)

Le top serait dans l'onglet print d'avoir un le visu du graph selectionné et de rajouter un bouton confirmant la selection => et donc qui permettrait de rajouter le graph à la selection à imprimer.
PQ : parce que si malaheureusment je selectionne le "mauvais" je suis obligé de faire un RAZ pour "recommancer" ma selection à imprimer. Est-ce possible ?

Mille fois merci job 75 !!!

Thanks. François.
 

job75

XLDnaute Barbatruc
Re : Multi graph - images liées via gestionaire de nom

Re,

Confirme moi : donc la fonction ListeTab ne sert plus à rien dans la dernière version ?
Idem pour tous les noms GRAPH_1 , 2 -> end ? Vu qu'il va rechercher le nom du graph ?

La plage [ListeTab] est utilisée 3 fois dans le code !!!

Idem pour tous les noms GRAPH_1 , 2 -> end ? Vu qu'il va rechercher le nom du graph ?

Ils ne servent à rien, on peut tous les supprimer.

Quant à la dernière question, onglet Fichier => Imprimer sur le fichier (3) de mon post #7.

A+
 

job75

XLDnaute Barbatruc
Re : Multi graph - images liées via gestionaire de nom

Re,

Bien que ce ne soit pas indispensable, j'ai ajouté le bouton SUP :

Code:
Private Sub CommandButton2_Click() 'SUP
Dim cel As Range, i As Variant
flag = True: GRAPH_LIST = "": flag = False
If Application.CountA([P2:P5]) Then
  Set cel = IIf([P5] = "", [P5].End(xlUp), [P5])
  i = Application.Match(cel, [ListeTab], 0)
  cel = ""
  On Error Resume Next
  Me.ChartObjects([ListeTab].Cells(i, 0)).Delete
End If
End Sub
Il supprime le dernier graphique copié.

De plus je cadre sur la dernière ligne des graphiques :

Code:
    Application.Goto Cells(Range(a(i)).Row, 1), True 'cadrage
Fichier (4).

A+
 

Pièces jointes

  • PROB_GRAPH_LIES Autre méthode(4).xls
    463.5 KB · Affichages: 27
Dernière édition:

francoisremacle

XLDnaute Nouveau
Re : Multi graph - images liées via gestionaire de nom

MAGNIFIQUE !!!! Bon il me qu'à dupliquer l'onglet TEAM car j'ai 4-5 onglets différents sur base du type de graphs que je souhaite monter (financier, opérationnel, organizationnel, etc ...).
Je dois donc concerver le format de l'onglet TEAM, rajouter mes graphs, copier le code et lié les noms des cellules à mon onglet Tab of content.

Mais last question : est ce sur base du nom du graph, il ira le chercher dans le "bon" onglet ?

Thanks !
 

job75

XLDnaute Barbatruc
Re : Multi graph - images liées via gestionaire de nom

Re,

S'il y a plusieurs feuilles sources :

1) le nom de chaque graphique doit être unique pour toutes les feuilles

2) modifier ainsi le code de la macro GRAPH_LIST_Change :

Code:
j = Application.Match([P2].Offset(i).Value, [ListeTab], 0)
Set c = Nothing
Set c = Sheets("TEAM1").ChartObjects([ListeTab].Cells(j, 0))
Set c = Sheets("TEAM2").ChartObjects([ListeTab].Cells(j, 0))
'---etc... avec les autres feuilles sources---
Fichier (5).

A+
 

Pièces jointes

  • PROB_GRAPH_LIES Autre méthode(5).xls
    471 KB · Affichages: 25

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 655
Messages
2 111 604
Membres
111 217
dernier inscrit
aladinkabeya2