Problème de fin d'exécution d'une macro [Résolu]

Signaler
Messages postés
7
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
31 janvier 2010
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour,

étant novice en matière de vba, je suis confronté à un problème insoluble pour mes modestes capacités.

Le problème vient de l'exécution de cette macro qui ouvre des fichiers excel, modifie le format des nombres, les copie et les enregistre dans un document texte.

La macro fonctionne bien et effectue bien l'ensemble des opérations en revanche l'exécution se poursuit malgrés l'affichage de la msgbox juste avant le "End Sub".

Je ne vois pas comment finaliser proprement l'exécution de cette macro en conservant la fenêtre affichée.

Je vous remercie pour votre aide.


Private Sub CommandButton1_Click()
Dim intLig, intCol, i As Integer

ChDir ("D:\Personnel\Données")
FichaOuvrir = _
Application.GetOpenFilename(("Classeurs Excel(*.xls),*.xls"), , , , True)
If IsArray(FichaOuvrir) Then
For i = LBound(FichaOuvrir, 1) To UBound(FichaOuvrir, 1)
intLig = 0
intCol = 0
Workbooks.Open FichaOuvrir(i)

' Selection des données excel et modification du format
intLig = ActiveSheet.UsedRange.Rows.Count
intCol = ActiveSheet.UsedRange.Columns.Count

Range("b2", Cells(intLig, intCol)).Select
Selection.NumberFormat = "0.00000000E+00"
Range("a1", Cells(intLig, intCol)).Copy

' Creation des fichiers txt
If TextBox1 <> "" Then
fFileXls = "xls_" & TextBox1 & i
Else
fFileXls = "xls_nom" & i
End If

ActiveWorkbook.SaveAs Filename:= _
fFileXls, FileFormat:=xlText

Application.CutCopyMode = False

Application.DisplayAlerts = False
ActiveWorkbook.Saved = False
ActiveWorkbook.Close
Next i

Else
MsgBox "Transfert des fichiers Excel annulé"
End If

MsgBox "Transfert des fichiers Excel effectué"

End Sub

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Ok
Si le répertoire/fichier est bloqué par l'appli, ce n'est pas parce que la macro est toujours en run, c'est que tu as ouvert des fichiers et pas refermés.
Pour savoir qui bloque, utilise cet http://logiciel.codes-sources.com/logiciels/Unlocker-363.aspx qui désignera le coupable.

Si c'est bien Excel/Word qui bloque, vérifie pas-à-pas l'exécution de ton programme et vérifie que chaque fichier ouvert est bien refermé.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Salut Karim et bienvenu
Quand tu dis "l'exécution se poursuit", tu entends quoi ?
Parce qu'il n'y a plus rien après, à part la sortie de la Sub ...
D'ailleurs, en cas où le "If IsArray(FichaOuvrir) Then " n'est pas vrai, tu auras 2 MsgBox à la suite : Celle qui dit "Annulé" et la derniere "Effectué"
Je pense qu'il faudrait que tu mettes la MsgBox "Effectué" entre le Next i et le Else

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
7
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
31 janvier 2010

Bonjour Jack et merci pour ta réponse,

Je corrigerai le problème des deux fenêtres effectivement.

Ce que j'entends par "l'exécution se poursuit" c'est que lorsque je lance la macro depuis l'éditeur VBA, l'éditeur affiche que la macro est encore en cours d'exécution. Bon, après avoir réfléchi, je pense que c'est tout à fait normal mais je pensais que cela pouvait expliquer mon "vrai" problème. Sans trop entrer dans les détailsmais un peu quand même, la macro complète se compose de trois fonctions. La première crée un dossier à l'aide de la méthode "Scripting.FileSystemObject", la deuxième ouvre un fichier Word et le sauvegarde dans ce dossier au format txt et, enfin, la troisième est celle-ci, elle sauvegarde des données de fichiers excel au format txt et les place dans le dossier. Les trois macros indépendantes fonctionnent parfaitement, lorsque je les lance toutes dans cette ordre tout fonctionne bien : les bons fichiers se mettent dans le bon dossier. En revanche, à la fin de la macro (en cours d'exécution ou arrêter manuellement) je ne peux pas supprimer le dossier créer (un message indique qu'il est en cours d'utilisation par un autre programme, ce n'est pas le cas lorsque j'utilise la macro de création de dossier seule) je peux malgré tout accéder aux fichiers txt et/ou les effacer... (Le fait de pouvoir effacer le dossier sans fermer la fenêtre est une fonctionnalité nécessaire pour son utilisation.)

Bon pour résumer, car cette brève explication a dû endormir la moitié de l'assistance, est-ce que mon problème viendrait du fait que le chemin du dossier soit conserver en mémoire et donc non modifiable (ou un truc approchant), si oui comment l'effacer.

Merci, déjà d'avoir eu la patience de tout lire.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Outch
Compliqué tout ça.
3 macros qui marchent.
Quand tu en interrompts une (celle en cours), tu ne peux plus supprimer le dossier.
Cette phrase me turlupine (du verbe turlupiner, que tout le monde connait) : "Le fait de pouvoir effacer le dossier sans fermer la fenêtre est une fonctionnalité nécessaire pour son utilisation"
C'est l'inverse que ce que tu annonces. Je ne comprends pas trop + "Fenêtre" : de quoi parles-tu ?

Interrompre une macro n'est pas une chose à faire sans raison.
Si tu interrompts une macro en plein milieu, elle peut avoir fait un Open et l'attribution d'un numéro de fichier reste actif, même après cette interruption - d'où le blocage potentiel.
C'est à toi de gérer l'interruption afin, justement, de clore proprement les fichiers ouverts.
Une interruption par le bouton Stop de l'IDE est infaisable, mais une interruption par bouton judicieusement appelé "Annulation" ou "Arrêter tout" peut être gérer par code.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
7
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
31 janvier 2010

OK, je ne suis pas très clair... et je ne suis pas sûr que mes explications iront vers plus de clarté mais je me lance.

J'ai créer une fenêtre (useform) à partir de laquelle je lance la macro. Cette macro à trois fonctions : créer un répertoire, traiter le fichier word et enfin traiter les fichiers excel. Le résultat final est donc la création d'un répertoire contenant des fichiers txt issus d'un fichier word et d'un ou plusieurs fichiers excel. Une fois la macro exécutée, l'utilisateur doit pouvoir déplacer ce dossier, le copier ou l'effacer, c'est ce que j'entends par : "Le fait de pouvoir effacer le dossier sans fermer la fenêtre est une fonctionnalité nécessaire pour son utilisation". La macro a bien été exécutée jusqu'à la fin en revanche elle est en cours d'exécution pour l'éditeur vba - exemple : créer une useform avec un bouton, associer à ce bouton l'affichage d'une msgbox et exécuter à partir de l'éditeur ; à la fin de l'exécution, l'éditeur vba indique quand même que la macro est en cours d'exécution.

Je ne sais pas si c'est lié au fait que je ne puisse pas effacer le dossier mais c'est ce que je constate et comment libérer ce fameux dossier ???

De plus, je ne comprends pas pourquoi il serait nécessaire de placer un nouveau bouton pour signifier à la macro (dont l'exécution est terminée car on arrive bien au bout du code) de s'arrêter.

Merci encore Jack d'essayer de comprendre mon problème. Désolé pour la lenteur de mes réponses mais je n'ai pas pu accéder au site en fin de semaine et ensuite il y a le we.

Bonne fin de we à tous.
Messages postés
7
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
31 janvier 2010

Merci, le fameux utilitaire fonctionne très bien. Les fichiers txt créés dans le répertoire ne sont "attachés" a aucun processus donc là ça va. En revanche, le répertoire est utilisé par excel : l'utilitaire indique que le chemin est verrouillé. Je vais donc essayer de le libérer.

... et je viens de trouver. Il semble qu'il s'agit de l'instruction "ChDir" qui verrouille le chemin. Je termine donc avec un "ChDir ("chemin bidon")" pour libérer le chemin. Du coup je peux effacer mon dossier ; c'est pas très joli comme méthode mais ça fonctionne.

Merci beaucoup Jack pour ta persévérance.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
De rien.
C'est bon à savoir.