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

  • Initiateur de la discussion Initiateur de la discussion bond
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
Re : Erreur VBA lorsqu'un membre n'appartient pas à la collection

Je confirme, ça tourne ! 😎
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.
 
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... 😕
et je ne sais pas ce que ça permet de faire en plus ou en mieux (?)
 
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...
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
243
Retour