Tracer à partir des données d'un fichier texte contenu dans une variab

Tracer à partir des données d'un fichier texte contenu dans une variab - VB/VBA/VBS - Programmation

Marsh Posté le 10-07-2006 à 16:58:52    

:hello: c'est encore moi !! dur dur le VB au début (j'espère que c'est seulement au début  :pt1cable: )
 
Je cherche à tracer automatiquement un graphe à partir d'un nom de fichier contenu dans une variable !
Les données : le nombre est variable de 500 à plus de 2000 lignes contenus dans les colonnes A et B.
 
Sans vraible celà donne :
    Charts.Add
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.SetSourceData Source:=Sheets("sed1507_" ).Range("D3" )
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = "=sed1507_!C1"
    ActiveChart.SeriesCollection(1).Values = "=sed1507_!C2"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="sed1507_"
 
Mais avec la variable cela ne fonctionne plus :
 
    Charts.Add
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.SetSourceData Source:=Sheets(ActiveSheet.Name).Range("D3" )
    ActiveChart.SeriesCollection.NewSeries
  '  ActiveChart.SeriesCollection(1).XValues = "=sed1507_!C1" je ne vois pas comment faire celà avec une var ??
  '  ActiveChart.SeriesCollection(1).Values = "=sed1507_!C2"  je ne vois pas comment faire celà avec une var ??
    ActiveChart.Location Where:=xlLocationAsObject, Name:=ActiveSheet.Name
 
J'ai aussi essayé (cela crée bien le graphe mais il ne contient pas les bonnes données)
 
 Sub aff_graphe_cours()
Dim MonGraphe As Chart, MaPlage As Range
 
Set MaPlage = Worksheets(ActiveSheet.Name).Range(Cells(1000, 2), Cells(1000, 1))
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlXYScatter
MonGraphe.SetSourceData MaPlage, xlColumns
 
End Sub
 

Reply

Marsh Posté le 10-07-2006 à 16:58:52   

Reply

Marsh Posté le 10-07-2006 à 17:05:50    

tu cherches à mettre quoi dans ta variable ? des range ?
tu veux passer par un fichier, mais où interivendrait-il ?
cells(1000,2) te donnera B1000, ni C1 ni C2...
peux-tu expliciter ton pb un peu plus stp ? qu'attends tu de nous pour t'aider ?

Reply

Marsh Posté le 10-07-2006 à 17:11:16    

Je me suis mal exprimé : "sed1507_" est ma variable que je peux rapeller avec ActiveSheet.Name, et c'est aussi le nom du fichier "sed1507_.xls" Tu as raison mon Range déconne (je ne comprends pas trop à quoi sert range) mais ce qui est important c'est :
    ActiveChart.SeriesCollection(1).XValues = "=sed1507_!C1"
    ActiveChart.SeriesCollection(1).Values = "=sed1507_!C2"
 
Mon code complet est (la partie en gras ne fonctionne pas celle qui est sensée tracer un graphe) :  
Private Sub CommandButton1_Click()
 
 
  With Application.FileSearch
'D abord réinitialiser les critères (Attention : Le LookIn ne se réinitialise pas comme ça)
    .NewSearch
'Pour mettre à jour la liste des dossiers, au cas ou on viendrait de créer un nouveau dossier par VBA :
'    .RefreshScopes
'Dossier(s) de recherche :
    .LookIn = ActiveWorkbook.Path
   ' "C:\Documents and Settings\Jagwar\Bureau\stage IUEM\etalons mis ss la nvelle forme\ex\Fichiers excel"
'Fichiers à rechercher (J'ai essayé plusieurs formes "a*.php;C*.*" mais ça ne marche pas:
'.FileName = "*.*" recherche tous les fichiers
'.Filename = "C.php" recherche tous les fichiers qui contiennent c ou C quelque par dans leur nom, et qui se terminent par .php ou .PHP
    .Filename = "*_.xls"
'Le type de fichiers qu'on recherche. Ici, tous, et de toute façon, on a déjà filtré avec .FileName. Mais on peut par exemple indiquer msoFileTypeExcelWorkbooks qui va extraire tous les fichiers Excelé (XLA, XLT, XLS, XLW)
    .FileType = msoFileTypeAllFiles
'Tous les fichiers créés ou modifiés cette semaine :
 '   .LastModified = msoLastModifiedThisWeek
'On va rechercher dans les sous dossiers d'atelier et Toto :
'    .SearchSubFolders = True
'C est parti :
    .Execute
'Une boucle traditionnelle pour parcourir les fichiers trouvés. FoundFiles(Ctr) n'a pas de propriétés. Par exemple, pas question d'avoir le nom du fichier sans le dossier, ou même sa date de création (en tout cas par la méthode FoundFiles)
    For Ctr = 1 To .FoundFiles.Count
      Cells(Ctr, 1) = .FoundFiles(Ctr)
      Workbooks.OpenText Filename:=.FoundFiles(Ctr), Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
        :=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, Semicolon:= _
        False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array( _
        1, 1), Array(2, 1))
Charts.Add
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.SetSourceData Source:=Sheets(ActiveSheet.Name).Range("D3" )
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = ActiveSheet.Name!C1 'concatener les 2 ?
    ActiveChart.SeriesCollection(1).Values = ActiveSheet.Name!C2 'concatener les 2 ?
    ActiveChart.Location Where:=xlLocationAsObject, Name:=ActiveSheet.Name

    Next
  End With
   
End Sub

Message cité 1 fois
Message édité par jagwar le 10-07-2006 à 17:18:48
Reply

Marsh Posté le 10-07-2006 à 17:16:39    

jagwar a écrit :

Je me suis mal exprimé : "sed1507_" est ma variable que je peux rapeller avec ActiveSheet.Name, et c'est aussi le nom du fichier "sed1507_.xls" Tu as raison mon Range déconne (je ne comprends pas trop à quoi sert range) mais ce qui est important c'est :
    ActiveChart.SeriesCollection(1).XValues = "=sed1507_!C1"
    ActiveChart.SeriesCollection(1).Values = "=sed1507_!C2"


a ce moment passe par un  
ActiveChart.SeriesCollection(1).Values = Activeworkbook.Name &"_!C1"  
non ?

Reply

Marsh Posté le 10-07-2006 à 17:19:17    

arf merci je vais essayer !

Reply

Marsh Posté le 10-07-2006 à 17:24:04    

En fait celà plante déjà ici : ActiveChart.SetSourceData Source:=Sheets(ActiveSheet.Name).Range("D3" )  
 
Sheets(ActiveSheet.Name) semble ne pas fonctionner !

Reply

Marsh Posté le 10-07-2006 à 17:33:18    

simplifie par ActiveChart.SetSourceData Source:=ActiveSheet.Name.Range("D3" )  
après, je ne suis pas sûr que le seul D3 suffise pour ton datasource
 

Reply

Marsh Posté le 10-07-2006 à 17:37:27    

En fait j'ai fais un mode enregistrement sur un fichier que j'essaye de généraliser. donc le D3 je ne sais pas trop d'où il viens ! sur un autre essai le range est : Range("A1:B1400" )
Cela ne fonctionne pas sur ça : ActiveChart.SetSourceData Source:=ActiveSheet.Name.Range("D3" )  
erreur 424, objet requis ???


Message édité par jagwar le 10-07-2006 à 18:09:02
Reply

Marsh Posté le 10-07-2006 à 18:08:43    

oups, regarde avec  
 ActiveChart.SetSourceData Source:=ActiveSheet.Range("D3" )  

Reply

Marsh Posté le 11-07-2006 à 10:07:34    

ActiveChart retourne la feuille "Graphique" que tu viens de créer. Et ActiveSheet retourne aussi le nom de la feuille "Graphique".
 
La collection Sheets contient tous les onglets de ton classeur. (graphe et feuille)
La collection Worksheets ne contient que les feuilles de ton classeur
 
Il faut donc que tu conserves le nom de ta feuille avant de créer ton graph
VarFeuille=activesheet.name
après tu créés ton graphe et puis
ActiveChart.SetSourceData Source:=Sheets(VarFeuille).Range("D3" )


Message édité par Paul Hood le 11-07-2006 à 10:10:30
Reply

Marsh Posté le 11-07-2006 à 10:07:34   

Reply

Marsh Posté le 11-07-2006 à 14:30:22    

Merci ça fonctionne maintenant c'est la ligne :
ActiveChart.SeriesCollection(1).Values = VarFeuille & "_!C2"
erreur d'execution 1004
Impossible de définir la proprité values dans la classe series
Pourtant la ligne :
ActiveChart.SeriesCollection(1).XValues = VarFeuille & "_!C1"
passe bien ?????

Reply

Marsh Posté le 11-07-2006 à 14:37:14    

ton attribut values ne doit-il pas s'appliquer à un autre élément de ton chart ?
l'attribut Xvalues n'est pas le même que Values donc ca explik le bug, après je ne connais pas tous les attributs de SeriesCollection..

Reply

Marsh Posté le 11-07-2006 à 14:54:47    

je pense aussi que l'attribut values ne doit pas s'appliquer à cet élément de chart, mais je ne fais que reprendre que ce que le code a généré :
    ActiveChart.SeriesCollection(1).XValues = "=sed1503_!C1"
    ActiveChart.SeriesCollection(1).Values = "=sed1503_!C2"
avec sed103_ le nom de la feuille contenant les données !

Reply

Marsh Posté le 11-07-2006 à 15:10:15    

En fait ce code fonctionne :  
    ActiveChart.SeriesCollection(1).XValues = "=" & VarFeuille & "!C1"
    ActiveChart.SeriesCollection(1).Values = "=" & VarFeuille & "!C2"
 
 :bounce: !! MERCI BEAUCOUP A VOUS TOUS !!! :bounce:  :hello:
surtout à jpcheck et à Paul Hood


Message édité par jagwar le 11-07-2006 à 15:11:42
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed