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 :

vba: "Microsoft excel a cessé de fonctionner" - oldstatusbar


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 64
    Points : 58
    Points
    58
    Par défaut vba: "Microsoft excel a cessé de fonctionner" - oldstatusbar
    Dim oldstatusbar As Boolean

    Bonjour,

    J'ai un problème, lorsque je lance cette macro qui, jusqu'à il y a peu, fonctionnait parfaitement, Microsoft excel m'écrit:

    "microsoft excel a cessé de fonctionner"

    Le code plante à l'éxécution de la ligne 13:

    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
    Sub Import_()
     
    '=========================
    'importer les MID à comparer
    '=========================
     
    Application.ScreenUpdating = False
     
    Sheets("1").Visible = True
    Sheets("2").Visible = True
     
    'activer barre d'attente
    oldstatusbar = Application.DisplayStatusBar
    Application.DisplayStatusBar = True
     
     
    '...
    'code
    '...
     
     
    Sheets("1").Visible = xlSheetHidden
    Sheets("2").Visible = xlSheetHidden
     
    Application.ScreenUpdating = True
     
    'fin barre d'attente
    Application.StatusBar = False
    Application.DisplayStatusBar = oldstatusbar
     
    End Sub
    Quelqu'un aurait-il une idée du pourquoi du comment?
    Y a-t-il une limitation à l'utilisation des "Application.StatusBar" ?

    Sachant que la même architecture est présente dans d'autres modules du tableur, mais ces dernières fonctionnent parfaitement.

    Au passage, ces derniers, dans des boucles for assez grosses, ralentissent ils beaucoup le code ou est-ce négligeable?

    Autre question annexe, au pire j'ouvre une nouvelle conversation:
    Le code ci-dessous est très lent, est-ce plus rapide de faire un .delete shift:=xlup sur un range si le nombre de colonne est connu?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows(suppr_1 & ":" & suppr_2).Delete shift:=xlUp

  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,

    L'idéal, je pense, c'est d'utiliser seulement Statusbar et laisser tomber DisplayStatusbar à moins que cette barre de statut soit enlevée par défaut.

    Quand tu veux afficher quelque chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Statusbar = "Mon message"
    Quand tu as terminé et/ou à la fermeture du classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Statusbar = False
    Je ne pense pas que la vitesse soit vraiment compromise avec Statusbar. Par contre, à l'occasion, je vois qu'il n'y a pas de raffraichisssement, principalement dans des boucles ... Ça semble gelé, mais si on tape Ctrl-Pause, on voit bien que le code est rendu plus loin...

  3. #3
    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
    Pour ta 2e question, ça peut ralentir le système s'il y a des formules impliquées, surtout dans des boucles. En général, je vais mettre Calculation en mode manuel et ScreenUpdating à False avant de supprimer et je remets en automatique et True à la fin. Ça accélère pas mal...

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Ok merci.

    Donc déjà j'ai supprimé les lignes "oldstatusbar" en début, fin, et déclaration as boolean, et le buggue a disparu... bonne nouvelle, merci !

    Ensuite, pour la 2° question, je retire déjà le screen update en début de macro pour le réactiver en fin, et pour la suppression, plutôt que de la faire 2 lignes par 2 lignes comme l'architecture de mon code l'a suggéré, je le fais pas blocs de lignes plus grand, moins de petites suppressions à faire, ça booste carrément.


    Tu as parlé de application.calculation en manuel au début puis remise en automatique: http://www.cpearson.com/excel/optimize.htm

    Je découvre ça, mais apparemment c'est au même titre que screeupdate le B-A-BA de l'optimisation.

    Du coup, le mettre juste en début et fin n'est pas suffisant à ce que j'ai compris.
    Il me semblait que si jamais il est en manuel, que le code écrit "chien" dans la cellule A2, puis copie A2 et le colle en A3, alors en A3 on ne verra rien (j'exécute en pas à pas) tant que le mode ne passe pas en automatique.
    Ou même qu'en ré-écrivant "chat" dans A3 avant le passage en automatique, on ne verrait que "chien" à la fin de la macro, mais on voit bien "chat"...

    Or, en le testant, même avec calculation en manuel, toutes les cellules se raffraichissent...
    Y-a-t'il des cas où ce n'est pas le cas? désolé de poser une question aussi vaste, mais je ne saisi pas bien la subtilité de calculation en fait...

  5. #5
    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
    En fait, lorsqu'il y a pas mal de formules dans une ou des feuilles, le mode calcul manuel empêche ces formules de se recalculer, même si elles n'ont pas été touchées directement. Ça permet une bonne accélération dans certains cas.

    Si tu dois inscrire des formules par code, il faut tout de même mettre en automatique à la fin pour que les valeurs se mettent à jour correctement...

    Je n'ai pas très bien saisi ce que tu voulais dire avec ton histoire de chien et de chat Normalement, en mode ScreenUpdating à False, tu ne devrais pas voir de changement "graphique". Et les caractères sont des objets graphiques d'une certaine façon.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Oui, les chats et chiens n'étaient pas les plus légitimes pour une explication...

    En fait, je me demandais si mettre calculation en manual au début, puis automatique à la fin, pourrait engendrer la perte d'infos au fil des déplacements de valeurs (copie colle), de suppressions, re-écritures, ou si, tout comme screenupdate, aucune donnée ne se perd, c'est juste que tout proprement mais de manière cachée

  7. #7
    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
    C'est surtout au niveau des formules que Calculation est sensible.
    Si tu fais des copier/coller de valeurs, aucun problème.

    Si tu crées des formules par code en mode manuel et que tu passes en mode automatique par la suite, ces formules vont se mettre à jour toutes ensembles.

    Si tu crées des formules par code en mode manuel et que tu copies ces formules en valeur par la suite, ces formules n'auront pas pu se mettre à jour et seront fausses. Il faut mettre en mode automatique auparavant.

    Selon les cas, il arrive que la suppression de lignes engendre un recalcul des formules, ce qui ralentit le processus. C'est pourquoi, à l'occasion, je vais mettre en mode manuel lors de la suppression et remettre en automatique par la suite.

    Est-ce plus clair ?

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Par formules, tu entends les valeurs que je colle dans des cellules? tout ce qui est écriture dans excel donc?

    du genre:

    cells(1,2).value=cells(2,3).value+2

    auquel cas, si je veux affilier la valeur de B1 à une autre cellule ou variable, il faudrait que je repasse en mode automatique?

Discussions similaires

  1. Réponses: 21
    Dernier message: 17/07/2018, 10h33
  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, 20h02
  3. [AC-2010] Microsoft Access a cessé de Fonctionner
    Par kedmard dans le forum VBA Access
    Réponses: 18
    Dernier message: 30/11/2012, 20h59
  4. [AC-2010] Microsoft access a cessé de fonctionner
    Par Daejung dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/11/2011, 16h56
  5. [AC-2007] Erreur Excel a cessé de fonctionner
    Par tibofo dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/09/2010, 11h53

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