Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

erreur 1004 ou 91 pour la définition en objet Range

  • Initiateur de la discussion Initiateur de la discussion patnel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

patnel

XLDnaute Nouveau
Bonjour,

je suis nouveau dans ce forum et ceci est ma premiére question.

je dois réaliser des graphiques sur une série de fichiers de données brutes.
ces fichiers ont une extension .dat.

donc en premier j'ouvre un fichier de donnée avec excel et je fais mon graphe manellement, j'obtiens le résuktat excompté.

Comme le nombre de fichier devient important il faut que je fasse une macro,
(en PJ je vous transmets un exemple de fichier excel qui me pose problème.)

donc je dois d'abord delimiter la plage de données qui va servir au graphe.
cette plage est variable en fonction du fichier de donnée, donc il faut que je calcule sa longueur, ce qui donne le code suivant :

Code:
Option Explicit

Sub create_graph()
Dim C_ori, C_Dest  As Range
Dim zone_graph, zone_graph2 As Range
Dim LeGraph As Chart
Dim ligne, i, j, k As Long
Dim ori, dest As String
Dim fiche As String
Dim feuil As Worksheet
'recuperer le nom de la feuille

For Each feuil In Worksheets
fiche = feuil.Name

Next feuil
Worksheets(fiche).Range("A15").Value = "NULL"
ori = Worksheets(fiche).Range("F7").Value
dest = "Axe X " & ori & " gRMS"
Worksheets(fiche).Range("B15").Value = dest

ori = Worksheets(fiche).Range("F8").Value
dest = "Axe Y " & ori & " gRMS"
Worksheets(fiche).Range("C15").Value = dest

ori = Worksheets(fiche).Range("F9").Value
dest = "Axe Z " & ori & " gRMS"
Worksheets(fiche).Range("D15").Value = dest



' récuperer la zone de valeurs pour le graphique
' compter le nombre de lignes

Set zone_graph = Worksheets(fiche).Rows(1)

ligne = 15
Do While (zone_graph.Offset(ligne).Columns(1).Value <> "")
ligne = ligne + 1
Loop

'cette ligne génere l'erreur 1004'
Set zone_graph2 = Worksheets(fiche).Range(Cells(15, 1), Cells(ligne - 1, 4))

' cette ligne est soit gardée soit supprimmée suivant l'erreur
 
Worksheets(fiche).Range("A15").Value = "" 

Set LeGraph = ThisWorkbook.Charts.Add

Set LeGraph = LeGraph.Location(Where:=xlLocationAsNewSheet)



With LeGraph
        .SetSourceData zone_graph2, xlColumns
        .ChartType = xlXYScatterLinesNoMarkers
        .HasTitle = True
        .ChartTitle.Characters.Text = fiche
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Fréquences en Hz"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "niveau en g²RMS/Hz"
End With

LeGraph.ApplyDataLabels Type:=xlDataLabelsShowNone, LegendKey:=False

'grille d'échelle primaire
With LeGraph.Axes(xlCategory)
        .HasMajorGridlines = True
        .HasMinorGridlines = True
End With

'grille d'échelle secondaire
With LeGraph.Axes(xlValue)
        .HasMajorGridlines = True
        .HasMinorGridlines = True
End With

With LeGraph.Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlMinimum
        .ReversePlotOrder = False
        .ScaleType = xlLogarithmic
        .DisplayUnit = xlNone

End With

    With LeGraph.Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlMinimum
        .ReversePlotOrder = False
        .ScaleType = xlLogarithmic
        .DisplayUnit = xlNone
    End With

End Sub

si la premiére cellule de la plage selectinnée est vide j' ai une erreur d'execution sur la définition de ma plage zone_graph2
si elle est remplie elle risque de fausser mon graphe

donc je la remplis artificiellement puis je la vide

donc suivant le cas j'ai une erruer 91 ou une erreur 1004.

ça devient dur pour moi

je ne sais pas comment faire pour mettre le fichier complet en PJ


merci pour votre aide
 
Re : erreur 1004 ou 91 pour la définition en objet Range

le pb est résolue sauf la façon de joindre un fichier

voilà le code corrigé pour ceux qui ont le même PB.

Code:
Option Explicit

Sub create_graph()
Dim C_ori, C_Dest  As Range
Dim zone_graph, zone_graph2 As Range
Dim LeGraph As Chart
Dim ligne, i, j, k As Long
Dim ori, dest As String
Dim fiche As String
Dim feuil As Worksheet
'recuperer le nom de la feuille

For Each feuil In Worksheets
fiche = feuil.Name

Next feuil
Worksheets(fiche).Range("A15").Value = "NULL"
ori = Worksheets(fiche).Range("F7").Value
dest = "Axe X " & ori & " gRMS"
Worksheets(fiche).Range("B15").Value = dest

ori = Worksheets(fiche).Range("F8").Value
dest = "Axe Y " & ori & " gRMS"
Worksheets(fiche).Range("C15").Value = dest

ori = Worksheets(fiche).Range("F9").Value
dest = "Axe Z " & ori & " gRMS"
Worksheets(fiche).Range("D15").Value = dest



' récuperer la zone de valeurs pour le graphique
' compter le nombre de lignes

Set zone_graph = Worksheets(fiche).Rows(1)

ligne = 15
Do While (zone_graph.Offset(ligne).Columns(1).Value <> "")
ligne = ligne + 1
Loop


Set zone_graph2 = Worksheets(fiche).Range(Cells(15, 1), Cells(ligne - 1, 4))
Worksheets(fiche).Range("A15").Value = ""

Set LeGraph = ThisWorkbook.Charts.Add
LeGraph.Name = "Graphique"

'Set LeGraph = LeGraph.Location(Where:=xlLocationAsNewSheet)



With LeGraph
        .SetSourceData zone_graph2, xlColumns
        .ChartType = xlXYScatterLinesNoMarkers
        .HasTitle = True
        .ChartTitle.Characters.Text = fiche
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Fréquences en Hz"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "niveau en g²RMS/Hz"
End With

LeGraph.ApplyDataLabels Type:=xlDataLabelsShowNone, LegendKey:=False

'grille d'échelle primaire
With LeGraph.Axes(xlCategory)
        .HasMajorGridlines = True
        .HasMinorGridlines = True
End With

'grille d'échelle secondaire
With LeGraph.Axes(xlValue)
        .HasMajorGridlines = True
        .HasMinorGridlines = True
End With

With LeGraph.Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlMinimum
        .ReversePlotOrder = False
        .ScaleType = xlLogarithmic
        .DisplayUnit = xlNone

End With

    With LeGraph.Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlMinimum
        .ReversePlotOrder = False
        .ScaleType = xlLogarithmic
        .DisplayUnit = xlNone
    End With

End Sub

merci à tous


Pat
 
Re : erreur 1004 ou 91 pour la définition en objet Range

Bonjour

Essayes mais pas sur
Code:
ligne = 15
Do While (zone_graph.Offset(ligne).Columns(1).Value <> "")
ligne = ligne + 1
Loop
[COLOR="Red"]If ligne = 15 Then ligne = 16[/COLOR]


Ps: J'ai vu que tu avais trouvé d'ou venait l'erreur
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
520
Réponses
0
Affichages
459
Réponses
6
Affichages
998
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…