Bonjour à toutes et tous et merci de votre temps et de votre aide.
Je suis en train de développer un classeur ou je vais avoir des feuilles identiques (seules les données affichées diffèrent et c'est une demande explicite de mon client donc non négociable).
J'ai pas mal de code VBA associé dans mes feuilles.
Actuellement je fais les modifs dans une page, puis je recopie le code de la feuille dans sa sœur jumelle mais sincèrement je n'aime pas cela.
Mon code comporte des procédures et des propriétés, notamment des propriétés pour accéder aux zones nommées.
Cela à l'avantage de me permettre d'utiliser IntelliSense au lieu de devoir me souvenir de l'orthographe exact des noms.
Ici un exemple pour accéder à une zone nommée.
1 2 3
| Public Property Get Colonne_LigneACacher() As Range
Set Colonne_LigneACacher = Me.Range("Colonne_LigneACacher")
End Property |
et de code adapté à ma page
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Private Sub Test_HideTechnicalInformation()
Call HideTechnicalInformation("")
MsgBox "Fini !"
End Sub
Public Sub HideTechnicalInformation(prmDummy As String) 'prmDummy sert juste à cacher la procédure à l'utilisateur
'Cache les lignes et colonnes techniques et fige les volets
Call mdlVBAFunction.HideUnhide_TechnicalInformation(True, Me.Colonne_LigneACacher, Me.Ligne_ColonneACacher) 'Cette ligne varie avec chaque feuille.
If Not wsInfo.EstModeImpression Then
Call mdlVBAFunction.CustomFreezePan(Me.FigeageVolet) 'Cette ligne varie avec chaque feuille.
Else
Call mdlVBAFunction.CustomUnFreezePan(Me)
End If
End Sub |
Quand je dois traiter mes feuilles, il me faut une ligne par feuille.
J'aimerai plutôt avoir une liste des feuilles et les appeler en rafale via une boucle du genre :
1 2 3 4 5 6 7 8 9 10 11 12
|
dim listeFeuille as new collection
call listeFeuille.add(Feuille1)
call listeFeuille.add(Feuille2)
call listeFeuille.add(Feuille3)
dim feuille as
'ici est le problème
for each feuille in listeFeuille
call feuile.UneMethodePerso()
next feuille |
sur la ligne :
dim feuille as
'ici est le problème
Je peux mettre as Object ce qui fait que ma rafale fonctionne mais que je perd l'IntelliSense mais surtout les vérifs du compilateur … pas cool.
Si je mets As Worksheet, là c'est la rafale qui ne marche pas puisque que une worksheet n'ont pas de méthode UneMethodePerso.
Donc j'ai pensé à créer un module de classe clsMaFeuillePerso qui aurait un objet Worksheet et toutes mes méthodes et propriétés personnelles définies là.
Ce qui donnerai un code du genre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
dim listeFeuille as new collection
dim feuille as clsFeuille
set feuille=new clsFeuille:call feuille.Assigner(feuille1) 'feuille1 est une Worksheet
call listeFeuille.add(feuille):set feuille=nothing
set feuille=new clsFeuille:call feuille.Assigner(feuille2) 'feuille2 est une Worksheet
call listeFeuille.add(feuille):set feuille=nothing
set feuille=new clsFeuille:call feuille.Assigner(feuille3) 'feuille2 est une Worksheet
call listeFeuille.add(feuille):set feuille=nothing
for each feuille in listeFeuille
call feuille.UneMethodePerso()
next feuille |
Quelqu'un a-t'il déjà fait cela et en a-t'il été statisfait ?
A+
Partager