Fonction Workbooks.open arrête l'exécution sans code défaut
Bonjour à tous,
je viens vers vous car je me retrouve bloqué par une simple ouverture de fichier qui stop mon exécution.
la macro fonctionnement parfaitement en pas à pas mais pas en exécution direct.
le principe :
la macro appelle le gestionnaire d'ouverture de fichier (filtré sur de html)
je contrôle si le gestionnaire a renvoyé une adresse ou si il a été fermé
dans le cas de renvoie du lien, j'ouvre le fichier via la fonction open
et je termine la macro.
cette macro est appelé par une macro principale qui gère toute l'exécution
il se trouve que j'ai tout essayé,
changer le type de fichier chargé,
supprimer cette macro pour l'intégrer en direct dans la macro principale,
mais rien y fait, elle plante a chaque fois
elle ouvre le fichier et arrête l’exécution.
je ne sais plus quoi faire et aucun forum remonte ce problème.
voici le code de la macro et celuit de la macro principale
Dim retour As Integer
Dim nbligne As Integer
Dim numzone As Integer
Dim numsemaine As Integer
Dim controle As Integer
Dim zone As String
Dim result As String
Dim result1 As String
Dim result2 As String
Dim saisie As String
Dim i As Integer
Option Explicit
Sub traitement_hebdomadaire()
Static result0 As String
On Error GoTo errorHandler
If IsEmpty(result0) = False Then
result0 = ActiveWorkbook.Name
result1 = ActiveWorkbook.Name
Else
Windows(result0).Activate
End If
Sheets(1).Select
retour = MsgBox("lancer le traitement hebdomadaire?", vbOKCancel, "Traitement hebdomadaire")
If retour = 1 Then
choix_periode_EMS
If retour = 6 Then
boucle:
choix_sauvegarde_EMS
If retour = 1 Then
ouverture_fichier_EMS 'ici c'est la fonction appelée'
If retour = 1 Then
trie_sauvegarde
If retour = 10 Then GoTo manuel
retour = MsgBox("Continuer sur une autre zone?", vbYesNo, "Continuer")
If retour = 6 Then GoTo boucle
Else
retour = MsgBox("lancement annulé", vbOKOnly, "Annulation")
End If
Else
retour = MsgBox("Pas de zone seclectionnée", vbOKOnly, "Annulation")
End If
Else
retour = MsgBox("Pas de semaine seclectionnée", vbOKOnly, "Annulation")
End If
Else
retour = MsgBox("rapatriement annulé", vbOKOnly, "Annulation")
End If
If result2 <> "" Then
Windows(result2).Close
End If
manuel:
errorHandler:
MsgBox Err.Number & vbLf & Err.Description
End Sub
Private Sub ouverture_fichier_EMS()
Dim wbExcel As Excel.Workbook 'Classeur Excel'
result = (Application.GetOpenFilename("Web html(*.html),*.html"))
If result = "Faux" Then
retour = MsgBox("chargement fichier annulé", vbOKOnly, "Annulation")
Else
Workbooks.OpenText (result) 'ici c'est là où la fonction arrête l'exécution'
result2 = ActiveWorkbook.Name
End If
End Subavez-vous une idée sur une ingénierie que je ne respecterai pas bien ou autre...
Bonjour,
Il serait bien que tu mettes ton code sous balises Code, et que tu l'indentes s'il ne l'est pas...
Cordialement.
Bonjour MFerrand.
c'est fait. je ne connaissais pas cette fonction.
une idée sinon sur le pourquoi?
Bonjour,
Pour le moment aucune mais allons-y pas à pas...
Sub traitement_hebdomadaire()
Static result0 As String
On Error GoTo errorHandler
If IsEmpty(result0) = False Then
result0 = ActiveWorkbook.Name
result1 = ActiveWorkbook.Name
Else
Windows(result0).Activate
End If
Sheets(1).Select
retour = MsgBox("lancer le traitement hebdomadaire?", vbOKCancel, "Traitement hebdomadaire")
If retour = vbOK Then
choix_periode_EMS
If retour = vbYes ThenJe reprends le début de ta procédure, et quelques éléments (que j'ai surligné) m'arrêtent...
En outre, je me demande pourquoi une variable statique (mais à voir plus tard...) et je n'aime pas travailler avec des Select et Activate, inutiles et qui peuvent brouiller les cartes, ni l'objet Window dès lors qu'il ne s'agit pas d'affichage...
Mais reprenons au début, la première condition un peu contournée aurait due (plus logiquement, et plus rapide à l'exécution) s'écrire:
If Not IsEmpty(result0) ThenElle pose divers problèmes ! D'abord IsEmpty est une fonction applicable à une variable de type Variant et est non pertinente pour les autres types de variables. Ensuite, tu lui affecterais une valeur si elle n'est pas vide, et tu l'utiliserais pour une activation si elle est vide ! Il y a peut-être là une erreur d'interprétation... ?
Lors du lancement de la macro, si elle est lancée par l'utilisateur, cela suppose que le classeur actif est le classeur qui contient la macro. Il serait plus clair dans ce cas d'utiliser ThisWorkbook plutôt que ActiveWorkbook...
J'ai remplacé les valeurs indiquées pour retour par les constantes vb, ce qui sera plus clair : si on a cliqué sur OK, on lance une procédure (absente, il serait bon de l'avoir !)
Suit immédiatement la condition visant à définir si on a cliqué sur Oui ! Or comme on n'avait le choix qu'entre OK et Annuler, il serait difficile d'avoir pu cliquer sur Oui !?
Dans ces quelques lignes, il y a déjà quantité de choses à élucider qu'il conviendrait d'élucider avant de poursuivre...
Bonjour à tous,
J'ai résolue le problème il y a un bon moment déjà.
le problème venait du fichier même que j'ai du recommencer et copier sons contenu.
ensuite tout est rentré dans l'ordre.
merci et bon courage à tous