Utilisation du gestionnaire d'erreur
Bonjour à tous!
Je suis débutant en VBA et j'essaye d'utiliser un gestionnaire d'erreur d'une façon spéciale, vous allez peut être trouvé ça facile mais je bloque depuis hier ^^
Voici une partie de mon code:
Windows("VLT_S100_Volume mis en distribution.xls").Activate
Range("B3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("SECTO_octobre2016 - Copie.xlsm").Activate
Sheets("VLT_S100").Select
Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Windows("VLT_S100_Volume télérelevé.xls").Activate
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("SECTO_octobre2016 - Copie.xlsm").Activate
Sheets("VLT_S100").Select
Range("B7").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Windows("VLT_S000_Volume mis en distribution.xls").Activate
Range("B3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("SECTO_octobre2016 - Copie.xlsm").Activate
Sheets("VLT_S000").Select
Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Windows("VLT_S000_Volume télérelevé.xls").Activate
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("SECTO_octobre2016 - Copie.xlsm").Activate
Sheets("VLT_S000").Select
Range("B7").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Voici le problème: en fonction des mois, il n'existe pas certains fichiers (par exemple juste le Volume distribution du secteur 100)
du coup le debogage se met en place.
J'ai bien testé un on error GoTo mais je n'arrive pas à exprimer mon idée: j'aimerai juste sauter un "bloc" (une partie de code) lorsque mon fichier n'existe pas (On error Resume Next marche mais continue sur ma page active et du coup fait n'importe quoi)
Bonsoir,
il vous faudrait utiliser On Error Resume Next avec juste la gestion de l'erreur éventuelle, car cette instruction demmande simplement à VBA de continuer "à tourner" malgré la détection d'une erreur, du coup dans votre cas, si vous demandez d'activer une feuille qui n'existe pas, l'instruction dit à VBA de continuer donc il effectue les lignes de codes prévues pour la feuille cherchée mais non trouvée sur la feuille actuellement active... Comme vous dites "...et du coup fait n'importe quoi"
Le principe serait celui là (attention ce n'est que mon idée
On Error Resume Next ' on demmande à VBA de continuer à tourner même s'il détecte une erreur
Windows("VLT_S100_Volume mis en distribution.xls").Activate
If Err > 1 Then ' une erreur est détectée
' on ne fait rien ou bien on affiche un message signalant qu'il n'y a pas cette feuille
MsgBox ("Le classeur : VLT_S100_Volume mis en distribution.xls n'existe pas.")
Else ' si pas d'erreur alors on fait ce qui suit
Range("B3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("SECTO_octobre2016 - Copie.xlsm").Activate
Sheets("VLT_S100").Select
Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End If
On Error GoTo 0 ' on réinitialise les code d'erreur sinon Err resterait en valeur de l'erreur précedemment trouvée... ou un truc comme çaEn espérant que cela vous convienne.
@ bientôt
LouReeD
Excusez-moi de répondre que maintenant..
En faite c'est presque ça sauf que je m'en fiche si le fichier n'existe pas, je voudrais qu'il continue sans me prévenir.
Donc je voudrais obtenir un code du style
On error resume next
if Err > 1 then
"continue to the next bloc"
End ifMes compétences en VBA sont trop basiques pour faire ça donc si vous avez une idée je suis tout ouïe
Bonsoir,
il suffit de supprimer la ligne
MsgBox ("Le classeur : VLT_S100_Volume mis en distribution.xls n'existe pas.")
du coup s'il y a erreur le code ne fait rien et continue sa "course"...
La ligne était juste là pour vous permettre de suivre ce qui se passe...
@ bientôt
LouReed