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 Sub

Merci 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 Sub

Par 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

11cartesd.txt (14.13 Ko)

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 Sub

A 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 !

13cartesd.txt (13.58 Ko)

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 If

J'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,

C'est normal tu as renomé ta CB (qui est l'objet, merci 3GB) parcours1 (Cf. image ci-contre) qui renvoie à une propriété de l'objet. CheckBox1 n'a plus d’existence en tant qu'objet.

Ton code devient donc :

If parcours1.Value = True Then
      Range("A26").Value = 2
End If
cb

Bonne journée.

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 With

soit 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 Select

Et 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

10gps.txt (1.29 Ko)
13cartesd2.txt (1.23 Ko)

up au secour, ce qui devait être terminé ne l'est pas et ça se révèle plus urgent que prévu

Rechercher des sujets similaires à "vba graphique solutions qui fonctionnent pas"