Création de graphe avec plage variable à définir avec find

Y compris Power BI, Power Query et toute autre question en lien avec Excel
W
Wazzid
Nouveau venu
Nouveau venu
Messages : 3
Inscrit le : 14 juin 2017
Version d'Excel : 2016 FR

Message par Wazzid » 14 juin 2017, 11:15

Bonjour,

Dans le but d'automatiser l'édition de rapport, j'ai commencé à utiliser les macros sur Excel et avec l'aide de différents forums je commence à comprendre un peu le VBA mais je suis confronté à un problème que je n'arrive pas à résoudre cette fois ci.

Alors mon souhait serait de pouvoir définir des plages de données grâce à la méthode Find.

Le but est de créer des graphes pour chaque phase 1,2 et 3 et donc il faudrait que je puisse sélectionner ma plage de données pour la graphe de la case A1 à la dernière case correspondant à ma phase 1 soit la colonne "Mph1".

Pareil pour le graphique phase 2 : la plage doit correspondre aux 4 premières colonnes de ma feuille + les colonnes correspondant à la phase 2 soit de " 1ph2" à "Mph2".

Je vous met ce le tout petit peu de code que j'ai et qui ne fonctionne pas
ainsi que mon fichier excel sur lequel je travail.
macro tableau synthese echauffemenet.xlsm
(867.42 Kio) Téléchargé 10 fois
Sub graphe()
'
' graphe Macro
'

'
Dim Lastcell1 As Range
Dim graph1 As Range
Dim cel As Range



' Je vois bien que ce code n'es pas bon du tout
' la méthode find doit renvoyer un Range mais
' j'ai l'impression qu'elle me renvoie "Mph1"
' et pas la case où elle se trouve
' d'ou les problemes ensuite car impossible d'aller prendre l'avant derniere case pour faire ensuite le graphe


Worksheets("resultat").Rows("1").Find(What:="Mph1").Select
Set cel = Selection

Set Lastcell1 = Range("cel" & Rows.Count).End(xlUp).Offset(-1, 0).Select

graph1 = Range("A1:lastcell1")
ActiveSheet.Shapes.AddChart2(227, xlLineMarkers).Select
ActiveChart.SetSourceData Source:=Range("graph1")

' Voici ce que l'enregistreur de macro me donne
' Et j'ai besoin d'utiliser la méthode Find car suivant le fichier, je n'ai pas forcement le même nombre de colonne
' Or Mph1 sera toujours ma derniere colonne correspondant à ma phase 1


Columns("A:Y").Select
ActiveSheet.Shapes.AddChart2(227, xlLineMarkers).Select
ActiveChart.SetSourceData Source:=Range("resultat!$A:$Y")
End Sub


Merci de votre aide, j'espère avoir été assez clair.
N'hésitez pas à demander plus de précision.
W
Wazzid
Nouveau venu
Nouveau venu
Messages : 3
Inscrit le : 14 juin 2017
Version d'Excel : 2016 FR

Message par Wazzid » 14 juin 2017, 16:47

Du nouveau,

J'ai essayer d'avancer un petit peu mais je reste toujours boquer pour la même raison...
Il ne me renvoie pas la cellule correspondante


Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String

Worksheets("resultat").Select
Set PlageDeRecherche = Rows("1")
Set Trouve = PlageDeRecherche.Cells.Find(What:="Mph1", LookAt:=xlWhole)
If Trouve Is Nothing Then
Exit Sub
Else
AdresseTrouvee = Trouve.Address
End If

Dim cell As Range
Dim Lastcell1 As Range
Dim graph1 As Range

' Erreur range globale Lastcell1 = nothing et Selection = "Mph1"

Range("AdresseTrouvee" & Rows.Count).End(xlUp).Offset(-1, 0).Select

Lastcell1 = Selection

Range("A1:Lastcell1").Select
Set graph1 = Selection

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

End Sub
W
Wazzid
Nouveau venu
Nouveau venu
Messages : 3
Inscrit le : 14 juin 2017
Version d'Excel : 2016 FR

Message par Wazzid » 15 juin 2017, 13:28

j'ai encore réussi à avancer :


La méthode find fonctionne correctement et va me chercher la ligne et colonne correspondante de ma derniere case vulu pour la plage de donnée du graphique.

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
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message