IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

gerer un type d'erreur particulier


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut gerer un type d'erreur particulier
    Bonjour,

    Je n'arrive pas a gerer un type d'erreur en particulier, je veux dire je ne peux pas mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On error goto resolution
    car pour le coup il m'envoie dans resolution pour toutes les erreurs . ce qui est tres genant , je voudrais qu'il ne m'envoie la que pour un type d'erreur. j'ai essayé de creer une erreur avec un un error(401) mais peut importe.

    Moi ce que je souhaites c'est qu'il m'envoie dans cette resulution seulement si c'est un type d'erreur. En creant une erreur avec error , je pense que l on peut gerer ca mais j'aimerais une autre ecriture que le on error qui s'applique à tout


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
          On Error Resume Next
            'Feuilles necessaires
            Set xlsheet = ThisWorkbook.Worksheets("P&L")
            Set xlsheet2 = ThisWorkbook.Worksheets("HistoPnL")
     
                'Complete les données PnL
            If Not Verif(xlbook) Then Error (401)
                GoTo gestionP
            end if
            Call PnL.PnL(xlbook)
            Call PnLDailyToHisto(xlsheet, xlsheet2)
     
    gestionP:
            FileName = xlbook.Name
            xlbook.Close
            Set xlbook = Nothing
            Set xlsheet = ThisWorkbook.Worksheets("Lien fichiers")
            Lien = xlsheet.Range("LienPb").Value & "\" & FileName
            rep = MsgBox("Un probleme avec le fichier" & FileName & " est survenu, déposez une nouvelle extraction " _
            & "dans le dossier spécifié sur la feuille Lien fichiers et continuer la macro ou quittez.", vbYesNo)
            If rep = 6 Then
                Set xlbook = Workbooks.Open(Lien, , True)
                Set xlsheet = Nothing
                If Verif(xlbook) Then Resume Next Else: End
            End If
    j'ai ceci mais c'est pas terible

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    on error resume Next
    If err=401 then msgbox "401"

  3. #3
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    D'accord donc c'est ce que j'ai fait en tout cas je te remercie beaucoup de ton aide c'est tres gentil d'avoir repondu aussi vite a cette heure ci

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, ou plus exactement :
    A consulter : La gestion des erreurs dans Excel

  5. #5
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    le probleme c'est que meme avec un resume next a la fin de gestionP , il ne reviens pas au code.... c'est incomprehensible

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tu peux gérer différentes erreurs avec On Error Goto en testant le numéro de l'erreur avec Err.Number. Un Select Case te permets d'effectuer différentes actions en fonction de l'erreur. Resume te permets de reprendre le déroulement du code à un endroit précis. Err.Raise te permet de générer tes propre erreurs.
    Un exemple avec un code vraiment bidon mais pour te montrer la façon de faire. Personnellement je n'aime pas trop cette façon de faire car le code risque de devenir vite difficile à maintenir, il est préférable d'envisager les différentes faiblesses qu'il peut y avoir et les gérer proprement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Sub Test()
     
        Dim Fe As Worksheet
        Dim I As Integer
     
        On Error GoTo Fin
     
    Reprise1:
            'génère une erreur si l'action n'est pas la bonne
            If ActiveCell.Address(0, 0) <> "C3" Then
     
                Err.Raise vbObjectError + 10, "Sélection erronée.", "La cellule actrive pour le lancement de la macro doit pêtre la cellule C3 !"
     
            End If
     
            I = 4
     
    Reprise2:
     
            'la feuille n'existe pas
            Set Fe = Worksheets("Feuil" & I)
     
            Exit Sub
     
    Fin:
     
        Select Case Err.Number
     
            Case vbObjectError + 10 'erreur perso
     
                MsgBox "Erreur n° " & Err.Number & " " & Err.Source & vbCrLf & vbCrLf & Err.Description
     
                Range("C3").Select
     
                Resume Reprise1
     
            Case 9
     
                MsgBox "Erreur n° " & Err.Number & " " & Err.Source & vbCrLf & vbCrLf & Err.Description
                I = I - 1
     
                Resume Reprise2
     
        End Select
     
    End Sub
    Hervé.

  7. #7
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    la situation est plus delicate; en realité pour resumer je gere des feuilles de données , que j'ouvre pour recuperer des données, j'ai créé une fonction qui test la mise a jour et si les données sont bien actualisées , donc il ne genere jamais d'erreur , mais j'aimerais que sii ma fonction me donne false (pas a jour) , il me change de feuille. Comme j'ai un lien particulier ou je peux mettre des feuilles actualisées si ca ne l'a pas ete sur le reseau , je veux diriger vers ce lien , ou j'aurais prealablement mis le fichier avec le meme nom. il faut savoir que je gere ca par un dictionnaire.

    Donc resultat , j'ai créé une gestion d'erreur qui pour chaque appel (8 dans mon main) dois se diriger vers cette resolution et ce changement de document.

    Moi j'ai codé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            'declaration des workbooks necessaires
            Set xlbook = Workbooks.Open(DicoDeLiens("Stressed VAR").Link, , True)
     
                'determine les stressed var
            On Error GoTo gestionP
            If Not Verif(xlbook) Then Err.Raise 401
            On Error GoTo -1: On Error GoTo 0
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       'Change le lien automatiquement
    gestionP:
            FileName = xlbook.Name
            xlbook.Close
            Set xlbook = Nothing
            Set xlsheet3 = ThisWorkbook.Worksheets("Lien fichiers")
            Lien = xlsheet3.Range("LienPb").Value & "\" & FileName
             MsgBox("Un probleme avec le fichier" & FileName & " est survenu, déposez une nouvelle extraction " _
            & "dans le dossier spécifié sur la feuille Lien fichiers et continuer la macro ou quittez.")
            Set xlbook = Workbooks.Open(Lien, , True)
            Set xlsheet3 = Nothing
            Resume Next
    End Sub
    je me dirige toujours vers cette resolution, c'est pour ca que je veux l'utiliser plusieur fois , hors , du coup j'utilise " on error -1 pour reinitialiser le compteur , coar on peut l'utiliser qu'une fois sinon il ne reviens plus, deuxiemement , si je met un error resume next , il ne remonte plus aussi et , j'ai mis un on error goto 0 car je ne veux pas que ca me masque les erreur des macros , je veux juste tester l'actualisation de la feuille , et pas cacher les differentes erreurs qui pourraint intervenir ds mon code et qui serait camouflé par le "on error" , il semble que mon code reponde bien au probleme , mais si des gens en savent plus sur le on error goto -1 ca m'interesse car , je trouve pas grand chose merci d'avance

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par tamtam64 Voir le message
    mais si des gens en savent plus sur le on error goto -1 ca m'interesse car , je trouve pas grand chose merci d'avance

    Cela n'existe pas. (Du moins jusqu'à Office 2010)

    Sauf si tu réussis à avoir une ligne avec le numéro -1

    Si c'est une nouveauté Office 2013; je suis largué.

    P.S. As-tu déjà essayé de sélectionner on error et d'appuyer sur

  9. #9
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je ne sais même pas par où commencer... le plus simple est donc de ne rien dire

    on error goto -1 ??
    Resume next en fin de gestion d'erreur ? Sans Err.Clear à minima ?
    un goto "gestion d'erreur", suivi d'une ligne avec un Raise.err ??

    tu es sûr d'avoir bien creusé le tuto fourni par kiki29 ?


    tu n'utilises pas forcément le bon outil, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Verif(xlbook) Then Err.Raise 401
    j'aurai plutôt vu un appel vers une autre procédure pour gérer le cas, ouvrir le fichier de secours, l'affecter à la variable et revenir dans la procédure appelante

    mince, j'ai dis que je ne dirai rien

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je suis d'accord avec Joe, nous préconisons toujours d'éviter l'utilisation de on error; et là tu génères ta propre erreur!
    Quelle drôle d'idée! Au lieu de faire le traitement qui va bien!
    Dernière modification par Invité ; 08/06/2015 à 08h32.

Discussions similaires

  1. [SQL Server 2000][DTS] Ignorer un type d'erreur/ voir les erreurs
    Par Anthony.Desvernois dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2007, 13h33
  2. type "short" erreur de calcul, pourquoi ?
    Par Link_GZ dans le forum C
    Réponses: 4
    Dernier message: 04/05/2007, 14h15
  3. try et type d'erreur à catcher.
    Par tomy29 dans le forum Delphi
    Réponses: 20
    Dernier message: 03/08/2006, 13h19
  4. comment gerer les types Objet(java)
    Par karray_ali dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 10/05/2006, 00h27
  5. ouvrir un type de fichier particulier...
    Par jojoboloss dans le forum Access
    Réponses: 4
    Dernier message: 08/02/2006, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo