Problème avec répétitiion du On error Goto xx

Problème avec répétitiion du On error Goto xx - VB/VBA/VBS - Programmation

Marsh Posté le 28-10-2009 à 17:30:06    

Bonjour à tous,
 
Voilà, après m'être tiré les cheveux sur de nombreux forum et n'ayant toujours pas ma réponse, voici mon problème : Je demande à ma macro de sélectionner une plage de données visibles après un filtre dans plusieurs onglets. Si il n'y a pas de plage visible (ce qui peut arriver), j'ai mis un On error Goto pour qu'il passe à l'onglet suivant. Cela fonctionne si l'erreur apparait qu'une fois, mais pas deux...
 
Voici en simplifié ma ligne de code :
 
    Sheets("A" ).select
    Range("A1" ).Select
    On Error GoTo Suite1
    With Range("_FilterDatabase" )
    Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)
    With plagefiltrevisible.Areas(1).Rows(1).Select
    Range(Selection, Selection.End(xlDown)).Select
    End With
    End With
Suite1:
    Sheets("B" ).select
    Range("A1" ).Select
    On Error GoTo Suite2
    With Range("_FilterDatabase" )
    Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)
    With plagefiltrevisible.Areas(1).Rows(1).Select
    Range(Selection, Selection.End(xlDown)).Select
    End With
    End With
Suite2:
    Sheets("C" ).select
    Range("A1" ).Select
    On Error GoTo Suite3
    With Range("_FilterDatabase" )
    Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)
    With plagefiltrevisible.Areas(1).Rows(1).Select
    Range(Selection, Selection.End(xlDown)).Select
    End With
    End With
Suite3:
    Sheets("D" ).select
    Range("A1" ).Select
    On Error GoTo Suite4
    With Range("_FilterDatabase" )
    Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)
    With plagefiltrevisible.Areas(1).Rows(1).Select
    Range(Selection, Selection.End(xlDown)).Select
    End With
    End With
Suite4:
End sub
 
Si dans la feuille B et dans la feuille C il n'y a pas de données visibles, alors le code bloque sur la ligne notée en BLEU.
 
Merci pour votre aide !

Reply

Marsh Posté le 28-10-2009 à 17:30:06   

Reply

Marsh Posté le 29-10-2009 à 06:53:40    

Bonjour,
as-tu essayé de mettre err.clear après chaque étiquette suite1: suite2: etc...
??
 
suite1:
err.clear
 
 Cordialement


Message édité par seniorpapou le 29-10-2009 à 06:54:45
Reply

Marsh Posté le 29-10-2009 à 09:54:37    

Bonjour,
 
Je viens d'essayer avec Err.clear et ça me fait exactement la même chose...Je ne comprends pas pourquoi cela ne fonctionne pas deux fois de suite...Si l'erreur se passe une fois, il part bien vers le bon suite:
 
Toujours en recherche.

Reply

Marsh Posté le 29-10-2009 à 12:11:52    

Bonjour,
je n'ai pas la forme pour faire un classeur test, peux-tu nous en mettre un??
Cordialement

Reply

Marsh Posté le 29-10-2009 à 13:03:49    

J'ai toujours vu On Error s'employer avec un Resume
Mais ici, il n'y a ni Resume ni Resume next ni Resume etiquette_de_ligne.
Resume sert à mettre fin à la gestion de l'erreur.

Reply

Marsh Posté le 29-10-2009 à 13:12:50    

Voici une solution qui marche probablement, même s'il y a surement moyen de faire plus simple :

   Sheets("A" ).select  
    Range("A1" ).Select  
    On Error GoTo Err1
    With Range("_FilterDatabase" )  
    Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)  
    With plagefiltrevisible.Areas(1).Rows(1).Select  
    Range(Selection, Selection.End(xlDown)).Select  
    End With  
    End With  
Main_suite:
    Go To Suite4
Err1:  
    Sheets("B" ).select  
    Range("A1" ).Select  
    On Error GoTo Err2
    With Range("_FilterDatabase" )  
    Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)  
    With plagefiltrevisible.Areas(1).Rows(1).Select  
    Range(Selection, Selection.End(xlDown)).Select  
    End With  
    End With  
Err1_fin:
    Resume Main_suite
Err2:  
    Sheets("C" ).select  
    Range("A1" ).Select  
    On Error GoTo Err3  
    With Range("_FilterDatabase" )  
    Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)  
    With plagefiltrevisible.Areas(1).Rows(1).Select  
    Range(Selection, Selection.End(xlDown)).Select  
    End With  
    End With  
Err2_fin:
    Resume Err1_fin
Err3:  
    Sheets("D" ).select  
    Range("A1" ).Select  
    On Error GoTo Err3_fin
    With Range("_FilterDatabase" )  
    Set plagefiltrevisible = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)  
    With plagefiltrevisible.Areas(1).Rows(1).Select  
    Range(Selection, Selection.End(xlDown)).Select  
    End With  
    End With  
Err3_fin:
    Resume Err2_fin
Suite4:  
End sub  


Message édité par olivthill le 29-10-2009 à 13:14:04
Reply

Marsh Posté le 02-11-2009 à 11:56:26    

Bonjour,
 
Merci pour la réponse.
 
Par contre dans tes lignes de code, tu demandes que la macro se termine (Suite4) si il n'y a pas eu d'erreur, alors que au contraire si il n'y a pas eu d'erreur, je veux qu'il continue à chercher les cellules visibles dans les Sheets suivantes.
 
Il faut peut être changer complètement l'écriture, mais le but est le suivant :
 
J'ai 4 onglets, filtrés automatiquement, où il doit normalement y avoir des données visibles que je copie dans un autre classeur, mais il se peut qu'il n'y ai pas de données visibles, ce qui fait planter la macro. Mon but est qu'il zappe l'onglet si il n'y a pas de données visibles et qu'il passe au traitement du suivant...
 
En espérant avoir été clair. Merci d'avance.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed