VBA : Tester une erreur avec un IF

La braise

XLDnaute Occasionnel
Bonjour à tous,

Je fais appel à nouveau appel à votre science légendaire.

Dans mon code VBA, j'utilise un tableau croisé dynamique.

Je passe par exemple cette action sur un filtre du tableau :

ActiveSheet.PivotTables("TDC_New").PivotFields("Toto"). _
CurrentPage = "_INCONNU_"

Lorsque dans mes données, il n'existe aucune ligne correspondant à cette valeur, la macro plante.

Je souhaiterais donc modifier mon code en quelque chose du genre :

SI (passage de la valeur sur le filtre) ne donne pas une erreur ALORS...
mon code


Est-ce possible simplement?

D'avance merci pour votre aide toujours aussi efficace.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA : Tester une erreur avec un IF

Bonjour La Braise, bonjour le forum,

Essaie comme ça :
Code:
'gestion des erreurs
On Error Resume Next 'si il y une erreur passe à la ligne suivante
ActiveSheet.PivotTables("TDC_New").PivotFields("To to"). _
CurrentPage = "_INCONNU_"
If Err > 0 Then 'condition : si le code d'erreur est différent de 0 (donc si il y a eu plantage)
    MsgBox "ton message d'erreur." 'message (ou Exit Sub, éventuellement)
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
'... ton code si il n'y a pas plantage
 

Etienne2323

XLDnaute Impliqué
Re : VBA : Tester une erreur avec un IF

Salut La Braise,
personnellement, dans ce type de situation, j'utilise un code comme celui ci :

VB:
If Not IsError("passage de la valeur sur le filtre") Then
    'Ton Code
Else
    Exit Sub 'Ou tout autre solution si le code plante
End If

Ou encore

VB:
Set QQCH = passage de la valeur sur le filtre
If Not QQCH Is Nothing Then
    'Ton Code
Else
    Exit Sub 'Ou tout autre solution si le code plante
End If

Si tu pouvais déposer un bout de code ou encore mieux un petit fichier exemple, ce serait beaucoup plus facile de te donner une réponse concrète.

Bonne fin de journée,

Étienne

Edit : Salut Robert.
 

La braise

XLDnaute Occasionnel
Re : VBA : Tester une erreur avec un IF

Merci à vous deux pour vos réponses ultra méga rapide.

Etienne2323,

J'ai testé ta solution comme suit :

If Not IsError(ActiveSheet.PivotTables("TDC_New").PivotFields("toto"). _
CurrentPage = "_INCONNU_") Then

ActiveSheet.PivotTables("TDC_New").PivotFields("toto"). _
CurrentPage = "_INCONNU_"

With ActiveSheet.PivotTables("TDC_New").PivotFields("Nom Client")
.Orientation = xlRowField
.Position = 2
End With

End If

Malheuresement, ça plante à la ligne juste après le If not.
Cela est bizarre car, si le passage de la valeur sur le filtre ne cause pas d'erreur, alors passer cette valeur ne devrait pas planter ou alors j'ai mal compris?


Robert,
Je teste ta solution et je vosu tiens au courant.

:)
 

Etienne2323

XLDnaute Impliqué
Re : VBA : Tester une erreur avec un IF

Salut La Braise, Robert, le fil,

voici une autre piste de solution. Je n'étais pas trop certain de savoir comment répondre à ton message de 12h33 n'ayant pas vu le code. Une solution peut-être un peu moins élégante mais qui devrait fonctionner.

VB:
Dim Erreur As Byte
'S'il y a une erreur, alors on saute par-dessus la section. Sinon, tout va comme
'sur des roulettes
'On commence le code en disant qu'il y a une erreur
Erreur = 1
On Error GoTo Continuer


'*********************************************************************************

'S'il y a une erreur, alors ça ira à continuer sans remettre la variable Erreur à 0
ActiveSheet.PivotTables("TDC_New").PivotFields("to to").CurrentPage = "_INCONNU_"

With ActiveSheet.PivotTables("TDC_New").PivotFields("No m Client")
    .Orientation = xlRowField
    .Position = 2
End With

'Si tout c'est déroulé comme on voulait, alors on enlève l'erreur.
Erreur = 0

'*********************************************************************************

Continuer:
If Erreur = 1 Then
    'Code pour gérer l'erreur
End If

Bonne continuité,

Étienne
 

La braise

XLDnaute Occasionnel
Re : VBA : Tester une erreur avec un IF

Bonjour à Tous,

J'ai trouvé (en combinant vos deux propositions :) ) la solution à mon problème.

La difficulté réside dans le fait que j'ai une liste d'actions à faire, si le pasage de la valeur sur le filtre ne plante pas j'ai un traitement spécifique à faire AVANT de reprendre la suite des tâches. Si le passage de la valeur sur le filtre plante, il faut reprendre la liste normale.

(enfin, je me comprends... :D )

Ma solution :

On Error GoTo Repmacro
ActiveSheet.PivotTables("TDC_New").PivotFields("soldto"). _
CurrentPage = "_INCONNU_"
With ActiveSheet.PivotTables("TDC_New").PivotFields("Nom Client")
.Orientation = xlRowField
.Position = 2
End With
.... tâches spécifiques

On Error GoTo 0
GoTo Repmacro


Repmacro:
... la suite des tâches


Si la valeur du filtre plante : Passage direct à Repmacro
Si la valeur du filtre ne plante pas, tâches spéciques puis passage à Repmacro

C'est surement pas très joli... mais ça marche!

Merci à vous deux pour votre aide.

:)
 

Discussions similaires

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 050
dernier inscrit
Pepito93100