Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

On error ne fonctionne qu'une fois

5 réponses
Avatar
Laurent
Bonjour,
J'ai un problème sur une macro Excel, explication :
Ma macro va lire des noms de feuille dans une feuille paramètres, cette
feuille contient le noms d'autres feuille ainsi que le chemin et le nom de
fichiers a y copier.
Dans uns boucle While, je vais effacer le contenu de la feuille
correspondant, j'ouvre le fichier qui va avec cette feuille je copie ce
fichier sur ma feuille et je lance des calculs complémentaires.
Dans le cas ou le fichier n'existe pas, je dois laisser ma feuille vide,
j'ai donc utiliser un "on error Goto suite" dans ma boucle sachant que le
"suite:" est juste avant mon wend.
Sur le premier fichier pas de problème si le fichier n'existe aps je passe
au suivant mais sur le deuxième fichie j'ai l'erreur 1004 qui s'affiche et ma
macro est bloquée.
Pouvez vous m'aider SVP ?
J'ai essayer en mettant le on error dans la boucle ou au début de la macro
mais c'est le même résultat, il ne marche qu'une fois.

Voici ma boucle :
While i < j
'Nom de la feuille
NomFeuille = Sheets("Paramétrage").Cells(i, 1).Value
Sheets(NomFeuille).Activate
'Selectionne tout le tableau pour effacer les données
'...........
'fin de la sélection et de la suppression des données

'Ouvrir le fichier texte
NomFichier = Sheets("Paramétrage").Cells(i, 2).Value & "\" & jour &
Sheets("Paramétrage").Cells(i, 4)
On Error GoTo suite12
Workbooks.OpenText Filename:=NomFichier, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True,
Semicolon:= _
False, Comma:=False, Space:=False, Other:=False,
FieldInfo:=Array(Array _
(1, 1), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 1),
Array(6, 1), Array(7, 1), Array(8 _
, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1),
Array(13, 1), Array(14, 1), _
Array(15, 1), Array(16, 1), Array(17, 2), Array(18, 1),
Array(19, 1), Array(20, 1), Array( _
21, 2), Array(22, 1), Array(23, 1), Array(24, 2), Array(25, 1),
Array(26, 1), Array(27, 1), _
Array(28, 2))
On Error GoTo 0
'Récupération du nom de fichier
NomFichier2 = ActiveWorkbook.Name

'copie des données sur le nouveau fichier
Windows(NomFichier2).Activate
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Windows(FichierTRV).Activate
Sheets(NomFeuille).Activate
Range("E1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'fermer le document source
Windows(NomFichier2).Close False

'traitement
'......
'fin de traitement

suite12:
i = i + 1
Wend

Pour info, je suis sous Windows XP Office 2000 SR-1

Merci d'avance de votre aide
Laurent

5 réponses

Avatar
Youky
Bonjour Laurent,
Non testé, mais je pense qu'il faut rajouter Err=0

suite12:
Err=0 'à rajouter
i = i + 1
Wend


"Laurent" a écrit dans le message de
news:
Bonjour,
J'ai un problème sur une macro Excel, explication :
Ma macro va lire des noms de feuille dans une feuille paramètres, cette
feuille contient le noms d'autres feuille ainsi que le chemin et le nom de
fichiers a y copier.
Dans uns boucle While, je vais effacer le contenu de la feuille
correspondant, j'ouvre le fichier qui va avec cette feuille je copie ce
fichier sur ma feuille et je lance des calculs complémentaires.
Dans le cas ou le fichier n'existe pas, je dois laisser ma feuille vide,
j'ai donc utiliser un "on error Goto suite" dans ma boucle sachant que le
"suite:" est juste avant mon wend.
Sur le premier fichier pas de problème si le fichier n'existe aps je passe
au suivant mais sur le deuxième fichie j'ai l'erreur 1004 qui s'affiche et
ma
macro est bloquée.
Pouvez vous m'aider SVP ?
J'ai essayer en mettant le on error dans la boucle ou au début de la macro
mais c'est le même résultat, il ne marche qu'une fois.

Voici ma boucle :
While i < j
'Nom de la feuille
NomFeuille = Sheets("Paramétrage").Cells(i, 1).Value
Sheets(NomFeuille).Activate
'Selectionne tout le tableau pour effacer les données
'...........
'fin de la sélection et de la suppression des données

'Ouvrir le fichier texte
NomFichier = Sheets("Paramétrage").Cells(i, 2).Value & "" & jour &
Sheets("Paramétrage").Cells(i, 4)
On Error GoTo suite12
Workbooks.OpenText Filename:=NomFichier, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:= _
False, Comma:úlse, Space:úlse, Other:úlse,
FieldInfo:=Array(Array _
(1, 1), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 1),
Array(6, 1), Array(7, 1), Array(8 _
, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1),
Array(13, 1), Array(14, 1), _
Array(15, 1), Array(16, 1), Array(17, 2), Array(18, 1),
Array(19, 1), Array(20, 1), Array( _
21, 2), Array(22, 1), Array(23, 1), Array(24, 2), Array(25, 1),
Array(26, 1), Array(27, 1), _
Array(28, 2))
On Error GoTo 0
'Récupération du nom de fichier
NomFichier2 = ActiveWorkbook.Name

