Grahique : mise à jour des données automatique

  • Auteur de la discussion kewan
  • Date de début

kewan

Nouveau membre
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 :

Code:
Option Explicit

Sub Archiver_historique_correctif()

Dim valeur As String
Dim wkB As Workbook
Dim MaFeuille As Worksheet
Dim x As Range

valeur = Range("D3").Value

'Ouvrir le classeur archive

Set wkB = Workbooks.Open(ThisWorkbook.Path & "\\" & valeur & ".xlsm")
Set x = wkB.Worksheets("historique_corrective").Cells(Rows.Count, "B").End(xlUp)
        
'Ôter la protection du classeur archive
        
wkB.Unprotect Password:="1234"

'Ôter la protection de toutes les feuilles

For Each MaFeuille In Worksheets
MaFeuille.Unprotect Password:="1234"
Next

'Copier la ligne historique - Sélectionner la feuille - Sélectionner la dernière cellule vide - Coller

ThisWorkbook.Sheets("historique_correctif").Range("B5:E5").Copy
wkB.Sheets("historique_corrective").Select
x(2, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
'Créer un nouveau graphique
        
    Range("E5:E" & [E65000].End(xlUp).Row).Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("E5:E" & [E65000].End(xlUp).Row)
    ActiveChart.ChartType = xlLineStacked

'Sauvegarder le classeur archive

wkB.Save

'Fermer le classeur archive

wkB.Close

End Sub

[strike]Voilà mes deux classeurs : [/strike]

En attendant vos réponses.

Cordialement.

Kewan.

 

zeb

Modérateur
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 :
Code:
Dim ws_histcorr As Worksheet
Dim rg_der As Range
Dim sh As Shape
Dim sh_histcorr As Shape

Set ws_histcorr = wkB.Sheets("historique_corrective")
Set rg_der = ws_histcorr.Cells(Rows.Count, "E").End(xlUp)

Set sh_histcorr = Nothing
For Each sh In ws_histcorr.Shapes
    If sh.Name = "sh_histcorr" Then Set sh_histcorr = sh
Next

If sh_histcorr Is Nothing Then
    Set sh_histcorr = ws_histcorr.Shapes.AddChart
    sh_histcorr.Name = "sh_histcorr"
    sh_histcorr.ChartType = xlLineStacked
End If

sh_histcorr.SetSourceData Source:=ws_histcorr.Range("E5", rg_der)
 

kewan

Nouveau membre
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

Code:
    Dim ws_histcorr As Worksheet
    Dim rw_der As Range
    Dim sh As Shape
    Dim sh_histcorr As Shape
     
    Set ws_histcorr = ThisWorkbook.Sheets("Feuil1")
    Set rw_der = ws_histcorr.Cells(Rows.Count, "E").End(xlUp)
     
    Set sh_histcorr = Nothing
    For Each sh In ws_histcorr.Shapes
    If sh.Name = "sh_histcorr" Then Set sh_histcorr = sh
    Next
     
    If sh_histcorr Is Nothing Then
    Set sh_histcorr = ws_histcorr.Shapes.AddChart(Name = "sh_histcorr")
    sh_histcorr.ChartType = xlLineStacked
    End If
     
     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.
 

zeb

Modérateur
J'ai fait quelques petites corrections ;)
Excuse, mais je n'ai pas Excel à disposition pour vérifier :/
 

kewan

Nouveau membre
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.
 

zeb

Modérateur
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.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 005
Membres
1 586 388
Dernier membre
mery2005
Partager cette page
Haut