Problème création graphique plage variable

Résolu/Fermé
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017 - 15 juin 2017 à 12:46
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017 - 16 juin 2017 à 16:07
Bonjour,

Je rédige un nouveau post qui fait suite à mon précédent.
Je n'avais obtenue aucune réponse et entre temps j'ai réussi à avancer mais je suis maintenant bloqué pour la création du graphe avec la sélection de la plage de données.

Ma macro va chercher à l'aide de la méthode find, la dernière colonne utile pour réaliser mon graphe et descend jusqu'à l'avant dernière cellule non vide ce qui me permet de définir la dernière case de ma plage de données.

Or je souhaite maintenant définir la plage de la cellule A1 à ma dernière définit juste avant mais le code Range("A1:Lastcell") ne fonctionne pas, il me renvoie une erreur

Si vous pouviez me sortir de cette situation, merci de votre aide.

Fichier excel : http://www.cjoint.com/c/GFoiTTT3Uky

Sub graph()
'
' graphe Macro
'

'

Dim grph1 As Worksheet
Dim grph2 As Worksheet
Dim grph3 As Worksheet

Dim i As Integer
Dim y As Integer
Dim z As Integer


Dim Cpt As Integer
Dim Cpy As Integer
Dim Cpu As Integer
Dim CptSh As Integer
Cpt = 0
CptSh = Sheets.Count
For i = 1 To CptSh
If Sheets(i).Name <> "graphique phase 1" Then Cpt = Cpt + 1 Else Exit For
Next i

If Cpt = CptSh Then
Sheets.Add After:=Sheets("synthese")
ActiveSheet.Name = "graphique phase 1"
End If

Cpy = 0
CptSh = Sheets.Count
For y = 1 To CptSh
If Sheets(y).Name <> "graphique phase 2" Then Cpy = Cpy + 1 Else Exit For
Next y

If Cpy = CptSh Then
Sheets.Add After:=Sheets("graphique phase 1")
ActiveSheet.Name = "graphique phase 2"
End If

Cpu = 0
CptSh = Sheets.Count
For u = 1 To CptSh
If Sheets(u).Name <> "graphique phase 3" Then Cpu = Cpu + 1 Else Exit For
Next u

If Cpu = CptSh Then
Sheets.Add After:=Sheets("graphique phase 2")
ActiveSheet.Name = "graphique phase 3"
End If


Dim R1 As Range 'déclare la variable R1 (Recherche 1)
Dim R2 As Range 'déclare la variable R2 (Recherche 2)
Dim R3 As Range 'déclare la variable R2 (Recherche 3)
Dim R4 As Range 'déclare la variable R2 (Recherche 4)
Dim R5 As Range 'déclare la variable R2 (Recherche 5)
Dim R6 As Range 'déclare la variable R2 (Recherche 6)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim COL2 As Integer 'déclare la variable COL2 (COLonne 2)
Dim COL3 As Integer 'déclare la variable COL3 (COLonne 3)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim Lastcell As Range


Dim courbe1 As Range



Sheets("resultat").Select


Set R1 = Sheets("resultat").Rows(1).Find("Mph1", , xlValues, xlWhole)
If Not R1 Is Nothing Then 'condition : si au moins une occurrence est trouvée
COL = R1.Column 'définit la colonne COL de la première occurrence trouvée
DL = Sheets("resultat").Cells(Application.Rows.Count, COL).End(xlUp).Offset(-1, 0).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onget OND
End If 'fin de la condition

Set Lastcell = Cells(DL, COL)



Set courbe1 = Range("A1:Lastcell") ' la méthode range de l'objet global à échoué

'Lastcell me renvoie la valeur correspondante à ma dernière case voulue pour faire ma plage


Worksheets("graphique phase 1").Shapes.AddChart2(227, xlLineMarkers).Select
ActiveChart.SetSourceData Source:=Range("resultat!courbe1")


End Sub
A voir également:

9 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
15 juin 2017 à 14:05
Bonjour

Essaies ceci
DL = Sheets("resultat").Cells(Rows.Count, col).End(xlUp).Row - 1
Set Lastcell = Cells(DL, col)
Set courbe1 = Range("A1:" & Lastcell.Address)

Cdlmnt
1
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
15 juin 2017 à 15:02
Bonjour ccm81,

je viens d'essayer avec le code donné.
Une erreur intervient lors de la dernière ligne,
Je pense ne pas utiliser les bonnes formules pour créer mon graphique

Si vous pouviez m'indiquez la démarche à suivre, merci

Cordialement


Dim R1 As Range 'déclare la variable R1 (Recherche 1)

Dim COL As Integer 'déclare la variable COL (COLonne)

Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim Lastcell As Range


Dim courbe1 As Range


Sheets("resultat").Select
Set R1 = Sheets("resultat").Rows(1).Find("Mph1", , xlValues, xlWhole)
If Not R1 Is Nothing Then 'condition : si au moins une occurrence est trouvée
COL = R1.Column 'définit la colonne COL de la première occurrence trouvée
DL = Sheets("resultat").Cells(Application.Rows.Count, COL).End(xlUp).Offset(-1, 0).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onget OND

End If 'fin de la condition

Set Lastcell = Cells(DL, COL)
Set courbe1 = Range("A1:" & Lastcell.Address)



Worksheets("graphique phase 1").Shapes.AddChart2(227, xlLineMarkers).Select
Sheets("resulat").SetSourceData Source:=Range("resultat!courbe1") ' Erreur dernière ligne méthode Range de l'objet global a échoué


End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 15 juin 2017 à 15:10
Bonjour

Lorsque tu copies un code dans ton message, merci de le coller entre balise


j'ai omis de télécharger ton classeur
Dim Col As Byte, Dl As Integer
Dim Courbe1 As Range

With Sheets("resultat")
If Application.CountIf(.Rows(1), "Mph1") = 0 Then GoTo inconnu
Col = .Rows(1).Find(what:="Mph1", After:=.range("A1").Column
Dl = .Columns(Col).Find(what:="*", searchdirection:=xlPrevious).Row
Set Courbe1 = .Range(.Cells(1, 1), .Cells(Dl, Col))
End With
'la suite du code......

Exit Sub
'gestionaire errereur
inconnu:
MsgBox "mth1 inconnu", vbCritical

End Sub


Edit: 14h37

petites modif après consultation du classeur

Bonjour CCm excuse moi je n'avais pas rafraichi


 Michel
1
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
15 juin 2017 à 15:10
Bonjour michel_m ,

Désolé ce sera fait dorénavant merci.

A propos de votre message, pourquoi me recommandez vous de remplacer mon code par la votre ? Je débute sur VBA et j'imagine bien que mes macros crée à partir de code trouver sur le net sois horrible pour des habitués du codage VBA.

Je cherche simplement à comprendre ce qui ne va pas.

Merci de votre aide

Cordialement
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
Modifié le 15 juin 2017 à 15:13
ma proposition corrige tes erreurs: a toi de plancher un peu pour comprendre et progresser
0
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
15 juin 2017 à 16:01
J'ai rajouté l'Offset qui manquait sur ton code afin de bien avoir la bonne dernière cellule pour ma plage de données de mon graphe.

Mais j'obtiens la même erreur à la derniere ligne pour la création du graphe.

Je vois bien que mon code pour créer un graphe ne va pas et les lignes de codes utilisés par l'enregistreur de macro de ne vont pas non plus.

Est ce seulement le range qui ne va pas ou toute la structure du code concernant la création du graphe qui ne convient pas ?

Merci de ton aide
Cordialement


Dim Col As Byte, Dl As Integer
Dim Courbe1 As Range

With Sheets("resultat")
If Application.CountIf(.Rows(1), "Mph1") = 0 Then GoTo inconnu
Col = .Rows(1).Find(What:="Mph1", After:=Range("A1")).Column
Dl = .Columns(Col).Find(What:="*", searchdirection:=xlPrevious).Offset(-1, 0).Row
Set Courbe1 = .Range(.Cells(1, 1), .Cells(Dl, Col))
End With


Set Lastcell = Cells(Dl, Col)
Set Courbe1 = Range("A1:" & Lastcell.Address)
Worksheets("graphique phase 1").Shapes.AddChart2(227, xlLineMarkers).Select
Sheets("resultat").SetSourceData Source:=Range("courbe1") ' Erreur derniere ligne méthode Range de l'objet global a échoué

Exit Sub
'gestionaire errereur
inconnu:
MsgBox "mth1 inconnu", vbCritical

End Sub
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
15 juin 2017 à 16:56
Essaies ceci

Set Lastcell = Sheets("resultat").Cells(DL, COL)
Set courbe1 = Sheets("resultat").Range("A1:" & Lastcell.Address)
Sheets("graphique phase 1").Select
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=courbe1
ActiveChart.Location Where:=xlLocationAsObject, Name:="graphique phase 1"


> michel. ça va ? et aucun pb pour l'incruste, bien au contraire ...

Cdlmnt
1
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
16 juin 2017 à 11:02
Bonjour, ccm81

Merci beaucoup ! Ça marche !!

c'est parfait, me reste plus qu'à voir comment arranger les axes du graphiques et créer les deux autres graphiques restants.

Merci encore, je reviendrai sûrement vous sollicitez si je n'y arrive pas du tout.

Bonne journée
Cordialement,
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
16 juin 2017 à 15:28
tes plages sont déjà des "Range"
essaies ceci
Set courbe2 =Union(plage_valeur2, plage_AD)
1
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
Modifié le 16 juin 2017 à 15:37
c'est la même que celle que j'ai essayé juste au dessus non ?

Set courbe2 = Sheets("resulat").Union(plage_valeur2, plage_AD) 


Edit : à non ça marche en enlevant le sheets("resultat") ...
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
16 juin 2017 à 15:44
Eh oui ...
J'aurai certainement du écrire
tes plages sont déjà des "Range" de la feuille "resultat"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 juin 2017 à 08:11
Bonjour
offset s'applique à une cellule (range) et non à un entier (integer)

la ligne que je t'avais transmis donne la dernière ligne occupée mais si tu maintiens le retrait de cette dernière ligne
Dl = .Columns(Col).Find(What:="*", searchdirection:=xlPrevious).Row-1 


au besoin, fais une un essai avec les 2 manières dans une feuille d'un classeur avec des données dans une colonne

Salut CCM, ca va ca va malgré cette canicule (38-40°) ressentis dehors)

je te demande une astuce par MP. merci d'avance

0
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
16 juin 2017 à 10:49
Bonjour, michel_m

Merci de ton explication.

Donc après essai, ça fonctionne bien en remplaçant les dernières lignes de code pour la création du graphe donné par ccm81.

Merci beaucoup.
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
16 juin 2017 à 11:23
De rien,

Si c'est fini, peux tu mettre le sujet à résolu (en dessous du titre de ton premier message)

Bonne journée à tous
0
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
16 juin 2017 à 13:01
Malheuresement non, j'ai de nouveau un problème avec un Range ...
Pour mes graphiques suivant j'ai besoin des 4 premieres colonnes + d'une plage à l'intérieure du tableau.

Je pesnais donc utilisé un Union de mes deux Plage mais j'obtiens deja avant ça une erreur sur ma plage de données que j'ai voulu définir en prenant la première cellule et la dernière.


Set Lastcell2 = Sheets("resultat").Cells(DL2, COL2)
Set Firstcell = Sheets("resultat").Cells(1, COL).Offset(0, 1)
Set LastD = Range("D" & Rows.Count).End(xlUp)
Set plage_AD = Sheets("resultat").Range("A1:" & LastD.Address)
Set plage_valeur2 = Sheets("resultat").Range("Firstcell.Adress: & Lastcell2.Adress")
' Erreur plage_valeur2 = nothing
Set courbe2 = Sheets("resulat").Union(plage_valeur2, plage_AD)
Sheets("graphique phase 2").Select


Cordialement
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié le 16 juin 2017 à 14:51
Essaies ceci (tu concaténes tes deux adresses en les séparant par ":" - il y a 2 "d" à Address)
Set plage_valeur2 = Sheets("resultat").Range(Firstcell.Address & ":" & Lastcell2.Address) 


Cdlmnt
0
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
16 juin 2017 à 15:05
j'avais trouvé cette ligne de codes en cherchant un peu sur internet et finalement c'est la ligne du dessous qui ne va plus ...

Set courbe2 = Sheets("resulat").Union(plage_valeur2, plage_AD)



Même problème avec ce code là
Set Lastcell2 = Sheets("resultat").Cells(DL2, COL2)
Set Firstcell = Sheets("resultat").Cells(1, COL).Offset(0, 1)
Set LastD = Range("D" & Rows.Count).End(xlUp)
Set plage_AD = Sheets("resultat").Range("A1:" & LastD.Address)
Set plage_valeur2 = Sheets("resultat").Range(Firstcell, Lastcell2)
Set courbe2 = Sheets("resulat").Union(Range("plage_valeur2"), Range("plage_AD"))


Ces Range ça me rend dingue ...
0
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
16 juin 2017 à 15:42
Merci beaucoup de ton aide ccm81

Pareil à michel_m

Je posterais mon code en entier concernant ma macro si des personnes se retrouvent avec le même type de problème que moi.

' Il faut avouer que tous les autres post m'ont bien aidés pour réaliser une grande partie de ma macro aussi

Je marquerai comme résolu le sujet juste après

Encore merci,
Bonne journée
0
Wazzid Messages postés 14 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 16 juin 2017
16 juin 2017 à 16:07
Voici la totalité du code qui me permet de créer des graphes à partir d'un tableau de données

Avec pour chaque graphe des variables pour aller chercher sur la première ligne la colonne ou se trouve un certain texte et ainsi définir la plage de données correspondante au graphe voulu avec la première et dernière cellule.

Sub graph()
'
' graphe Macro
'

'

Dim grph1 As Worksheet 'déclare grph1 comme feuille excel
Dim grph2 As Worksheet 'déclare grph2 comme feuille excel
Dim grph3 As Worksheet 'déclare grph3 comme feuille excel

Dim i As Integer
Dim y As Integer
Dim z As Integer


Dim Cpt As Integer
Dim Cpy As Integer
Dim Cpu As Integer
Dim CptSh As Integer
Cpt = 0
CptSh = Sheets.Count
For i = 1 To CptSh 'Créée la feuille graphique phase 1 après la feuille resultat
If Sheets(i).Name <> "graphique phase 1" Then Cpt = Cpt + 1 Else Exit For 'si elle n'existe pas déjà
Next i

If Cpt = CptSh Then
Sheets.Add After:=Sheets("synthese")
ActiveSheet.Name = "graphique phase 1"
End If

Cpy = 0
CptSh = Sheets.Count
For y = 1 To CptSh
If Sheets(y).Name <> "graphique phase 2" Then Cpy = Cpy + 1 Else Exit For
Next y

If Cpy = CptSh Then
Sheets.Add After:=Sheets("graphique phase 1")
ActiveSheet.Name = "graphique phase 2"
End If

Cpu = 0
CptSh = Sheets.Count
For u = 1 To CptSh
If Sheets(u).Name <> "graphique phase 3" Then Cpu = Cpu + 1 Else Exit For
Next u

If Cpu = CptSh Then
Sheets.Add After:=Sheets("graphique phase 2")
ActiveSheet.Name = "graphique phase 3"
End If




Dim R1 As Range 'déclare la variable R1 (Recherche 1)

Dim COL As Integer 'déclare la variable COL (COLonne)

Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim Lastcell As Range


Dim courbe1 As Range


Sheets("resultat").Select
Set R1 = Sheets("resultat").Rows(1).Find("Mph1", , xlValues, xlWhole)
If Not R1 Is Nothing Then 'condition : si au moins une occurrence est trouvée
COL = R1.Column 'définit la colonne COL de la première occurrence trouvée
DL = Sheets("resultat").Cells(Application.Rows.Count, COL).End(xlUp).Offset(-1, 0).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onget OND

End If 'fin de la condition


Set Lastcell = Sheets("resultat").Cells(DL, COL)
Set courbe1 = Sheets("resultat").Range("A1:" & Lastcell.Address)
Sheets("graphique phase 1").Select
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=courbe1
ActiveChart.Location Where:=xlLocationAsObject, Name:="graphique phase 1"

ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Graphique 1").Height = 402.5196850394
ActiveSheet.Shapes("Graphique 1").Width = 688.8188976378
ActiveSheet.Shapes("Graphique 1").IncrementLeft -148.8
ActiveSheet.Shapes("Graphique 1").IncrementTop -101.4
ActiveChart.ClearToMatchStyle
ActiveChart.ChartStyle = 231
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).TickLabelSpacing = 1
ActiveChart.Axes(xlCategory).TickLabelSpacing = 100
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).MinimumScale = 0
ActiveChart.Axes(xlValue).MajorGridlines.Select
Selection.Delete

ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
ActiveChart.Axes(xlValue, xlPrimary).HasTitle = True
ActiveChart.Axes(xlValue).AxisTitle.Select
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Échauffement (k)"
Selection.Format.TextFrame2.TextRange.Font.Size = 20





Dim R2 As Range 'déclare la variable R1 (Recherche 2)

Dim COL2 As Integer 'déclare la variable COL (COLonne 2)

Dim DL2 As Long 'déclare la variable DL (Dernière Ligne2)
Dim Lastcell2 As Range
Dim Firstcell As Range ' déclare la variable Firstcell ( premiere cellule graphe 2)


Dim plage_valeur2 As Range
Dim courbe2 As Range
Dim plage_AD As Range
Dim LastD As Range

Sheets("resultat").Select
Set R2 = Sheets("resultat").Rows(1).Find("Mph2", , xlValues, xlWhole)
If Not R2 Is Nothing Then 'condition : si au moins une occurrence est trouvée
COL2 = R2.Column 'définit la colonne COL de la première occurrence trouvée
DL2 = Sheets("resultat").Cells(Application.Rows.Count, COL2).End(xlUp).Offset(-1, 0).Row 'définit la dernière ligne éditée DL de la colonne COL

End If 'fin de la condition


Set Lastcell2 = Sheets("resultat").Cells(DL2, COL2) ' Définit ma dernière cellule de ma plage de données
Set Firstcell = Sheets("resultat").Cells(1, COL).Offset(0, 1) 'Définit ma première cellle de ma plage de données
Set LastD = Range("D" & Rows.Count).End(xlUp) ' Va chercher la derniere case non vide de la colonne D
Set plage_AD = Sheets("resultat").Range("A1:" & LastD.Address) ' Définit ma plage constante des 4 premieres colonnes
Set plage_valeur2 = Sheets("resultat").Range(Firstcell, Lastcell2) ' définit ma plage de données à l'intérieur de mon tableau
Set courbe2 = Union(plage_valeur2, plage_AD) ' unifie les deux plages pour la plage de données à donner au graphe
Sheets("graphique phase 2").Select

Sheets("graphique phase 2").Select
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=courbe2
ActiveChart.Location Where:=xlLocationAsObject, Name:="graphique phase 2"

ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Graphique 1").Height = 402.5196850394
ActiveSheet.Shapes("Graphique 1").Width = 688.8188976378
ActiveSheet.Shapes("Graphique 1").IncrementLeft -148.8
ActiveSheet.Shapes("Graphique 1").IncrementTop -101.4
ActiveChart.ClearToMatchStyle
ActiveChart.ChartStyle = 231
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).TickLabelSpacing = 1
ActiveChart.Axes(xlCategory).TickLabelSpacing = 100
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).MinimumScale = 0
ActiveChart.Axes(xlValue).MajorGridlines.Select
Selection.Delete

ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
ActiveChart.Axes(xlValue, xlPrimary).HasTitle = True
ActiveChart.Axes(xlValue).AxisTitle.Select
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Échauffement (k)"
Selection.Format.TextFrame2.TextRange.Font.Size = 20


' 3eme graphe

Dim R3 As Range 'déclare la variable R1 (Recherche 3)

Dim COL3 As Integer 'déclare la variable COL (COLonne 3)

Dim DL3 As Long 'déclare la variable DL (Dernière Ligne3)
Dim Lastcell3 As Range
Dim Firstcell2 As Range
Dim COL_D As Range

Dim plage_valeur3 As Range
Dim courbe3 As Range

Sheets("resultat").Select
Set R3 = Sheets("resultat").Rows(1).Find("Mph3", , xlValues, xlWhole)
If Not R3 Is Nothing Then 'condition : si au moins une occurrence est trouvée
COL3 = R3.Column 'définit la colonne COL de la première occurrence trouvée
DL3 = Sheets("resultat").Cells(Application.Rows.Count, COL3).End(xlUp).Offset(-1, 0).Row 'définit la dernière ligne éditée DL3 de la colonne COL3

End If 'fin de la condition


Set Lastcell3 = Sheets("resultat").Cells(DL3, COL3)
Set Firstcell2 = Sheets("resultat").Cells(1, COL2).Offset(0, 1)
Set LastD = Range("D" & Rows.Count).End(xlUp)
Set plage_AD = Sheets("resultat").Range("A1:" & LastD.Address)
Set plage_valeur3 = Sheets("resultat").Range(Firstcell2, Lastcell3)
Set courbe3 = Union(plage_valeur3, plage_AD)
Sheets("graphique phase 3").Select

Sheets("graphique phase 3").Select ' créer graphe phase 3 avec source donnée range courbe3
Charts.Add ' dans la feuille graphique phase 3
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=courbe3
ActiveChart.Location Where:=xlLocationAsObject, Name:="graphique phase 3"

ActiveSheet.ChartObjects("Graphique 1").Activate ' Selectionne graphe 3 et modifie taille et position
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Graphique 1").Height = 402.5196850394
ActiveSheet.Shapes("Graphique 1").Width = 688.8188976378
ActiveSheet.Shapes("Graphique 1").IncrementLeft -148.8
ActiveSheet.Shapes("Graphique 1").IncrementTop -101.4
ActiveChart.ClearToMatchStyle
ActiveChart.ChartStyle = 231 ' Selectionne style graphe
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).TickLabelSpacing = 1
ActiveChart.Axes(xlCategory).TickLabelSpacing = 100
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).MinimumScale = 0
ActiveChart.Axes(xlValue).MajorGridlines.Select
Selection.Delete

ActiveSheet.ChartObjects("Graphique 1").Activate ' Ajoute titre axe Y
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
ActiveChart.Axes(xlValue, xlPrimary).HasTitle = True
ActiveChart.Axes(xlValue).AxisTitle.Select
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Échauffement (k)" ' Nom titre axe y = Echauffement (k)
Selection.Format.TextFrame2.TextRange.Font.Size = 20 ' Change taille texte


End Sub
0