Se connecter avec
S'enregistrer | Connectez-vous

Grahique : mise à jour des données automatique

Dernière réponse : dans Programmation
Partagez

Bonsoir à tout le forum.

J'ai besoin d'un coup de main.

Je vous explique mon projet.

J'ai deux classeurs.

Dans le premier il faut saisir des données dans 4 colonnes (nom-intervention réalisé-Durée de l'intervention-Cout total de l'intervention) ensuite ces données doivent être archivé dans le deuxième classeur. La ligne de 4 cellules est copier dans un tableau sans écraser les précédents archivages. Ensuite un graphique doit se créer avec comme donnée la dernière colonne.

J'arrive à faire ça mais mon problème c'est qu'à chaque archivage c'est un nouveau graphique qui se crée. J'aimerais que le graphique se mette à jour en ajouter dans ses données la dernière colonne.

Pouvez vous m'aider ?

Voilà mon code :

  1. Option Explicit
  2.  
  3. Sub Archiver_historique_correctif()
  4.  
  5. Dim valeur As String
  6. Dim wkB As Workbook
  7. Dim MaFeuille As Worksheet
  8. Dim x As Range
  9.  
  10. valeur = Range("D3").Value
  11.  
  12. 'Ouvrir le classeur archive
  13.  
  14. Set wkB = Workbooks.Open(ThisWorkbook.Path & "\\" & valeur & ".xlsm")
  15. Set x = wkB.Worksheets("historique_corrective").Cells(Rows.Count, "B").End(xlUp)
  16.  
  17. 'Ôter la protection du classeur archive
  18.  
  19. wkB.Unprotect Password:="1234"
  20.  
  21. 'Ôter la protection de toutes les feuilles
  22.  
  23. For Each MaFeuille In Worksheets
  24. MaFeuille.Unprotect Password:="1234"
  25. Next
  26.  
  27. 'Copier la ligne historique - Sélectionner la feuille - Sélectionner la dernière cellule vide - Coller
  28.  
  29. ThisWorkbook.Sheets("historique_correctif").Range("B5:E5").Copy
  30. wkB.Sheets("historique_corrective").Select
  31. x(2, 1).Select
  32. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  33. :=False, Transpose:=False
  34.  
  35. 'Créer un nouveau graphique
  36.  
  37. Range("E5:E" & [E65000].End(xlUp).Row).Select
  38. ActiveSheet.Shapes.AddChart.Select
  39. ActiveChart.SetSourceData Source:=Range("E5:E" & [E65000].End(xlUp).Row)
  40. ActiveChart.ChartType = xlLineStacked
  41.  
  42. 'Sauvegarder le classeur archive
  43.  
  44. wkB.Save
  45.  
  46. 'Fermer le classeur archive
  47.  
  48. wkB.Close
  49.  
  50. End Sub


Voilà mes deux classeurs : 2 classeurs

En attendant vos réponses.

Cordialement.

Kewan.

  • kewan a édité ce message
  • zeb a édité ce message
  • zeb a édité ce message
  • kewan a édité ce message

Salut,
Ohlala!

Ne donne que des extraits de code, ça t'évitera de nous transmettre des mots de passe ;) 
Ne donne pas de lien vers des classeurs pleins de macros. Je les supprime. Trop dangereux !

Lignes 14 et 15, tu nous prouves que tu sais utiliser des objets précis. Fais-le dans le reste du code. Ces select qui traînent partout sous du plus mauvais effet.

A la création de ton graphique, donne-lui un nom. Et sers-t-en.
Si le graphique existe déjà, utilise-le. Sinon, crée-le :
  1. Dim ws_histcorr As Worksheet
  2. Dim rg_der As Range
  3. Dim sh As Shape
  4. Dim sh_histcorr As Shape
  5.  
  6. Set ws_histcorr = wkB.Sheets("historique_corrective")
  7. Set rg_der = ws_histcorr.Cells(Rows.Count, "E").End(xlUp)
  8.  
  9. Set sh_histcorr = Nothing
  10. For Each sh In ws_histcorr.Shapes
  11. If sh.Name = "sh_histcorr" Then Set sh_histcorr = sh
  12. Next
  13.  
  14. If sh_histcorr Is Nothing Then
  15. Set sh_histcorr = ws_histcorr.Shapes.AddChart
  16. sh_histcorr.Name = "sh_histcorr"
  17. sh_histcorr.ChartType = xlLineStacked
  18. End If
  19.  
  20. sh_histcorr.SetSourceData Source:=ws_histcorr.Range("E5", rg_der)
  • zeb a édité ce message
  • zeb a édité ce message

Bonjour Zeb merci pour ton coup de main.

Je n'arrive pas à faire fonctionner ta macro.

J'ai changé :
Ligne 7 rg_der en rw_der

Ligne 14 Name:="sh_histcorr" en Name="sh_histcorr" sinon il me dit argument nommé introuvable.

La macro bloque à la ligne 16

  1. Dim ws_histcorr As Worksheet
  2. Dim rw_der As Range
  3. Dim sh As Shape
  4. Dim sh_histcorr As Shape
  5.  
  6. Set ws_histcorr = ThisWorkbook.Sheets("Feuil1")
  7. Set rw_der = ws_histcorr.Cells(Rows.Count, "E").End(xlUp)
  8.  
  9. Set sh_histcorr = Nothing
  10. For Each sh In ws_histcorr.Shapes
  11. If sh.Name = "sh_histcorr" Then Set sh_histcorr = sh
  12. Next
  13.  
  14. If sh_histcorr Is Nothing Then
  15. Set sh_histcorr = ws_histcorr.Shapes.AddChart(Name = "sh_histcorr")
  16. sh_histcorr.ChartType = xlLineStacked
  17. End If
  18.  
  19. sh_histcorr.SetSourceData Source:=ws_histcorr.Range("E5", rg_der)


Je ne sais pas comment faire.

J'ai un autre problème ma colonne de données se complète au fur et à mesure de l'archivage mais les cellules inférieures elles contiennent des formules.

Comment faire pour que la sélection de données ne soit plus comprise entre E5 Et la dernière cellule non vide mais entre E5 et la dernière cellule contenant un chiffre ?

Cordialement.

Kewan.

Bonjour zeb.

Pas de soucie je suis déjà bien content de trouver de l'aide, merci.

Je n'arrive toujours pas à faire fonctionner la macro.

Au premier lancement la macro bloque à la ligne 17. Un graphique est bien créé mais en bâton (comme un xlColumnClustered), il porte bien le nom de sh_histcorr

Au deuxième lancement la macro bloque à la ligne 20 et le graphique n'est pas mis à jour.

Peut être que je fais quelque chose de pas bien quand j’insère ta macro dans la mienne.

Salut,

D'abord, sache que je n'ai pas forcément Excel sous la main quand je publie.
Ce que je propose est donc à étudier, pas à copier/coller.

Ensuite, je n'ai pas forcément la même version que toi. Version que tu ne proposes pas, soit dit en passant.

Aide-toi de l'enregistreur de macro pour voir comment d'une part créer un graphique, d'autre part en changer la source.
Puis factorise tout ça en séparant ce qui est de la création, de la modification ou des deux.
Posez votre question