Boucle avec gestion d'erreur
Résolu/Fermé
Jimmy59116
Messages postés
45
Date d'inscription
jeudi 27 novembre 2008
Statut
Membre
Dernière intervention
30 janvier 2013
-
4 déc. 2012 à 16:14
Jimmy59116 Messages postés 45 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 30 janvier 2013 - 5 déc. 2012 à 09:05
Jimmy59116 Messages postés 45 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 30 janvier 2013 - 5 déc. 2012 à 09:05
A voir également:
- Boucle avec gestion d'erreur
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Logiciel gestion photo gratuit - Guide
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
2 réponses
Bonjour,
Tu ne places pas ta gestion d'erreur au bon endroit
1)encadrer LA ligne sensée générer une erreur par les instructions
On Error GoTo erreur
-----
On Error GoTo 0
En effet, s'il n'y a pas d'erreur tu dois desactiver immediatement le gestionnaire
2)Si une erreur est générée, l'exécution est déroutée vers l'etiquette erreur, puis doit revenir vers la boucle pour continuer, grace à l'instruction Resume qui branche l'execution sur l'etiquette suite.
3)A la fin de la boucle, on met l'instruction Exit Sub, pour obliger le programme à quitter, sinon les lignes du gestionnaire d'erreur serait executées.
Option Explicit
Dim NOM
Dim i
Dim BOUT1
Dim BOUT2
Sub texte()
For i = 1 To 500
' Un astérix en colonne A indique que la ligne est à traiter
Windows("KDO4.xls").Activate
Range("A1").Select
Selection.End(xlDown).Select
' Je récupère les informations à mettre dans le second fichier
ActiveCell.Offset(0, 2).Select
NOM = ActiveCell.Value
ActiveCell.Offset(0, 10).Select
BOUT1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
BOUT2 = ActiveCell.Value
' Je rentre les informations dans le second fichier
Windows("KDO3.xls").Activate
' colonne qui contient les noms
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
On Error GoTo erreur
Selection.Find(What:=NOM, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
On Error GoTo 0
ActiveCell.Offset(0, 51).Select
ActiveCell.Value = BOUT1
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = BOUT2
' Je supprime l'astérix pour signaler que la ligne est traitée
Windows("KDO2.xls").Activate
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.ClearContents
suite:
' Je vide mes variables pour éviter des erreurs
BOUT1 = ""
BOUT2 = ""
Next i
Exit Sub
erreur:
' Traitement des erreurs : j'indique que la ligne est en erreur
' puis je supprime l'astérix pour montrer que la ligne est traitée
Windows("KDO4.xls").Activate
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 15).Select
ActiveCell.Value = "erreur"
ActiveCell.Offset(0, -15).Select
ActiveCell.ClearContents
' Je stoppe la gestion d'erreur pour revenir à un traitement normal
Resume suite
End Sub
Tu ne places pas ta gestion d'erreur au bon endroit
1)encadrer LA ligne sensée générer une erreur par les instructions
On Error GoTo erreur
-----
On Error GoTo 0
En effet, s'il n'y a pas d'erreur tu dois desactiver immediatement le gestionnaire
2)Si une erreur est générée, l'exécution est déroutée vers l'etiquette erreur, puis doit revenir vers la boucle pour continuer, grace à l'instruction Resume qui branche l'execution sur l'etiquette suite.
3)A la fin de la boucle, on met l'instruction Exit Sub, pour obliger le programme à quitter, sinon les lignes du gestionnaire d'erreur serait executées.
Option Explicit
Dim NOM
Dim i
Dim BOUT1
Dim BOUT2
Sub texte()
For i = 1 To 500
' Un astérix en colonne A indique que la ligne est à traiter
Windows("KDO4.xls").Activate
Range("A1").Select
Selection.End(xlDown).Select
' Je récupère les informations à mettre dans le second fichier
ActiveCell.Offset(0, 2).Select
NOM = ActiveCell.Value
ActiveCell.Offset(0, 10).Select
BOUT1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
BOUT2 = ActiveCell.Value
' Je rentre les informations dans le second fichier
Windows("KDO3.xls").Activate
' colonne qui contient les noms
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
On Error GoTo erreur
Selection.Find(What:=NOM, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
On Error GoTo 0
ActiveCell.Offset(0, 51).Select
ActiveCell.Value = BOUT1
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = BOUT2
' Je supprime l'astérix pour signaler que la ligne est traitée
Windows("KDO2.xls").Activate
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.ClearContents
suite:
' Je vide mes variables pour éviter des erreurs
BOUT1 = ""
BOUT2 = ""
Next i
Exit Sub
erreur:
' Traitement des erreurs : j'indique que la ligne est en erreur
' puis je supprime l'astérix pour montrer que la ligne est traitée
Windows("KDO4.xls").Activate
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 15).Select
ActiveCell.Value = "erreur"
ActiveCell.Offset(0, -15).Select
ActiveCell.ClearContents
' Je stoppe la gestion d'erreur pour revenir à un traitement normal
Resume suite
End Sub
Jimmy59116
Messages postés
45
Date d'inscription
jeudi 27 novembre 2008
Statut
Membre
Dernière intervention
30 janvier 2013
1
5 déc. 2012 à 09:05
5 déc. 2012 à 09:05
Excellent, merci pour cette explication qui non seulement répond à la question du jour mais qui me permet en plus de découvrir de nouvelles fonctions.
Bonne journée !
Jimmy
Bonne journée !
Jimmy