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 :

Excel a cessé de fonctionner --> Automation ? [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Débutant en VBA et VB
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Débutant en VBA et VB
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Excel a cessé de fonctionner --> Automation ?
    Bonjour à toutes et à tous

    J'ai créé des macros qui me permettent de traiter des données.
    Le but étant d'avoir un fichier source qui génère des onglets via des données (ça c'est bon). Ensuite j'ai effectué une macro qui ouvre un nouveau classeur (dans un nouveau processus) et dans lequel je copie colle les données pour créer 3 graphiques par classeur. Et cela enregistre chaques classeurs dans un dossier spécifique (en local)
    Cependant, j'ai des "plantages" aléatoires parfois au deuxième classeur, parfois au 8eme... ect
    avec un message Excel a cessé de fonctionner, et parfois une erreur : Erreur d'automation ; le serveur distant n'existe pas ou n'est pas disponible
    voici une partie du code (j'ai enlevé la partie où cela créé les graphiques pour que ce ne soit pas imbuvable)

    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
    68
    69
    70
    71
    72
    73
    74
    75
     Sub CreationGraphe1()
     
        Dim MonGraphe As Chart
        Dim MonGraphe2 As Chart
        Dim MonGraphe3 As Chart
        Dim MaPlage1 As Range
        Dim MaPlage2 As Range
        Dim M As ChartObject
        Dim cel As Range
        Dim ws As Worksheet
        Dim wscount As Integer
        Dim I As Integer
        Dim derlign As Integer
        Dim Onglet As Byte
        Dim SourceG As Range
        Dim SourceG2 As Range
        Dim SourceG3 As Range
        Dim xlApp As Excel.Application
        Dim xlBook As Excel.Workbook
        Dim xlSheet As Excel.Worksheet
        Dim Book As Excel.Workbook
        Dim Dossier As String
     
     
        wscount = ActiveWorkbook.Worksheets.Count
    '    Onglet = ActiveSheet.Name
     
     
        For I = 3 To wscount
     
         'On créer l'objet Excel
        Set xlApp = CreateObject("Excel.Application")
    'on rend le classeur visible    
    xlApp.Visible = True
        'On défini le nombre d'onglets (ici 1)
        xlApp.SheetsInNewWorkbook = 1
        'On ajoute un classeur
        Set xlBook = xlApp.Workbooks.Add
     
     
      ThisWorkbook.Sheets(I).Activate
        Range("Q2") = "CT JUSTIFIEE"
        Range("Q3") = "CT DECADREE"
        Set MaPlage1 = Sheets(I).Range(Cells(2, 17), Cells(3, 17))
        Set MaPlage2 = Sheets(I).Range(Cells(2, 18), Cells(3, 18))
        Set SourceG = xlBook.Sheets("Feuil1").Range("Q2:R3")
     
        ThisWorkbook.Sheets(I).Range("M1:R15").Copy
     
        xlBook.Sheets("Feuil1").Range("M1:R15").Value = ThisWorkbook.Sheets(I).Range("M1:R15").Value
     
     
        Set MonGraphe = xlBook.Charts.Add
     
    ''''''''''''''''''''''''''''''''''''
     
    'ici c'est la création des trois graphiques que je copies et je colle sur la même feuille
    ''''''''''''''''''''''''''''''''''''''
     
        xlApp.DisplayAlerts = False
     
        xlBook.SaveAs Filename:="D:\NMA\" & ThisWorkbook.Sheets(I).Name, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        xlApp.Quit
         Set xlSheet = Nothing
     
         Set xlBook = Nothing
     
         Set xlApp = Nothing
     
        Next I
     
     
     
     
    End Sub
    Il est vrai que le fichier source est assez lourd (+ de 600 onglets) et que la création des 3 graphiques et l'enregistrement classeur par classeur est surement également lourd...

    Merci de me dire si vous avez des idées ? des améliorations ? des conseils ? des remarques ?
    je suis preneur ! surtout qu'étant débutant, j'espère n'avoir choqué personne (car on doit le sentir que je débute !)

    Matt qui vous remercie par avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    Pourquoi utiliser une nouvelle instance d'Excel ?
    Il me semble que ce serait plus simple et possiblement plus efficace dans la même instance ...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Débutant en VBA et VB
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Débutant en VBA et VB
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    je ne sais pas trop, je voulais (dans ma tête) bien séparer les choses.
    Mais en effet, je vais commencer par là, on verra si ça continue de bugger
    merci pour ta remarque, je fais ça dès demain matin, et on verra le résultat, je vous tiendrais informé

    j'ai fais le nécessaire, cependant toujours KO
    il parvient a me faire 2 ou 3 classeurs, puis : Microsoft Excel a cessé de fonctionner....
    j'ai l'impression que la sauvegarde et la fermeture des nouveaux classeurs sont trop lourd (?)
    Car l'écran se fige (Excel + vba tout blanc) mais ça tourne derrière, puis ça plante
    voici le code modifié
    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
    Sub CreationGraphe1()
     
        Dim MonGraphe As Chart
        Dim MonGraphe2 As Chart
        Dim MonGraphe3 As Chart
        Dim MaPlage1 As Range
        Dim MaPlage2 As Range
        Dim M As ChartObject
        Dim cel As Range
        Dim ws As Worksheet
        Dim wscount As Integer
        Dim I As Integer
        Dim derlign As Integer
        Dim Onglet As Byte
        Dim SourceG As Range
        Dim SourceG2 As Range
        Dim SourceG3 As Range
        Dim xlApp As Excel.Application
        Dim xlBook As Excel.Workbook
        Dim xlSheet As Excel.Worksheet
        Dim Book As Excel.Workbook
        Dim Dossier As String
     
     
        wscount = ActiveWorkbook.Worksheets.Count
     For I = 3 To wscount
    Set xlBook = Workbooks.Add
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'ici création, copie de 3 graphiques
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
     
        xlBook.SaveAs Filename:="D:\NMA\" & ThisWorkbook.Sheets(I).Name, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        xlBook.Close
     
    Next I 
     
    End Sub

    ce qui est étonnant, c'est que ce sont des choses simples, je ne tente pas de faire décoller une fusée :p

    Matt

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    A tout hasard, une piste avec une variable objet du classeur source et une gestion d'erreur pour identifier cette dernière en cas de plantage
    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
    Sub CreationGraphe1()
     
    Dim MonGraphe As Chart
    Dim MonGraphe2 As Chart
    Dim MonGraphe3 As Chart
    Dim MaPlage1 As Range
    Dim MaPlage2 As Range
    Dim M As ChartObject
    Dim cel As Range
    Dim ws As Worksheet
    Dim wscount As Integer
    Dim I As Integer
    Dim derlign As Integer
    Dim Onglet As Byte
    Dim SourceG As Range
    Dim SourceG2 As Range
    Dim SourceG3 As Range
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim Book As Excel.Workbook
    Dim Dossier As String
     
    Dim WBsource As Workbook  '///
    '---
     
    On Error GoTo Erreur  '///
     
    Set WBsource = ThisWorkbook '///
    wscount = WBsource.Worksheets.Count '///
     
    For I = 3 To wscount
      Set xlBook = Workbooks.Add
     
      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      'ici création, copie de 3 graphiques
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
     
      xlBook.SaveAs Filename:="D:\NMA\" & WBsource.Sheets(I).Name, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
      xlBook.Close
     
      Set xlBook = Nothing  '///
     
    Next I
     
    '///
    Exit Sub
    Erreur:
    MsgBox "Erreur " & Err.Number & vbCrLf & Err.Description
    '///
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    Débutant en VBA et VB
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Débutant en VBA et VB
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Je viens de tenter mais comme ça plante Excel (Excel a cessé de fonctionner) , eh bien je n'ai pas de msgbox ...
    là j'avoue que je ne comprend pas ! surtout que en mode "pas à pas" ça fonctionne (même si j'ai une "ENORME" lenteur sur la ligne de sauvegarde et de fermeture).
    Et je pense d'ailleurs que le problème vient de ces deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xlBook.SaveAs Filename:="D:\NMA\" & ThisWorkbook.Sheets(I).Name, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        ActiveWorkbook.Close

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Essaie en ajoutant l'extension au fichier si elle n'est pas déjà inscrite dans le nom de la feuille et en utilisant ta variable xlBook lors de la fermeture avec False

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlBook.SaveAs Filename:="D:\NMA\" & ThisWorkbook.Sheets(I).Name & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        xlBook.Close False

  7. #7
    Membre à l'essai
    Homme Profil pro
    Débutant en VBA et VB
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Débutant en VBA et VB
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    merci Parmi mais je viens d'essayer, c'est plus propre je suppose au niveau "codage", mais Excel plante à nouveau...
    C'est vraiment frustrant quand ça fonctionne en mode pas à pas, mais pas après !

    d'ailleurs en mode pas à pas lorsque je passe sur la ligne VBA met 8 à 10 secondes par classeurs (je suppose que le problème vient de là...)

    D'ailleurs y a t il un moyen de trouver le rapport d'erreur ou des logs quand Excel plante ?

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Difficile de voir où et pourquoi ça plante dans ces cas-là...
    Je ne pense pas qu'il ait un log quelconque (?)

    Un autre essai ?
    Place un DoEvents à l'intérieur de ta boucle, disons juste avant le SaveAs
    On ne sait jamais... quelquefois ça fait des miracles

    Et n'oublie pas le
    spécifié par PMO2017

  9. #9
    Membre à l'essai
    Homme Profil pro
    Débutant en VBA et VB
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Débutant en VBA et VB
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Non pas mieux
    mode pas à pas : ça passe, avec la lenteur au niveau du malgré le DoEvents avant le xlBook.SaveAs
    et en gardant le Set xlBook = Nothing

    toujours le plantage d'Excel : "Excel a cessé de fonctionner"

    Que faire ?
    Si quelqu'un veut le fichier, pour vérifier si ça fonctionne chez lui, je suis dispo à le fournir, il n' y a rien de confidentiel.
    il fait 13763 ko le fichier source (en format xlsm et génère des fichiers .xlsx)

    Matt

  10. #10
    Membre à l'essai
    Homme Profil pro
    Débutant en VBA et VB
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Débutant en VBA et VB
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Youpiiiii je viens de solutionner mon problème !!

    alors j'ai pas beaucoup d'explications à donner sur les causes (sauf peut être un problème de performance d'Excel )

    Alors voila comment j'ai solutionné mon problème :

    depuis mon fichier source, cela créait des nouveaux classeurs qui avaient 3 onglets graph (et je copiais les graphiques pour les coller dans une feuil)
    J'ai donc rajouté 3 lignes avant la sauvegarde et fermeture des classeurs générés pour supprimer les 3 onglets Graphiques (car pas réellement de besoin)
    et là Hop ! ça marche du tonnerre

    Je vous remercie vivement pour tous vos conseils et toutes vos remarques

    Matt

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

Discussions similaires

  1. vba: "Microsoft excel a cessé de fonctionner" - oldstatusbar
    Par tiber33 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 31/01/2014, 11h56
  2. [XL-2007] Problème macro VBA "Excel a cessé de fonctionner"
    Par MAD61141 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/01/2014, 21h02
  3. [XL-2007] Excel a cessé de fonctionner
    Par a.ouah dans le forum Excel
    Réponses: 3
    Dernier message: 13/07/2013, 17h14
  4. Excel a cessé de fonctionner: pb de time out?
    Par quarkup31 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/02/2013, 23h23
  5. [AC-2007] Erreur Excel a cessé de fonctionner
    Par tibofo dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/09/2010, 12h53

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