VBA graphique, 2 solutions qui ne fonctionnent pas
Salut, je suis relativement débutant en Vba et je cherche à créer un fichier qui puisse traiter automatiquement des données tirées d'un fichier .txt, les séparer au bon endroit et en faire de jolis graphiques selon les besoins de l'utilisateur.
Pour le moment, l'ouverture et la mise en forme des données fonctionnent mais je bloque sur la dernière étape des graphiques; ça doit être utilisable par un inconnu et mes tableaux sont susceptibles de varier en taille donc ça doit pouvoir s'adapter au nombre de données en entrée.
Voila le code, il y'a un peu de choses glanées par ci par la et réarrangées : (voir commentaires après les "-->" sur le code qui ne sont bien sur pas dans le vrai)
Sub TracerGraph()
Dim O1 As Worksheet
Dim Graph As ChartObject
Dim FinGraph1 As Integer, Var As Integer
Set O1 = Worksheets("feuille1")
Var = 1 'premier tableau à vérifieI
Do While Not IsEmpty(Range("F" & Var))
Var = Var + 1
Loop
FinGraph1 = Var 'FinGraph1 est la fin des données de la 1ere plage
For Each Graph In O1.ChartObjects ' suppression d'anciens graph s'ils existent
If Graph.Name = "graph" Then
Graph.Delete
Exit For
End If
Next Graph
For i = 3 To FinGraph1 'trouver le début de la plage de données
If Cells(i, "E") <> "" Then
deb = i
Exit For
End If
Next i
--> méthode 1, fonctionne mais sort un tableau de valeurs plutôt qu'un graphique ??
Set Graph = O1.ChartObjects.Add(485, 135, 500, 300) 'création du graph
With Graph.Chart
.ChartType = xlLine
.SetSourceData Source:=Range("feuille1!$E" & deb & ":$F" & FinGraph1)
End With
Graph.Name = "graph"
--> méthode 2, ne fonctionne pas et affiche une erreur de syntaxe sur une ligne
Truc1 = "E" & deb
Truc2 = "F" & FinGraph1
Range(Truc1 & ":" & Truc2).Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
ActiveChart.SetSourceData Source:=Range("feuille1!" Truc1 & ":" & Truc2) --> erreur de syntaxe
End SubMerci d'avance !
(oui le fichier à un nom orignal mais comme ça je le retrouve facilement O:)
Bonjour,
Comme bien souvent
Nous ne pouvons rien faire sans fichier test (même anonymisés) car nous ne connaissons pas la structure de ce dernier.
Bonne soirée.
Autant pour moi, c'est fait !
Bonsoir,
Pour créer ton GRAPHIQUE sur la colonne F :
Sub GRAPH()
Dim GRAPH As Chart
With ActiveSheet
Set X = .Range("$E$3:$E$" & Cells(Rows.Count, 6).End(xlUp).Row)
Set Y = .Range("$F$3:$F$" & Cells(Rows.Count, 6).End(xlUp).Row)
Set OBJET = .ChartObjects.Add(48, 195, 400, 300)
Set GRAPH = OBJET.Chart
Set SERIE = GRAPH.SeriesCollection.NewSeries
SERIE.Values = Y
SERIE.XValues = X
SERIE.Name = .Range("F2").Value
GRAPH.ChartType = xlXYScatterSmooth
End With
End SubPar contre lors de ton import il faut absolument que les "." soient convertis en "," sinon Excel ne les reconnait pas en tant que nombre !
Si tu veux que je me penche plus longuement sur le sujet, dit moi quel est l'objectif final.
Bonne soirée
Merci de ta réponse !
Effectivement, il y'a ce "détail" je vais voir si c'est possible de mettre des , directement dans le fichier de données que j'importe (sauf s'il y'a une petite ligne magique qui permet de faire ça à l'importation haha)
Le but complet de ceci est de récupérer des données qui ont été acquises par différents capteurs et transmises sur une carte sd, dans un fichier .txt. Ces données peuvent être composées de 1 à 3 acquisitions qu'il faut donc différencier
On a une macro qui ouvre le fichier
Une qui sépare et réarrange ces données en 3 colonnes (on a laissé une ligne vide entre chaque acquisitions pour pouvoir facilement différencier les 3 )
Une qui trace les graphiques demandés en ajoutant une colonne E pour l'axe des abscisses (1, 2, 3...). Pour le moment c'est un graphique sur la colonne E/F pour tester mais à terme ça serait un graph par données...mais si déjà je sait comment en tracer un correctement, ça sera une belle avancée ^^
je joint le fichier de test que j'utilise
Bonjour,
Ci-contre la macro pour ton import modifié transformant les . en , et les textes en nombres :
Sub OuvrirFichier()
Dim feuille As Worksheet
Dim Nom As String
Dim Fichiertxt As Variant
Set feuille = ActiveSheet
MsgBox ("Sélectionnez le fichier à ouvrir, attention, vous allez écraser vos données")
Fichiertxt = Application.GetOpenFilename("Text Files (*.txt), *.txt") 'ouverture fichier texte
Columns("E:AE").ClearContents 'suppr
If Fichiertxt <> False Then
With feuille.QueryTables.Add(Connection:="TEXT;" & Fichiertxt, Destination:=Range("$F$1"))
.Name = Nom
.FieldNames = True
.PreserveFormatting = True
.SaveData = True
.AdjustColumnWidth = True
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
End If
For COL = 6 To 10
Columns(COL).Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Columns(COL).TextToColumns Destination:=Columns(COL), DataType:=xlDelimited
Next COL
End SubA toi de me dire la prochaine étape à laquelle tu souhaites t'attaquer !
nickel ! merci beaucoup, du coups effectivement les graphiques marchent mieux haha
La comme ça j'aurais tendance à dire que j'ai tous les outils pour faire ce que je veux mais je vais me pencher dessus plus en détail, si j'ai d'autres soucis, je reviendrais !
Pas de soucis !
Bonne soirée à toi.
Salut, je suis de retour (pour vous jouer un mauvais tour?)
J'ai encore une petite question; après avoir amélioré un peu mon fichier pour optimisé un peu le tout, j'en suis venu à me dire que si l'utilisateur pouvait choisir quel graphique il voulait ça serait plutôt intéressant; j'ai découvert l'userforme que j'ai commencé à tripoter mais j'en reviens à un petit soucis :
Mon idée était de stocker les données dans une deuxième feuille(données) pour ensuite créer tous les graphiques possibles (force du parcours 1,2 et 3, rythme cardiaque du parcours 1,2,3 etc etc...) et ensuite importer ceux demandés par l'utilisateur sur la feuille 1 (accueil) à travers les cases cochées de l'userform (à base d'un grand nombre de if pour traiter les différentes combinaisons possibles).
Ma question est donc : y'a t'il moyen de copier coller un graphique d'une page à l'autre ? et si oui, comment ?
(je remet les fichiers modifiés, pour info)
merci d'avance !
Petite update, le probleme de transfert de gaph d'une page à l'autre a été résolu mais maintenant c'est les Checkbox qui coincent (décidément)
Si je demande ceci
If CheckBox1.Value = True Then
Range("A26").Value = 2
End IfJ'obtient une Erreur '424' : Objet requis
Sauf que je vois partout ce même code pour utiliser une CheckBox alors...qu'est ce qui ne va pas?
Merci !
Bonjour,
Effectivement, c'était l'erreur de débutant.... Merci, grâce à tout ça j'ai pu terminer ce que je voulais faire !
Maintenant, je viens de voir qu'on pouvait afficher des cartes avec Bingmap directement dans Excel, ce qui m'intéresse beaucoup mais je ne suis pas sur qu'on puisse faire ce que je veux; Savez vous si il est possible de tracer un chemin sur cette carte (comme on pourrait le faire sur différent logiciels à partir d'un fichier en .gpx) à partir de données de latitude/longitude présente dans notre fichier? Si oui...comment? (toujours en Vba) C'est optionnel pour mon projet mais ça serait une sacré belle option en plus.
Mais ça serait peut être l'occasion de réouvrir un sujet vu qu'on s'éloigne vachement de mon problème initial non?
merci beaucoup !
Bonjour,
Je pense que oui, je ne suis pas en mesure de résoudre ce problème.
Bonne journée.
ça marche, merci encore pour ton aide !
je ferais un dernier post en expliquant ce que le fichier fait ce we des fois que qqun qui ait un projet similaire vienne voir la
halala, voila qu'un problème inconnu survient à la fin !
J'ai géré l'ouverture de mes graphiques grâce à des Case imbriqués, jusque la tout semblait bien aller mais il semblerait que, parfois, lorsque je lui demande tel graphique, il décide d'en ouvrir un autre aléatoirement. Pourtant le code me semble assez clair la dessus....
La solution que je vois la c'est que soit il ne comprends pas le moment ou je nomme chaque graphique après sa création
With ActiveSheet.ChartObjects
c11 = ActiveSheet.ChartObjects(11).Name
End Withsoit je n'ai pas bien saisis l'utilisation des Case.....
Select Case parcours1 'on selectionne le parcours 1
Case True
Select Case Force 'on selectionne la force
Case True
ActiveSheet.ChartObjects(c1).Activate 'permet de déplacer le graphique sur une autre feuille
ActiveChart.Location Where:=xlLocationAsObject, Name:="accueil"
Worksheets("Données").Activate
End Select
Select Case Cardiaque 'on selectionne le cardiaque
Case True
ActiveSheet.ChartObjects(c2).Activate
ActiveChart.Location Where:=xlLocationAsObject, Name:="accueil"
Worksheets("Données").Activate
End Select
Select Case Temperature 'on selectionne la température
Case True
ActiveSheet.ChartObjects(c3).Activates
ActiveChart.Location Where:=xlLocationAsObject, Name:="accueil"
Worksheets("Données").Activate
End Select
Select Case Humidite 'on selectionne l'humidité
Case True
ActiveSheet.ChartObjects(c4).Activate
ActiveChart.Location Where:=xlLocationAsObject, Name:="accueil"
Worksheets("Données").Activate
End Select
End SelectEt pour une obscure raison, lorsque j'importe un fichier gps à l'aide du bouton "ouvrir fichier Gps", le code que tu m'as fournis pour transformer les "." en "," ne fonctionne plus et transforme mes "." se changent en espaces alors que je l'ai littéralement copié collé en changeant les colonnes ou il s'applique .........(fin du module1)
y'a tout qui s'écroule, mon dieu
joint le programme mis à jour, voir dans userform1 et un document pour tester
up au secour, ce qui devait être terminé ne l'est pas et ça se révèle plus urgent que prévu
