Erreur VBA lorsqu'un membre n'appartient pas à la collection

bond

XLDnaute Occasionnel
Dans une macro complémentaire, j'alimente une collection choisie des fichiers qui sont en ouverture (ici dummy.xls et tresorerie.xls) :
Private Sub App_WorkbookOpen(ByVal Wb As Excel.Workbook)
If InStr(1, LCase(Wb.Name), "dummy") + _
InStr(1, LCase(Wb.Name), "tresorerie") >= 1 Then
WbNames.Add Item:=Wb.Name, Key:=Wb.Name
For WbName = 1 To WbNames.Count
MsgBox "Ouverture détectée du fichier : " & WbNames(WbName)
Next WbName
End If
End Sub
Jusque là pas de problème. Toujours dans cette macro complémentaire, un autre sub doit faire une action lorsque sur les fichiers de cette collection, toujours pas de pb :
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim W As Workbook
For Each W In Workbooks
If W.Name = WbNames.Item(W.Name) Then
MsgBox "Action"
End If
Next W
End Sub
Le problème : Comment éviter l'arrêt sur erreur vba pour les fichiers en dehors de cette collection ?

Merci d'avance.

Pour compléter ce post avec ma doc complète voici le sub complémentaire et préalable au fonctionnement général :
Option Explicit
Public WithEvents App As Application
Public WbName, WbNames As New Collection
Private Sub Workbook_Open()
' Activation de la macro complémentaire '
MsgBox "Hello ! Macro complémentaire ouverte et en arrière plan"
Set App = Application
End Sub
 

bond

XLDnaute Occasionnel
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

J'ai déjà essayé ça... mais ça le fait pas, il est toujours en erreur d'exécution '5' car vba bloque sur la ligne de commande If W.Name = WbNames.Item(W.Name) Then
 

James007

XLDnaute Barbatruc
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

Re,

Quand tu dis que tu as essayé : est-ce-que cela signifie que tu as placé l'instruction juste sur la ligne de code qui précède :
Code:
On Error Resume Next
If W.Name = WbNames.Item(W.Name) Then

A +
:)
 

James007

XLDnaute Barbatruc
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

Entendu ...

Je n'aime pas trop ce que je vais te proposer, mais cela peut te convenir :
Code:
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim W As Workbook
  For Each W In Workbooks
      On Error GoTo fin
      If W.Name = WbNames.Item(W.Name) Then
            MsgBox "Action"
      End If
  Next W
fin :
End Sub

A +
 

bond

XLDnaute Occasionnel
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

Même réponse : J'ai déjà essayé ça... mais ça le fait pas, il est toujours en erreur d'exécution '5' car vba bloque sur la ligne de commande If W.Name = WbNames.Item(W.Name) Then
Du coup sur ton conseil, je l'ai refait : résultat (en erreur) identique !
Vba ne tient pas compte des instructions de gestion d'erreur.

Je fini par croire qu'il y a une impossibilité dans mon concept... pour arriver à ce stade à la comparaison des membres de 2 collections :
ceux de la collection WbNames // ceux de la collection Workbooks
à moins que l'instruction W.Name = WbNames.Item(W.Name) ne soit pas conforme..., mais pour avoir essayer l'opérateur Is, le résultat Nothing résistent aussi (sauf si j'ai pas utiliser les bonnes syntaxes).

Qu'en penses tu ?

PS : pour ma culture pourquoi t'aime pas trop le renvoi suggéré avec 'fin:' ?
 

James007

XLDnaute Barbatruc
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

pour ma culture pourquoi t'aime pas trop le renvoi suggéré avec 'fin:' ?

Justement pour tout ce qui se passe ... je ne connais ton fichier ni tout ton code ...
et au lieu de comprendre les racines du mal ...qui génère cette fameuse erreur ...
on essaye simplement de faire en sorte de la court-circuiter ...

A +
:)
 
Dernière édition:

bond

XLDnaute Occasionnel
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

Tout le code est là.
Une fois que vba saura me répérer les classeurs voulus et les mouvements à l'intérieurs de ceux ci, je travaillerai le code 'Action'. Mais je ne veux pas géner l'utilisateur sur ses manipulations sur les autres classeurs (ceux non voulus).

Et c'est justement dans la comparaison des classeurs voulus/non voulus qu'est mon propos sur la comparaison de 2 collections.
c'est plus clair ainsi ?
 

Pierrot93

XLDnaute Barbatruc
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

Bonjour,

tu devrais peut être nous mettre le fichier en question en pièce jointe.... il y a fort à parier qu'il y a un module de classe dans ton fichier, mais sauf erreur, je ne vois nul part dans ton code que tu définisses la classe en question....

bon après midi
@+
 

bond

XLDnaute Occasionnel
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

Aucun Module dans le fichier.
Comme c'est une macro complémentaire, je ne l'ai pas publiée (j'ai soupçonné qu'il faudrait une vraie confiance pour la télécharger).
En revanche, tout le code est dans mon 1er msg, et 2 copy/paste dans un fichier de type macro complémentaire + insertion dans les compléments Excel, et tu as tout...

Merci d'avance pour vos analyses et suggestions. @+
 

Pierrot93

XLDnaute Barbatruc
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

Re,

modifie la procédure ci-dessous ainsi :
Code:
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim W
If WbNames.Count > 0 Then
    For Each W In WbNames
        If Sh.Parent.Name = W Then
            MsgBox "Action"
        End If
    Next W
End If
End Sub

manière peu orthodoxe de coder, perso aurait plutôt vu tes 2 procédures liées à app dans un module de classe, à première vu cela semble tourner....
 

Discussions similaires

Statistiques des forums

Discussions
312 584
Messages
2 089 975
Membres
104 321
dernier inscrit
tesre