Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 20 November 2006 14:41

nicolas valls
Participant assidu
Date d'inscription: 28 Oct 2005
Messages: 154

code VBA et arcmap qui se met en "Pas de réponse"

Bonjour,
Je programme un petit outil en vba qui ecrit un fihier à partir d'une table arcview. Le processus dure environ 10 minutes. Au début tout marche bien mais au bout de 40 secondes environ, arcmap se fige, se met en "pas de réponse" (gestionnaire des taches windows). Cependant mon programme marche bien et je peux voir (dans l'explorateur) mon fichier qui "grossit" (sa taille augmente environ toutes les 2 secondes). A la fin du processus, arcmap revient normalement et le fichier créé est exact.
Je crois savoir que ce problème est que mon processeur n'est pas assez puissant, mais je me demande si il n'y a pas un moyen de forcer arcmap à dire a windows qu'il est dans un fonctionnement normal.
En effet j'ai constaté depuis le version 9 (ou 9.1 je ne sais plus) que arcmap semble (pour les gros processus) forcer windows pour ne pas etre déclaré en "pas de réponse".

Je ne sais pas si j'ai été assez clair.

PS : j'ai optimisé mon code au maximun, je ne peux donc pas réduire plus mon programme.


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

Hors ligne

 

#2 Tue 21 November 2006 00:04

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: code VBA et arcmap qui se met en "Pas de réponse"

Bonjour,

En fait ce problème n'a absolument rien à voir avec un blocage du programme.
C'est windows qui déclare qu'une procédure qui dépasse les 30 s en temps et ceci sans rendre la main de temps en temps il indique que le programme ne réponds plus, si tu possèdes une fenêtre sur ce programme, tu verras qu'elle deviendra blanche.

En fait il faut utiliser de temps en temps la procédure doevents en VB
N'ayant pas arcview, et son VBA je ne sais pas si il a été intégré ou non.
C'est la seule méthode.

cordialement

Dernière modification par Damien BEAUSEIGNEUR (Tue 21 November 2006 00:04)

Hors ligne

 

#3 Tue 21 November 2006 08:45

nicolas valls
Participant assidu
Date d'inscription: 28 Oct 2005
Messages: 154

Re: code VBA et arcmap qui se met en "Pas de réponse"

Merci, en effet DoEvents permet a mon aplli de tourner normalement !
Encore merci


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

Hors ligne

 

#4 Tue 21 November 2006 10:42

Olivier De LA POMMERAYE
Invité

Re: code VBA et arcmap qui se met en "Pas de réponse"

Bonjour,

Le problème vient de Windows qui croit qu'ArcGIS ne tourne plus rond,
mais cela est dû au mode interprété de VBA je pense.
Pour votre soucis, le mieux est d'utiliser la barre de progression
implémenté dans ArcObjects :
    Dim oProgressDlgFact As IProgressDialogFactory   
    Dim oProgressDialog As IProgressDialog2
    Dim oStepProgressor As IStepProgressor

Bon travail,

Olivier

 

#5 Tue 21 November 2006 11:17

nicolas valls
Participant assidu
Date d'inscription: 28 Oct 2005
Messages: 154

Re: code VBA et arcmap qui se met en "Pas de réponse"

j'utilisais déja cette barre de progression, mais si j'avais le malheur de cahnger de fenetre, le retour a arcmap etait impossible, le doevents a bein résolu mon pb.
Merci quand même


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

Hors ligne

 

#6 Tue 21 November 2006 13:33

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: code VBA et arcmap qui se met en "Pas de réponse"

Bonjour,

Effectivement il s'agit d'un imbricage de Thread, VBA étant interprété le Thread Maître (Arcview) lance un thread secondaire (votre programme) et windows le considère comme sans réponse (le thread principal).

Doevents permet de résoudre le pb d'un point de vue "fonctionnement utilisateur", mais attention il laisse à l'utilisateur la possibilité de lancer d'autres procédures! Donc risque de ralentir complétement la machine! Si l'utilisateur n'est pas averti il peut comme ça lancer plusieurs commandes, qui vont donner l'impression que le PC est bloqué.

Une autre solution (testée en VB6) consiste à lancer une fenêtre d'animation comme quand vous copiez des fichiers avec l'explorateur. Toutes les n lignes traitées vous ajouter un rectangle dans la barre de progression, ce qui force le thread maître à reprendre la main. Attention cette solution est valable pour des opérations de gourmandise moyenne en ressource.

Pour ma part j'utilise une dll qui est très gourmande, la solution est d'afficher une fenêtre d'information avant lancement du process, style ("Attention processus long, soyez patient") et mise du curseur souris en mode sablier.
Tout ceci est valable pour VB6, je ne garantit rien en VBA.

Pour le changement de fenêtre il suffit d'afficher la ProgressDialog comme modale, (ou MDI fille), pour qu'il soit impossible de la masquer ou de la changer. Par contre je ne sais pas si c'est possible en VBA

A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB