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 :

On error go to en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut On error go to en VBA
    Bonjour,

    Je suis désolée si ce message a déjà été adressé, mais j'ai cherché dans la FAQ et dans les discussions sans trouver de réponse.

    De plus, je cours un peu après les temps pour etre honnete.

    Je débute complètement, ce n'est pas du tout mon domaine, mais on m'a confié ce boulot, donc.....

    Alors, vraiment désolée si mon code est moche et pas du tout optimisé....

    Mon problème :

    Je crée un TCD dans VBA dans lequel je veux filtrer certaines valeurs d'un champ (.PivotItems(Pivot_i).Visible = True).
    Mon souci est que parfois la valeur prise par ce fameux pivot_i n'existe pas dans le TCD et il y a donc une erreur.

    Je souhaiterais que dans ce cas le reste de la procedure ne s'execute pas. Je suis dans une boucle for et je voudrais sortir de l execution et passer au next i.

    J'ai essaye avec On error goto mais je ne m'en sors pas. En gros ca marche la premiere fois, mais ensuite rien...

    On error resume next ne marche pas etant donne qu'alors le reste s'execute et je ne veux pas.

    Voici mon code (encore desolee pour la mochete.....)

    Si quelqu'un a une idee je prends.....Merci beaucoup.

    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
    48
    49
    50
    51
    52
    53
    For i = 12 To derniere_ligne_P_and_L_HP
     
    Worksheets("P&L HP").Activate
     
    Pivot_i = Cells(i, 17).Value
     
    If Pivot_i = "" Then
    GoTo 14
    Else
     
    If Worksheets("Pivot").Cells(5, 1).Value = Pivot_i Then
    GoTo 15
     
    Else
     
    Worksheets("Pivot").Activate
     
    On Error GoTo Error_handler
     
    With ActiveSheet.PivotTables("TCD").PivotFields("Ref Conso")
            .PivotItems(Pivot_i).Visible = True
     
    End With
     
     
    Worksheets("P&L HP").Activate
    Cells(i, 18).Value = -Worksheets("Pivot").Cells(5, 2).Value
     
    Worksheets("Pivot").Activate
     On Error GoTo Error_handler
    With ActiveSheet.PivotTables("TCD").PivotFields("Ref Conso")
            .PivotItems(Pivot_i).Visible = False
     
    End With
     
    End If
     
    GoTo 14
     
    15:
     
    Worksheets("P&L HP").Activate
    Cells(i, 19).Value = -Worksheets("Pivot").Cells(5, 2).Value
     
    14:
    i = i
     
    End If
     
    Error_handler:
    On Error GoTo 0
     
    Next i

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Bonjour,

    Pour commencer je dirais qu'il faudrait faire un peu le ménage.
    Je ne comprends pas l'intérêt de tous ces GOTO imbriqués qui sont source d'incompréhension du code et surement de problème.
    Ex : le Goto 15 n'est effectué que dans le cas "if Worksheets("Pivot").Cells(5, 1).Value = Pivot_i" donc pourquoi ne pas le mettre directement là ?

    A mon avis ce sont tous ces goto qui font que ça ne fonctionne pas, mais c'est difficile de voir quelque chose dans ce fouillis.

    J'ai déjà essayé d'enlever les goto pour y voir plus clair :
    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
    For i = 12 To derniere_ligne_P_and_L_HP
     
        Worksheets("P&L HP").Activate
     
        Pivot_i = Cells(i, 17).Value
     
        If Pivot_i = "" Then
            'Do nothing
            'i = i 'ça ça sert à rien...ou alors je ne comprends pas quelle est l'idée derrière
        Else
     
            If Worksheets("Pivot").Cells(5, 1).Value = Pivot_i Then
                Worksheets("P&L HP").Activate
                Cells(i, 19).Value = -Worksheets("Pivot").Cells(5, 2).Value
     
            Else
     
                Worksheets("Pivot").Activate
     
                On Error GoTo Error_handler
     
                With ActiveSheet.PivotTables("TCD").PivotFields("Ref Conso")
                    .PivotItems(Pivot_i).Visible = True
     
                End With
     
     
                Worksheets("P&L HP").Activate
                Cells(i, 18).Value = -Worksheets("Pivot").Cells(5, 2).Value
     
                Worksheets("Pivot").Activate
                On Error GoTo Error_handler
                With ActiveSheet.PivotTables("TCD").PivotFields("Ref Conso")
                    .PivotItems(Pivot_i).Visible = False
     
                End With
     
            End If
     
        End If
     
    Error_handler:
        On Error GoTo 0
    Next i
    Après :
    - c'est impossible de tester ce code
    - il y a moyen d'améliorer considérablement le code, mais je suppose que ton objectif principal est que ça fonctionne

    PS : pour la lisibilité sur le Forum utilise les balises code.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    Bonjour,

    Merci de votre réponse.

    Le i=i ne sert a rien je sais mais je ne savais pas qu on pouvait juste ne rien mettre quand on ne veut rien faire......

    Pour le pb du code qui peut etre ameliore, a ma decharge je vous avais prevenus...... ;-)

    Ensuite, je pense qu'il va etre un peu trop complique pour moi d'expliquer clairement ce que je veux faire. Je ne peux pas mettre le fichier et sans les donnees ca va etre complique de tester.....

    En gros je voulais juste comprendre pourquoi le "on error go to" ne fonctionne que la premiere fois et savoir comment il fallait le placer et comment organiser la syntaxe.

    Merci encore......

    J'ai teste votre code, mais j'ai toujours le meme probleme

    la gestion d'erreur ne marche que la premiere fois.

    A l'occurence suivante, il y a une erreur et la gestion ne s'active pas.

    Merci.

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    d'arès le help de VBa sur On error :
    On Error GoTo 0 Disables any enabled error handler in the current procedure.
    Et comme ceci, ca donne quoi :

    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
        Worksheets("P&L HP").Activate
     
        Pivot_i = Cells(i, 17).value
     
        If Pivot_i = "" Then
            'Do nothing
            'i = i 'ça ça sert à rien...ou alors je ne comprends pas quelle est l'idée derrière
        Else
        
            If Worksheets("Pivot").Cells(5, 1).value = Pivot_i Then
                Worksheets("P&L HP").Activate
                Cells(i, 19).value = -Worksheets("Pivot").Cells(5, 2).value
            
            Else
            
                Worksheets("Pivot").Activate
                
                On Error GoTo Error_handler
                
                With ActiveSheet.PivotTables("TCD").PivotFields("Ref Conso")
                    .PivotItems(Pivot_i).visible = True
                
                End With
                
                
                Worksheets("P&L HP").Activate
                Cells(i, 18).value = -Worksheets("Pivot").Cells(5, 2).value
                
                Worksheets("Pivot").Activate
                On Error GoTo Error_handler
                With ActiveSheet.PivotTables("TCD").PivotFields("Ref Conso")
                    .PivotItems(Pivot_i).visible = False
                
                End With
            
            End If
        
        End If
        
    Error_handler:
        resume next
    Next i

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    Il me semble que dans ce cas-la le prog repart la ou il s'etait arrete et c'est justement ce que je ne voulais pas faire......

    Je voulais à l'erreur passer directement au next i.....

    J'ai essaye ca deja......

    Mais merci !

    J'ai resolu le pb entre temps....

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    No problem.

    La solution de Tirex28 est venue quand je regardais ton problème.


  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Essaye avec cette structure:
    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
    Sub Test()
        'Instructions ...
     
        On Error GoTo ErrorHandler
        For i = 12 To derniere_ligne_P_and_L_HP
            'Intructions...
    Reprise:
        Next
        On Error GoTo 0
     
        'Instructions...
     
        Exit Sub
    ErrorHandler:
        Resume Reprise
    End Sub
    Tu peux également lire ce document

    Cordialement,

    Tirex28/

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    Merci beaucoup,

    C'est exactement ce que je cherchais.

    Grace a vous deux, c nickel maintenant.

    Merci encore,

    Bonne apres-midi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Error lancement dll dans VBA: Run-time error '28' - Out of stack space
    Par cfrelet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2010, 10h30
  2. [XL-2007] Runtime error 1004 pour programme VBA d'optimisation
    Par Ptit_pilou dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/08/2009, 17h28
  3. [VBA-E] Structure de On Error
    Par skual dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/03/2006, 16h17
  4. [vba][Array]pb compile error
    Par megapacman dans le forum Access
    Réponses: 2
    Dernier message: 18/03/2006, 09h24
  5. Réponses: 9
    Dernier message: 08/03/2006, 16h04

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