IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

La methode range de l'objet global à échoué macro dans un userform [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut La methode range de l'objet global à échoué macro dans un userform
    Bonjour,
    J'ai un userform avec une listbox.
    L'utilisateur vient selectionner des items dans la listbox et ma macro viens tracer les graphes pour les tableaux selectionnés.
    Pour définir l'étendue du tableau, j'utilise range("").end...
    Seulement aux lignes que j'ai mis en rouge j'ai une erreur, ça me dit la méthode range de l'objet global a échoué.
    A l'execution j'ai une erreur 1004

    J'ai cherché un peu mais je ne trouve pas comment faire.

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Private Sub CbtOk_Click()
    
    Dim graphe As Chart
    Dim fsource As Worksheet
    Dim plagedonnée As Range
    Dim nom As String
    Dim fin As Integer
    Dim derligne As Integer
    Dim i As Integer
    Dim trouve As Range
    Dim lgraphe As Integer
    Dim plageX As Range
    Dim plageY1 As Range
    Dim plageY2 As Range
    Dim maserie1 As Range, maserie2 As Range
    
    Application.ScreenUpdating = False
    
    fin = Me.ListBox1.ListCount
    Set fsource = ThisWorkbook.Worksheets("graphe")
    derligne = fsource.Range("B65536").End(xlUp).Row
    Set plagenom = fsource.Range(Cells(1, 2), Cells(derligne, 2))
    
    
    For i = 1 To fin - 1
    
        nom = ""
        With ListBox1
        If .Selected(i) = True Then nom = .List(i)
        End With
        If nom <> "" Then
        Set trouve = plagenom.Find(nom, plagenom.Cells(1), xlValues, xlWhole, xlByColumns, xlNext)
        lgraphe = trouve.Row
        coldroite = Range(Cells(lgraphe + 1, 100)).End(xlLeft).Column
        Set graphe = ThisWorkbook.Charts.Add
        ActiveSheet.Name = Left(nom, 30)
        graphe.ChartArea.clear
        graphe.ChartType = xlXYScatterLines
        Set plageX = fsource.Range(Cells(lgraphe + 3, 2), Cells(lgraphe + 3, coldroite))
        Set plageY1 = fsource.Range(Cells(lgraphe + 5, 2), Cells(lgraphe + 5, coldroite))
        Set plageY2 = fsource.Range(Cells(lgraphe + 6, 2), Cells(lgraphe + 6, coldroite))
        Set maserie1 = graphe.SeriesCollection.NewSeries
        With maserie1
            .Values = plageY1
            .XValues = plageX
            .Name = fsource.Cells(lgraphe + 5, 1).Value
        End With
        
        Set maserie2 = graphe.SeriesCollection.NewSeries
        With maserie2
            .Values = plageY2
            .XValues = plageX
            .Name = fsource.Cells(lgraphe + 6, 1).Value
        End With
        
        End If
    
    Next i
    
    
    UserForm1.Hide
    Unload UserForm1
    
    Application.ScreenUpdating = True
    
    End Sub

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut diude54 et le forum
    Regardes tes valeurs au moment de l'erreur en mode pas-à-pas. Pour dépanner, il faudrait tester et pas envie de créer un fichier. De plus, ton code est trop tarabiscotté pour moi.
    Tu as donc une adresse ou le nom d'une cellule en colonne 100 (Cells(lgraphe + 1, 100)) et tu recherches un colonne à gauche de la cellule désignée : suivant que la cellule en colonne 99 est vide ou pleine, tu n'auras pas le même résultat, c'est tout que je peux dire.

    Ta macro n'est exploitable qu'avec tes données : si je crée un fichier d'essai, on aura (ou pas) une erreur suivant ce que je mets dans les cellules, et qui ne saurait refléter ce que tu as.
    A+

  3. #3
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Voici mon fichier
    Le but est de pouvoir tracer un graphe par tableau, le userform sert à selectionner quel graphe on veut tracer.
    On selectionne les graphes à tracer.

    Cette ligne sert à trouver la colonne de droite du tableau à tracer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coldroite = Range(Cells(lgraphe + 1, 100)).End(xlLeft).Column

  4. #4
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Re,

    J'ai trouvé la 1ère erreur:

    ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coldroite = Range(Cells(lgraphe + 1, 100)).End(xlLeft).Column
    mais ça qu'il faut ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coldroite = Range(Cells(lgraphe + 1, 100)).End(xlToLeft).Column
    Sinon j'ai toujours la même erreur sur les lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set plageX = fsource.Range(Cells(lgraphe + 3, 2), Cells(lgraphe + 3, coldroite))
        Set plageY1 = fsource.Range(Cells(lgraphe + 5, 2), Cells(lgraphe + 5, coldroite))
        Set plageY2 = fsource.Range(Cells(lgraphe + 6, 2), Cells(lgraphe + 6, coldroite))

  5. #5
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    J'ai trouvé la solution pour les erreurs suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Private Sub CbtOk_Click()
    
    Dim graphe As Chart
    Dim fsource As Worksheet
    Dim plagedonnée As Range
    Dim nom As String
    Dim fin As Integer
    Dim derligne As Integer
    Dim i As Integer
    Dim trouve As Range
    Dim lgraphe As Integer
    Dim plageX As Range
    Dim plageY1 As Range
    Dim plageY2 As Range
    Dim maserie1 As Series, maserie2 As Series
    
    'Application.ScreenUpdating = False
    
    fin = Me.ListBox1.ListCount
    Set fsource = ThisWorkbook.Worksheets("graphe")
    derligne = fsource.Range("B65536").End(xlUp).Row
    Set plagenom = fsource.Range(Cells(1, 2), Cells(derligne, 2))
    
    
    For i = 1 To fin - 1
    
        nom = ""
        With ListBox1
        If .Selected(i) = True Then nom = .List(i)
        End With
        If nom <> "" Then
        If SheetExists(ThisWorkbook, Left(nom, 30)) Then Sheets(Left(nom, 30)).Delete
        Set trouve = plagenom.Find(nom, plagenom.Cells(1), xlValues, xlWhole, xlByColumns, xlNext)
        lgraphe = trouve.Row
        coldroite = fsource.Cells(lgraphe + 1, 100).End(xlToLeft).Column
        Set maplage = Range(Cells(lgraphe, 2), Cells(lgraphe + 6, coldroite))
        Set graphe = ThisWorkbook.Charts.Add 'After:=thisworkbook.Worksheets("graphe")
        ActiveSheet.Name = Left(nom, 30)
        graphe.ChartArea.clear
        graphe.ChartType = xlXYScatterLines
        Set plageX = maplage.Rows(4) 'fsource.Range(Cells(lgraphe + 3, 2), Cells(lgraphe + 3, coldroite))
        Set plageY1 = maplage.Rows(6) 'fsource.Range(Cells(lgraphe + 5, 2), Cells(lgraphe + 5, coldroite))
        Set plageY2 = maplage.Rows(7) 'fsource.Range(Cells(lgraphe + 6, 2), Cells(lgraphe + 6, coldroite))
    
        Set maserie1 = graphe.SeriesCollection.NewSeries
        With maserie1
            .Values = plageY1
            .XValues = plageX
            .Name = fsource.Cells(lgraphe + 5, 1).Value
        End With
        
        Set maserie2 = graphe.SeriesCollection.NewSeries
        With maserie2
            .Values = plageY2
            .XValues = plageX
            .Name = fsource.Cells(lgraphe + 6, 1).Value
        End With
        
        End If
        fsource.Select
    Next i
    
    
    UserForm1.Hide
    Unload UserForm1
    
    Application.ScreenUpdating = True

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut debogage macro excel
    salut j'ai un message pareil quand je test la macro :
    la méthode range de l'objet global a échoué ...
    en faite, j'ai un fichier 'all' qui est censé recuperer les données de deux fichiers excel. le fichier 'all' contient une click 'mise à jour' qui est liée a la macro. (piece jointe)
    Auriez vous une idée de ce que peu etre le probleme?
    ci joint le code que j'ai bricolé un peu.
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip Lat.zip (43,6 Ko, 104 affichages)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur "La méthode Range de l'objet global a échoué"
    Par Antony1812 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/03/2013, 17h21
  2. Erreur "La méthode Range de l'objet global a échoué"
    Par Antony1812 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/03/2013, 16h57
  3. erreur d'execution 1004 methode range de l'objet global a echoue
    Par ranomanitra dans le forum VBA Access
    Réponses: 7
    Dernier message: 11/01/2013, 17h27
  4. [XL-2007] Méthode range de l'objet global a échoué
    Par ggvert dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/07/2011, 21h34
  5. La méthode Range de l'objet global a échoué
    Par cline01 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2010, 21h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo