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

Je confirme, ça tourne ! :cool:
Je ne suis pas familier avec les modules de classe, sans y passer 1 milliard d'heures, si t'as une suggestion par ce biais...

En tout cas, merci à vous, James et Pierrot de vous être pencher sur ce cas.
 

bond

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

Alors si je m'inspire du fil, je réorganise le code comme ça :
Dans ThisWorkbook
Code:
Option Explicit
Private Sub Workbook_Open()
    Set z.App = Application
End Sub
Dans Module1
Code:
Option Explicit
Public z As New Classe1
Public WbName, WbNames As New Collection
Dans Classe1
Code:
Option Explicit
Public WithEvents App As Application
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
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

Mais je ne comprends pas ce que ça change... :confused:
et je ne sais pas ce que ça permet de faire en plus ou en mieux (?)
 

Pierrot93

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

Re,

perso verrais cela ainsi :
dans thisworkbook :
Code:
Option Explicit
Private Sub Workbook_Open()
    Set z.App = Application
End Sub
dans un module standard :
Code:
Option Explicit
Public z As New Classe1
dans le module de classe :
Code:
Option Explicit
Public WithEvents App As Application
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Parent.Name Like "dummy*" Or Sh.Parent.Name Like "tresorerie*" Then MsgBox "Action"
End Sub

Maintenant, à voir la finalité de tout ceci...
 

bond

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

Même conclusion de MJ13 :

Pierrot, tu es un génie !

Voilà, maintenant je peux identifier l'ouverture de certains fichiers (utilisés sur un réseau), déceler l'activité -voire l'inactivité- sur ceux ci et informer l'utilisateur afin qu'il ne bloque pas le fichiers pour d'autres personnes ; mais ça c'est la suite du code que je vais poser.

Mille Mercissss, encore.
 

Discussions similaires

Statistiques des forums

Discussions
312 855
Messages
2 092 855
Membres
105 544
dernier inscrit
Eden90