'copie des données sur le nouveau fichier
Windows(NomFichier2).Activate
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Windows(FichierTRV).Activate
Sheets(NomFeuille).Activate
Range("E1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'fermer le document source
Windows(NomFichier2).Close False

'traitement
'......
'fin de traitement

suite12:
i = i + 1
Wend

Pour info, je suis sous Windows XP Office 2000 SR-1

Merci d'avance de votre aide
Laurent


Avatar
Pounet95
Bonjour,
A la volée sans approfondir ( j'sais q'c'est pas bien, mais... )
Perso, ,j'aurai mis un Exit sub juste avant le Suite12

......
Exit sub

Suite12:

End Sub


--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Laurent" a écrit dans le message de
news:
Bonjour,
J'ai un problème sur une macro Excel, explication :
Ma macro va lire des noms de feuille dans une feuille paramètres, cette
feuille contient le noms d'autres feuille ainsi que le chemin et le nom de
fichiers a y copier.
Dans uns boucle While, je vais effacer le contenu de la feuille
correspondant, j'ouvre le fichier qui va avec cette feuille je copie ce
fichier sur ma feuille et je lance des calculs complémentaires.
Dans le cas ou le fichier n'existe pas, je dois laisser ma feuille vide,
j'ai donc utiliser un "on error Goto suite" dans ma boucle sachant que le
"suite:" est juste avant mon wend.
Sur le premier fichier pas de problème si le fichier n'existe aps je passe
au suivant mais sur le deuxième fichie j'ai l'erreur 1004 qui s'affiche et
ma
macro est bloquée.
Pouvez vous m'aider SVP ?
J'ai essayer en mettant le on error dans la boucle ou au début de la macro
mais c'est le même résultat, il ne marche qu'une fois.

Voici ma boucle :
While i < j
'Nom de la feuille
NomFeuille = Sheets("Paramétrage").Cells(i, 1).Value
Sheets(NomFeuille).Activate
'Selectionne tout le tableau pour effacer les données
'...........
'fin de la sélection et de la suppression des données

'Ouvrir le fichier texte
NomFichier = Sheets("Paramétrage").Cells(i, 2).Value & "" & jour &
Sheets("Paramétrage").Cells(i, 4)
On Error GoTo suite12
Workbooks.OpenText Filename:=NomFichier, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:= _
False, Comma:úlse, Space:úlse, Other:úlse,
FieldInfo:=Array(Array _
(1, 1), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 1),
Array(6, 1), Array(7, 1), Array(8 _
, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1),
Array(13, 1), Array(14, 1), _
Array(15, 1), Array(16, 1), Array(17, 2), Array(18, 1),
Array(19, 1), Array(20, 1), Array( _
21, 2), Array(22, 1), Array(23, 1), Array(24, 2), Array(25, 1),
Array(26, 1), Array(27, 1), _
Array(28, 2))
On Error GoTo 0
'Récupération du nom de fichier
NomFichier2 = ActiveWorkbook.Name

'copie des données sur le nouveau fichier
Windows(NomFichier2).Activate
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Windows(FichierTRV).Activate
Sheets(NomFeuille).Activate
Range("E1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'fermer le document source
Windows(NomFichier2).Close False

'traitement
'......
'fin de traitement

suite12:
i = i + 1
Wend

Pour info, je suis sous Windows XP Office 2000 SR-1

Merci d'avance de votre aide
Laurent


Avatar
Laurent
Bonjour Youky,
Merci pour ta réponse mais désolé ce n'est pas mieux.
J'ai également essayé avec et sans le On Error Goto 0

Cdlmt
Laurent


Bonjour Laurent,
Non testé, mais je pense qu'il faut rajouter Err=0

suite12:
Err=0 'à rajouter
i = i + 1
Wend


"Laurent" a écrit dans le message de
news:
Bonjour,
J'ai un problème sur une macro Excel, explication :
Ma macro va lire des noms de feuille dans une feuille paramètres, cette
feuille contient le noms d'autres feuille ainsi que le chemin et le nom de
fichiers a y copier.
Dans uns boucle While, je vais effacer le contenu de la feuille
correspondant, j'ouvre le fichier qui va avec cette feuille je copie ce
fichier sur ma feuille et je lance des calculs complémentaires.
Dans le cas ou le fichier n'existe pas, je dois laisser ma feuille vide,
j'ai donc utiliser un "on error Goto suite" dans ma boucle sachant que le
"suite:" est juste avant mon wend.
Sur le premier fichier pas de problème si le fichier n'existe aps je passe
au suivant mais sur le deuxième fichie j'ai l'erreur 1004 qui s'affiche et
ma
macro est bloquée.
Pouvez vous m'aider SVP ?
J'ai essayer en mettant le on error dans la boucle ou au début de la macro
mais c'est le même résultat, il ne marche qu'une fois.

Voici ma boucle :
While i < j
'Nom de la feuille
NomFeuille = Sheets("Paramétrage").Cells(i, 1).Value
Sheets(NomFeuille).Activate
'Selectionne tout le tableau pour effacer les données
'...........
'fin de la sélection et de la suppression des données

'Ouvrir le fichier texte
NomFichier = Sheets("Paramétrage").Cells(i, 2).Value & "" & jour &
Sheets("Paramétrage").Cells(i, 4)
On Error GoTo suite12
Workbooks.OpenText Filename:=NomFichier, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:= _
False, Comma:úlse, Space:úlse, Other:úlse,
FieldInfo:=Array(Array _
(1, 1), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 1),
Array(6, 1), Array(7, 1), Array(8 _
, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1),
Array(13, 1), Array(14, 1), _
Array(15, 1), Array(16, 1), Array(17, 2), Array(18, 1),
Array(19, 1), Array(20, 1), Array( _
21, 2), Array(22, 1), Array(23, 1), Array(24, 2), Array(25, 1),
Array(26, 1), Array(27, 1), _
Array(28, 2))
On Error GoTo 0
'Récupération du nom de fichier
NomFichier2 = ActiveWorkbook.Name

'copie des données sur le nouveau fichier
Windows(NomFichier2).Activate
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Windows(FichierTRV).Activate
Sheets(NomFeuille).Activate
Range("E1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'fermer le document source
Windows(NomFichier2).Close False

'traitement
'......
'fin de traitement

suite12:
i = i + 1
Wend

Pour info, je suis sous Windows XP Office 2000 SR-1

Merci d'avance de votre aide
Laurent







Avatar
anonymousA
Bonjour,

j'ai testé une proc similaire et assez bizarrement, en effet, la 1ere
fois où il y a une erreur elle est gérée correctement alors que la
fois suivante ca ne fonctionne pas , et ce même si j'ai rajouté (
comme d'ailleurs te l'avait signalé Youki) , un err.clear dans le
traitement d'erreur).Tout se passe comme si la 1ere fois que le
programme rencontre On error Goto suite12 , il en tenait compte mais
qu'ensuite bien que l'on ait pris la peine de remettre les erreurs à 0
, il n'en tenait plus compte. Phénomène bien étrange que d'ailleurs
je constate pour la 1ere fois, n'ayant peut-être jamais rencontré ce
cas de figure.

2 solutions sont possibles pour s'en sortir:
1-en sortant le traitement d'erreur de la boucle while et en renvoyant
la fin du traitement d 'erreur dans la boucle while par une instruction
resume sur une étiquette que j'ai nommée Retour.
2- en laissant ton etiquette "suite12" où elle est et en ecrivant au
lieu de on error goto suite , on error resume next et en testant
immédiatement après l'instruction d'ouverture du fichier en écrivant

If Err.Number <> 0 Then
Err.Clear
GoTo suite12
End If
end if

toutes ces considérations décrites, je te propose donc la proc
suivante dans le cadre de la solution 1. La solution 2 étant une
variante mineure de ta propre procédure, je te laisse le soin de la
mettre en oeuvre par toi même.

While i < j
'Nom de la feuille
NomFeuille = Sheets("Paramétrage").Cells(i, 1).Value
Sheets(NomFeuille).Activate
'Selectionne tout le tableau pour effacer les données
'...........
'fin de la sélection et de la suppression des données


'Ouvrir le fichier texte
NomFichier = Sheets("Paramétrage").Cells(i, 2).Value & "" &
jour &
Sheets("Paramétrage").Cells(i, 4)
On Error GoTo suite12
Workbooks.OpenText Filename:=NomFichier, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:= _
False, Comma:úlse, Space:úlse, Other:úlse,
FieldInfo:=Array(Array _
(1, 1), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 1),

Array(6, 1), Array(7, 1), Array(8 _
, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12,
1),
Array(13, 1), Array(14, 1), _
Array(15, 1), Array(16, 1), Array(17, 2), Array(18, 1),
Array(19, 1), Array(20, 1), Array( _
21, 2), Array(22, 1), Array(23, 1), Array(24, 2), Array(25,
1),
Array(26, 1), Array(27, 1), _
Array(28, 2))
On Error GoTo 0
'Récupération du nom de fichier
NomFichier2 = ActiveWorkbook.Name


'copie des données sur le nouveau fichier
Windows(NomFichier2).Activate
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Windows(FichierTRV).Activate
Sheets(NomFeuille).Activate
Range("E1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'fermer le document source
Windows(NomFichier2).Close False


'traitement
'......
'fin de traitement


retour:
I=I+1
Wend

exit sub
suite12:
err.clear
resume retour

A+
Avatar
Laurent
Alors la bravo, ca fonctionne comme ca, merci beaucoup. Ca fait un peu
comment faire simple quand on peut faire compliquer mais l'essentiel pour moi
c'est qua ça fonctionne.
J'avais déjà rencontré le problème dans le passé, mais impossible de me
souvenir comment j'avais contourner le problème (la meilleure solution étant
de ne pas avoir de problème, mais lorsque l'on récupère des fichiers générés
en automatique.... vaut mieux prévoir).

Encore merci
Laurent


Bonjour,

j'ai testé une proc similaire et assez bizarrement, en effet, la 1ere
fois où il y a une erreur elle est gérée correctement alors que la
fois suivante ca ne fonctionne pas , et ce même si j'ai rajouté (
comme d'ailleurs te l'avait signalé Youki) , un err.clear dans le
traitement d'erreur).Tout se passe comme si la 1ere fois que le
programme rencontre On error Goto suite12 , il en tenait compte mais
qu'ensuite bien que l'on ait pris la peine de remettre les erreurs à 0
, il n'en tenait plus compte. Phénomène bien étrange que d'ailleurs
je constate pour la 1ere fois, n'ayant peut-être jamais rencontré ce
cas de figure.

2 solutions sont possibles pour s'en sortir:
1-en sortant le traitement d'erreur de la boucle while et en renvoyant
la fin du traitement d 'erreur dans la boucle while par une instruction
resume sur une étiquette que j'ai nommée Retour.
2- en laissant ton etiquette "suite12" où elle est et en ecrivant au
lieu de on error goto suite , on error resume next et en testant
immédiatement après l'instruction d'ouverture du fichier en écrivant

If Err.Number <> 0 Then
Err.Clear
GoTo suite12
End If
end if

toutes ces considérations décrites, je te propose donc la proc
suivante dans le cadre de la solution 1. La solution 2 étant une
variante mineure de ta propre procédure, je te laisse le soin de la
mettre en oeuvre par toi même.

While i < j
'Nom de la feuille
NomFeuille = Sheets("Paramétrage").Cells(i, 1).Value
Sheets(NomFeuille).Activate
'Selectionne tout le tableau pour effacer les données
'...........
'fin de la sélection et de la suppression des données


'Ouvrir le fichier texte
NomFichier = Sheets("Paramétrage").Cells(i, 2).Value & "" &
jour &
Sheets("Paramétrage").Cells(i, 4)
On Error GoTo suite12
Workbooks.OpenText Filename:=NomFichier, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:= _
False, Comma:úlse, Space:úlse, Other:úlse,
FieldInfo:=Array(Array _
(1, 1), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 1),

Array(6, 1), Array(7, 1), Array(8 _
, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12,
1),
Array(13, 1), Array(14, 1), _
Array(15, 1), Array(16, 1), Array(17, 2), Array(18, 1),
Array(19, 1), Array(20, 1), Array( _
21, 2), Array(22, 1), Array(23, 1), Array(24, 2), Array(25,
1),
Array(26, 1), Array(27, 1), _
Array(28, 2))
On Error GoTo 0
'Récupération du nom de fichier
NomFichier2 = ActiveWorkbook.Name


'copie des données sur le nouveau fichier
Windows(NomFichier2).Activate
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Windows(FichierTRV).Activate
Sheets(NomFeuille).Activate
Range("E1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'fermer le document source
Windows(NomFichier2).Close False


'traitement
'......
'fin de traitement


retour:
I=I+1
Wend

exit sub
suite12:
err.clear
resume retour

A+