3 votes

Comment sélectionner des données et dessiner un graphique à l'aide d'un bouton dans Excel ?

Dans mon classeur Excel (c'est-à-dire mon fichier), j'ai par exemple sept feuilles (Lun, Mar ... Soleil) de températures.  Ces données sont enregistrées pour toute la journée à une fréquence fixe.

Je veux maintenant créer un outil permettant de visualiser facilement ces données de séries chronologiques.

Mon idée est la suivante : je crée une page, disons Index, qui contient la liste des noms de toutes ces feuilles ; il y a un objet graphique qui affiche les données de la feuille Mon par défaut, et un bouton ou une liste déroulante qui me permet de remplacer Mon par n'importe quel nom (qui correspond à la feuille), et de rafraîchir le graphique pour afficher les données correspondantes.

Comment dois-je aborder cette question ? Je ne suis qu'un utilisateur très basique d'Excel, mais je suis prêt à apprendre cette compétence.

1voto

Scott Points 20468

Puisque vous ne nous avez pas donné d'informations détaillées sur la façon dont vos feuilles sont disposées, Je vais supposer que vous avez des temps dans les cellules A2:A25 et les températures dans les cellules B2:B25 sur chacune de vos feuilles quotidiennes, comme ceci :

Input data for Monday, Tuesday and Wednesday

Sur votre feuille d'index, entrez

  • En A1 , "Jour".  (Il s'agit simplement d'une étiquette ; comme vous l'avez montré dans votre image du résultat souhaité).
  • En B1 votre liste déroulante des jours de la semaine.
  • En J1 , "Time". (Il s'agit simplement d'une étiquette, et elle est facultative).
  • En K1 , "Temp".  (Il s'agit simplement d'une étiquette, et elle est facultative).
  • En L1 , =B1 & " Temp" .  Ce sera le titre du graphique.
  • En J2:J25 les heures 00:00 à 23:00.  Ou, si certaines feuilles ont des valeurs différentes sur l'axe des X (par exemple, si certains jours vont de 00:30 à 23:30), entrez

    \=IF(INDIRECT($B$1&"!A"&ROW())<>"", INDIRECT($B$1&"!A"&ROW()), "")

    sur J2 et glisser/remplir jusqu'à J25 (en supposant que vous avez toujours 24 points de données).  Il se peut que vous deviez formater manuellement ce format correctement (par exemple  _hh_:_mm_ ).  Cela permettra d'accéder aux données temporelles (c'est-à-dire, X -étiquettes d'axe) à partir de Column A de la fiche journalière indexée, en forçant les cellules vides à être traitées comme des blancs plutôt que des zéros. (voir Affichage d'un blanc lors de la référence à une cellule vide dans Excel ).

  • En K2 , =IF(INDIRECT($B$1&"!B"&ROW())<>"", INDIRECT($B$1&"!B"&ROW()), #N/A) .  Cela permettra d'accéder aux données de température de la colonne  B d'une des feuilles quotidiennes, en remplaçant les cellules vides par #N/A (la pseudo-valeur "non disponible"), ce qui aura pour conséquence que les points de données correspondants ne seront pas inclus dans le graphique.  Sélectionnez K2 et glisser/remplir jusqu'à K25 .  Les données de température pour le jour sélectionné s'affichent.

Maintenant, créez votre graphique basé sur J1:K25 de la fiche d'indexation.  Cliquez sur le titre du graphique, et tapez =Index!L1 dans la barre de formule.  Ensuite, il suffit de sélectionner le jour que vous voulez dans Index!B1 , et le graphique pour les données de ce jour apparaîtra automatiquement et immédiatement. - sans qu'il soit nécessaire d'appuyer sur un bouton.

Chart for Monday

Chart for Tuesday

Chart for Wednesday

Résultat de l'échantillon avec données manquantes :

Chart for Monday with missing data

Bien sûr, le choix des cellules est arbitraire.  J'ai utilisé Colonnes  J par le biais de  L pour pouvoir les placer sur la page avec le tableau.  Si vous préférez no voir les données sélectionnées, utilisez Colonnes  AA par le biais de  AC pour qu'ils soient hors de vue - et/ou cacher les colonnes auxiliaires.

0voto

Deepak Mourya Points 1

Il s'agit d'une macro vba, qui met à jour les données du graphique. Sans contrôle d'erreur et avec la plupart des noms pour une meilleure compréhension.

Private Sub SetChart(sheetChrt as worksheet, sheetData as worksheet)
 With sheetChrt.ChartObjects(1).Chart.SeriesCollection(1)
   .XValues = sheetData.Range("A1:A10") '
   .Values = sheetData.Range("B1:B10")
 End With
End Sub

Public Sub Test1()
 with Thisworkbook
 SetChart .Sheets("MyChartSheet"), .Sheets("MyDataSheet")
 end with
End Sub

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X