Problème affichage graphique par macro

zougloukata Messages postés 3 Date d'inscription vendredi 6 juillet 2012 Statut Membre Dernière intervention 31 juillet 2012 - 25 juil. 2012 à 15:44
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 31 juil. 2012 à 12:00
Bonjour à tous,

J'essaie depuis un moment de générer un graphique automatique à chaque ouverture d'un classeur..
Mon problème est que j'arrive bien à chercher à partir d'un GetOpenFileName les fichiers dont j'ai besoin,mais lorsque je les sélectionne et que je récupère la plage de données que je souhaite,je n'arrive pas à créer un graphique..je vous poste mon code,peut-être me suis-je tromper dans ma procédure..
Ah oui,j'aimerais lancer ce code en macro personnelles;on m'a parlé de module et classe où je devais placer mon code,mais je ne m'y retrouve plus...
Je vous prie de bien vouloir me dépanner
Je vous remercie
Voici le code :

Private Sub CommandButton1_Click()
'@desactivation des alertes et du raffraichissement
Application.ScreenUpdating = False
Application.DisplayAlerts = False

'@suppression des anciennes feuilles et de l'ancien graphique
On Error Resume Next
For Each ws In Worksheets
If ws.Name <> "Graph" Then ws.Delete
Next
For Each chObj In Sheets("Graph").ChartObjects
chObj.Delete
Next chObj

'@initialisation
Dim oWB As Workbook 'la variable qui permet de gerer la feuille du fichier
Dim Filter, Caption As String
Dim last_row As Integer
'@Ouverture de la fenetre de selection de fichier

Filter = "Text files (*.meb),*.meb"
Caption = "Please Select a File "
SelectedFile = Application.GetOpenFilename(Filter, , Caption) 'recupere le chemin du fichier
Cells(1, 3).Value = "Graphique de " & Mid(SelectedFile, InStrRev(SelectedFile, "") + 1, Len(SelectedFile))
Set oWB = Workbooks.Open(SelectedFile) 'ouvre le fichier selectionné

'@copie des données

ThisWorkbook.Sheets.Add
ThisWorkbook.ActiveSheet.Name = "Data"
ThisWorkbook.ActiveSheet.Move After:=Sheets("Graph")
oWB.ActiveSheet.Cells.Copy
ThisWorkbook.Sheets("Data").Paste
oWB.Close False 'ferme le classeur sans sauvegarder les changements

'@génération du graphique
last_row = ThisWorkbook.Sheets("Data").UsedRange.Rows.Count
ThisWorkbook.Sheets("Graph").Activate
ThisWorkbook.Sheets("Graph").Shapes.AddChart.Select
ThisWorkbook.ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ThisWorkbook.ActiveChart.SetSourceData Source:=Sheets("Data").Range("B32:C" & last_row & ",G32:I" & last_row)

With ThisWorkbook.ActiveChart.Parent
.Left = 30
.Top = 70
.Width = 720
.Height = 400
End With
'@activation des alertes et du raffraichissement
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Excusez moi,pour les couleurs


Apprendre une chose aujourd'hui me rendra meilleur demain ;)

3 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
25 juil. 2012 à 21:20
Je ne sais pas si je comprends bien l'idée de macro personnelle, mais si tu veux créer une macro complémentaire qui te permettrait d'ajouter un bouton dans le programme Excel pour rouler une macro, tu peux créer cette macro dans un nouveau classeur, dans un module standard et tu sauvegardes le fichier sous... avec l'extension XLA ou XLAM selon la version d'Excel que tu possèdes. Tu trouveras l'extension dans le bas de la liste de choix d'extension presqu'à la fin.

Une autre méthode que j'aime moins, c'est de créer un fichier "personnel". Quand tu crées une macro en utilisant l'outil d'enregistrement d'Excel, tu as le choix de l'endroit où tu veux la sauvegarder. Si tu choisis un fichier personnel, Excel te créera ce fichier la première fois.

Tu écris ceci
ThisWorkbook.ActiveChart.SetSourceData Source:=Sheets("Data").Range("B32:C" & last_row & ",G32:I" & last_row)

Je ne suis pas certain, mais peut-être que tu devrais spécifier le programme pour la source (ThisWorkbook ou oWB)


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
zougloukata Messages postés 3 Date d'inscription vendredi 6 juillet 2012 Statut Membre Dernière intervention 31 juillet 2012
31 juil. 2012 à 11:02
Bonjour MPI,

Je te remercie pour ta réaction rapide.
Je n'arrive toujours pas à gérer cette macro...Que veux-tu dire exactement par spécifier le programme pour la source?

Je te remercie

Apprendre une chose aujourd'hui me rendra meilleur demain ;)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
31 juil. 2012 à 12:00
Oublie la Source. Je n'avais pas remarqué que l'autre fichier était déjà fermé...

Par contre, je vérifierais si last_row est bien ce que tu penses
Après cette ligne
last_row = ThisWorkbook.Sheets("Data").UsedRange.Rows.Count
mets ceci pour vérifier
MsgBox last_row

UsedRange n'est pas toujours fiable...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous