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 :

bloquage d' excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Bonjour
    Je suis travaille actuellement sur un logiciel de "pricing" en finance, sous VBA et Excel, dans lequel j'ai fait des macros en VBA.
    Ce sont des calculs qui peuvent etre parfois assez "longs". (environ 1 minute)

    Il se touve que quand je lance ces calculs, Excel s'execute, mais il plante apres ces calculs. Plus exactement, il se bloque.

    Pour debloquer excel, il faut cliquer sur la crois rouge en haut a droite.
    Et pour reutiliser excel, il faut sauvergarder le fichier, puis le fermer et le relancer.
    Mais meme apres cette operation, ca se rebloque


    Est ce que vous comprenez le probleme auquel je suis confronté?
    Si vous avez deja rencontré ce genre de pb, comment peut on les resoudre?

    Il ne me semble pas que les calculs soient intensifs.
    Ca dure tout au plus une minute.
    Il faut savoir que j'utilise des DLL, que j'ai faite moi meme, mais ca ne change rien.
    faut il libere de la mémoire?
    Merci

    en revanche quand j'ouvre l'environnemen VBA
    et que je lance macro apres macro, ca ne se bloque pas tout le temps

    Je pb est que l'utilisateur du fichier ne vas pas ouvrir vba et lancer les macros a la main
    il va cliquer sur les boutons du logiciel VBA, et qui le font bloquer comme je le decris precedemment

  2. #2
    Membre Expert
    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
    Par défaut
    Citation Envoyé par deubelte Voir le message
    en revanche quand j'ouvre l'environnemen VBA
    et que je lance macro apres macro, ca ne se bloque pas tout le temps

    Je pb est que l'utilisateur du fichier ne vas pas ouvrir vba et lancer les macros a la main
    il va cliquer sur les boutons du logiciel VBA, et qui le font bloquer comme je le decris precedemment
    Salut
    Déjà, édite tes postes au lieu d'en ajouter

    Si "ca ne se bloque pas tout le temps", il serait interessant de savoir
    - quand
    - si c'est toujours au même endroit
    - si ça dépend du travail demandé
    etc...

    S'il se bloque, c'est qu'il a de bonnes raisons de le faire.

    Comme tu n'as pas de message d'erreur, je pense plutôt à un problème extérieur, sauf que ça peut simplement être une boucle infinie, mais là, ma boule de cristal étant en panne, je ne peux pas t'aider.

    Regardes si dans tes macros, tu as des instructions dont le champ est "Application" et vérifies qu'elles ne provoquent pas ton problème

    Si tu as des macros à lancement automatique, (worksheet_Change par exemple) vérifies qu'elles n'induisent pas une séquence infinie, etc...

    Comme je ne suis pas devin, je ne peux aller plus loin sans infos

    A+

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    merci pour la reponse

    Citation Envoyé par Gorfael
    Si "ca ne se bloque pas tout le temps", il serait interessant de savoir
    - quand
    Generalement, a la fin de la macro que je veux exectuer.

    Citation Envoyé par Gorfael
    - si c'est toujours au même endroit
    Oui, a la fin.

    Citation Envoyé par Gorfael
    - si ça dépend du travail demandé
    non

    En gros, la feuille excel reste figée. Je ne peux plus cliquer dessus.

    Citation Envoyé par Gorfael
    sauf que ça peut simplement être une boucle infinie
    pas de boucle infinie, ni d'appel recursif.

    Citation Envoyé par Gorfael
    Application
    Il y a des declaration avec "application" du style:
    Application.AddIns.Add
    ou

    Application.ScreenUpdating = False

    ou :
    Application.Pi()

    Citation Envoyé par Gorfael
    (worksheet_Change par exemple)
    non

    Ce qui se passe, c'est que la macro s'execute tres bien.
    Mais la feuille excel reste figée lorsque je passe de l'envi VBA vers l'envi Excel.
    Il faut fermer la feuille pour la relancer.
    Pour l'instant, je declare tous les types, toutes les variables avec byval, byref
    et on verra ensuite

    peut etre est-ce un pb de mémoire.

    Mais je peux pas en dire plus

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Souvent,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenupdating = false
    suffit et il n'est pas nécessaire que la macro se termine par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenupdating = true
    , mais parfois, ne pas repasser le rafraîchissement d'écran à TRUE en fin de macro peut bloquer l'affichage. J'ai déjà constaté cela notamment après une modification de mise en page.

    Dès lors, il serait peut-être intéressant que tu ajoutes une ligne en fin de macro.

    Tu nous dis ce qu'il en est?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Citation Envoyé par Pierre Fauconnier
    Tu nous dis ce qu'il en est?
    non pb,

    par ailleurs, j'en profite pour vous signaler une autre erreur
    je viens de declarer touts les types:

    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
    Function sig(ByVal f As Double, ByVal k As Double, ByVal beta As Double, ByVal nu As Double, ByVal alpha2 As Double, ByVal _
     tex As Double, ByVal rho As Double)
    Dim D1, D2, z, N11, N12, N13, n1 As Double
     
    D1 = 1 / ((f * k) ^ (0.5 - 0.5 * beta) * (1 + (1 - beta) ^ 2 / 24 * (Log(f / k) ^ 2 + (1 - beta) ^ 4 / 1920 * (Log(f / k) ^ 4))))
     
    z = nu / alpha2 * (f * k) ^ (0.5 - 0.5 * beta) * Log(f / k)
     
    D2 = 1 / (Log((Sqr(1 - 2 * rho * z + z * z) + z - rho) / (1 - rho)))
     
    N11 = (1 - beta) ^ 2 / 24 * alpha2 ^ 2 / (f * k) ^ (1 - beta)
    N12 = 0.25 * rho * beta * nu * alpha2 / (f * k) ^ (0.5 - 0.5 * beta)
    N13 = (2 - 3 * rho * rho) / 24 * nu * nu
     
    n1 = (1 + tex * (N11 + N12 + N13))
     
    sig = alpha2 * z * D2 * n1 * D1
    'SIG = z
    End Function
    et quand je lance, et que le curseur jaune se trouve sur D1
    il y a un message d'erreur qui dit:

    Run-time errror 16
    expression too complex

    Ca le faisait pas avant

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour D1, utilise des variables intermédiaires
    Citation Envoyé par deubelte
    Ca le faisait pas avant
    Je suppose que ça doit dépendre de la charge du µp à l'instant T...
    Le pb est que pendant qu'il travaille sur une ligne, la procédure se poursuit. Laisse-lui du temps de faire les calculs
    Si tu ne veux pas utiliser de variables intermédiaires, teste en ajoutant un DoEvents après chaque ligne de calculs (sans garantie aucune mais tu peux tester, tu en tireras toujours "une" conclusion...)
    A+

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Attention
    Ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim D1, D2, z, N11, N12, N13, n1 As Double
    ne déclare par D1, D2... comme Double, mais seulement n1. Les autres variables sont par défaut des Variant.

    Tu es obligé d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim D1 as Double, D2 as Double, ...
    pour préciser le type de chaque variable.

    As-tu pu tester le screenupdating = true ?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    merci pour la reponse
    Fais-tu appel à un Timer ?
    >>non
    Utilises-tu Application.screenUpdating = False ?
    >>oui, mais plus maintenant
    Le remets-tu à true en sortie ?
    >non

    As-tu des goto dans ton code ?
    >>non

    Au fait, quel est l'intérêt, outre bien sur pour la propreté du code, de déclarer les types?
    Y a t il une raison autre que la rapidité du code?


    Sinon, j'ai enlevé les screenupdating, il semle que ca ne plante plus.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Avant toute macro, mets déjà et si ce n'est déjà fait
    Le seul moyen de savoir si toutes tes variables sont déclarées.
    Les questions que je me pose...
    As-tu des goto dans ton code ?
    Fais-tu appel à un Timer ?
    Utilises-tu Application.screenUpdating = False ?
    Le remets-tu à true en sortie ?
    Etc.
    Pour t'aider, il serait intéressant de nous montrer le code de sortie de macro.
    A+

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

Discussions similaires

  1. [VB6] [Excel] Résultat d'une requete ds une feuille
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/01/2003, 17h52
  2. [VBA-E] [Excel] Filtrer le donnees d'une sheet
    Par donia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/09/2002, 10h55
  3. [Kylix] kylix et excel
    Par gothe dans le forum EDI
    Réponses: 1
    Dernier message: 19/09/2002, 19h44
  4. Réponses: 2
    Dernier message: 22/07/2002, 12h13
  5. [Kylix] Excel via kylix
    Par Billy joel dans le forum EDI
    Réponses: 1
    Dernier message: 23/05/2002, 11h57

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