XL 2010 [résolu] Graphique flottant

Fave

XLDnaute Junior
Bonjour tout le monde,

J'ai besoin de vos lumières :

Je travaille sur un fichier dont les données sont nombreuses et ne s'affichent pas entièrement sur l'écran. Celles-ci sont associées à un graphique.
Je cherche donc à rendre ce graphique de type "secteur" flottant. En clair, je souhaite qu'il suive le mouvement en fonction d'où je me situe sur la feuille. Qu'il soit juste figé à une colonne.

J'ai trouvé de vieilles conversations traitants du sujet sur l'ami google mais les liens ne renvoient plus à rien.

Il semblerait que ce soit réalisable en VBA.

Auriez-vous une idée ?

Je n'ai pas mis d'exemple de fichier car je pense que ma question est assez claire. Si ce n'est pas le cas, faites le moi savoir !!! :)

Merci d'avance pour votre aide.

Cordialement,
 

job75

XLDnaute Barbatruc
Bonsoir Fave, CB60,

Voyez le fichier joint et cette macro très simple :
Code:
Sub Graphique_flottant()
Do
  If ActiveSheet.ChartObjects.Count Then ActiveSheet.ChartObjects(1).Top = ActiveWindow.VisibleRange.Rows(3).Top
  DoEvents
Loop
End Sub
Elle est lancée par la Workbook_Open dans ThisWorkbook.

A+
 

Pièces jointes

  • Graphique flottant(1).xlsm
    28.6 KB · Affichages: 52

Fave

XLDnaute Junior
Bonjour CB60 & job75,

J'ai retenu l'option de job75 qui correspond parfaitement à ce que je veux faire. Merci beaucoup. :)

Maintenant, j'aurai une dernière question : comme la macro s'enregistre dans le workbook, elle fonctionne sur toutes les feuilles.
J'en ai déduis que, si je veux qu'elle ne fonctionne que sur 1 ou plusieurs feuilles spécifiques, je dois l'écrire dans le code de ma ou mes feuilles choisies, non ?

Bonne journée,
 

Fave

XLDnaute Junior
Après avoir testé en condition, je me suis aperçu que la macro cesse de fonctionner quand je mets mes valeurs à jour (mon graphique se met à jour automatiquement en fonction de ce que je saisie, ajout ou modification...).

Comment puis-je remédier à cet aléa ?

Encore merci pour votre aide.

Bonne journée,
 

job75

XLDnaute Barbatruc
Bonjour Fave,
Maintenant, j'aurai une dernière question : comme la macro s'enregistre dans le workbook, elle fonctionne sur toutes les feuilles.
J'en ai déduis que, si je veux qu'elle ne fonctionne que sur 1 ou plusieurs feuilles spécifiques, je dois l'écrire dans le code de ma ou mes feuilles choisies, non ?
Vous n'y êtes pas du tout.

Avec ceci le graphique suivra si le classeur actif est le classeur contenant la macro et si le CodeName de la feuille est Feuil1 ou Feuil3 :
Code:
Sub Graphique_flottant()
Dim marche
marche = Array("Feuil1", "Feuil3") 'CodeName des feuilles concernées
Do
  If ActiveWorkbook.Name = ThisWorkbook.Name And ActiveSheet.ChartObjects.Count _
    And IsNumeric(Application.Match(ActiveSheet.CodeName, marche, 0)) _
      Then ActiveSheet.ChartObjects(1).Top = ActiveWindow.VisibleRange.Rows(3).Top
  DoEvents
Loop
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Graphique flottant(2).xlsm
    47 KB · Affichages: 27

Fave

XLDnaute Junior
Bonjour job75,

Je viens de mettre à jour la macro. Elle répond correctement sur les feuilles pour lesquelles je la voulais active mais j'ai toujours le même souci de mise à jour des valeurs.
Dès que je remplie mon tableau, elle cesse de fonctionner. D'ailleurs, dès que j'enregistre mon fichier, la macro ne fonctionne plus non plus...

Ai-je loupé quelque chose ?

Encore merci pour votre aide précieuse.

Bonne journée,
 

job75

XLDnaute Barbatruc
Re,

La boucle Do/Loop s'arrête quand on valide une cellule, pas quand on enregistre le fichier.

Pour la relancer on peut évidemment fermer et rouvrir le fichier.

Ou placer dans ThisWorkbook :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.OnTime 1, "Graphique_flottant"
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Graphique flottant(3).xlsm
    47.4 KB · Affichages: 55

job75

XLDnaute Barbatruc
Re,

Pour information on peut utiliser cette macro :
Code:
Sub Graphique_flottant()
Dim marche
marche = Array("Feuil1", "Feuil3") 'CodeName des feuilles concernées
If ActiveWorkbook.Name = ThisWorkbook.Name And ActiveSheet.ChartObjects.Count _
  And IsNumeric(Application.Match(ActiveSheet.CodeName, marche, 0)) _
    Then ActiveSheet.ChartObjects(1).Top = ActiveWindow.VisibleRange.Rows(3).Top
Application.OnTime Now + 1 / 86400, "Graphique_flottant" 'temporisation d'une seconde
End Sub
Mais c'est nettement moins performant, comparez ce fichier (3 bis) au fichier (3).

A+
 

Pièces jointes

  • Graphique flottant(3 bis).xlsm
    47.3 KB · Affichages: 41

Fave

XLDnaute Junior
Re,

Effectivement, j'étais passé un peu vite. Je m'en excuse. :)

Je viens de regarder et, pour être honnête, je ne vois pas de grande différence à l'exécution. Je préfère même la version "normale" par rapport à la 3 bis car je la trouve plus fluide.

Encore une fois, je vous renouvelle mes remerciement pour toute l'aide apportée et vous souhaite une excellente fin de journée.

Cordialement,
 

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 849
dernier inscrit
florentMIG