XL 2016 Depuis un Module Standard pouvoir Récupérer la Photocopie d'une Classe (dont/Avec) la collection qui est incluse dans le Module de Classe.

laurent950

XLDnaute Barbatruc
Bonjour Le Forum,

J'ai réalisé un Module de classe (CPays) avec une Variable de Type Collection (Coll) qui inclut dans le Module de classe.

Le Principe avec une boucle For je viens Créer une nouvelle instance à chaque itération
de l'objet Pays, dont je me sers pour remplir cette classe.

Je souhaite une fois cette classe remplie consigner cette classe dans la collection qui elle est incluse dans le module de classe.

Par la suite je souhaite appeler cette collection depuis le module standard, car cette collection se trouve dans le module de classe, avec un code pour y retrouver la photocopie de la classe correspondante a ce qui a était précédemment enregistré et remplis !

J'ai réalisé la macro, mais cela ne fonctionne pas.

En Exemple :
j'ai écrit le code, dans la zone de texte sur la Feuil à côté du tableau structurée.
la collection se situe dans le module standard, et cela me renvois les bon résultat.
je souhaite l'inverse la collection dans le module de classe et aucune collection dans le module standard.

Je poste le code qui ne fonctionne pas ci-dessous avec le fichier joint.

Si vous avez l'explication et même la solution je vous remercie car je ne trouve pas la solution après plusieurs recherches ?

Module Standard : Ci-Dessous

VB:
Sub CollectionDansModuleDeClasse()

Dim data As Variant ' ............................................................. 1)
data = Sheets("Collections").ListObjects(1).DataBodyRange.Value2 ' ................ 1)
Dim i As Long ' ................................................................... 1)

Dim PaysGlobal As New ClsPays ' ................................................... 2)

Dim Pays As ClsPays ' ............................................................. 3)

For i = 1 To UBound(data, 1) ' .................................................... 1)
    Set Pays = PaysGlobal.Item(data(i, 1))
    Set Pays = Pays
    Pays.Code = data(i, 1) ' ...................................................... 4)
    Pays.Nom = data(i, 2) ' ....................................................... 4)
    Pays.Capitale = data(i, 3) ' .................................................. 4)
Next i

For i = 1 To UBound(data, 1)
    Set Pays = Pays.TransferCollection(data(i, 1)) ' .............................. Bloque) Un seule Item est remplis avec mauvais code !
        Debug.Print Pays.Code, Pays.Nom, Pays.Capitale
Next i
End Sub

Module De Classe(ClsPays) : Ci-Dessous

Code:
Private mCode As String
Private mNom As String
Private mCapitale As String
Private mCLn As Collection
'
Property Get Code() As String
    Code = mCode
End Property
Property Let Code(ByVal NewValue As String)
    mCode = NewValue
End Property
'
Property Get Nom() As String
    Nom = mNom
End Property
Property Let Nom(ByVal NewValue As String)
    mNom = NewValue
End Property
'
Property Get Capitale() As String
    Capitale = mCapitale
End Property
Property Let Capitale(ByVal NewValue As String)
    mCapitale = NewValue
End Property
'
Property Get PhtosCopieClassWithKey() As String
    Capitale = mCapitale
End Property
'
Public Function TransferCollection(ByVal NewValue As String) As ClsPays
   Set TransferCollection = mCLn(NewValue)
End Function
Private Sub Class_Initialize()
   Set mCLn = New Collection
   End Sub
Public Function Item(ByVal NewValue As String) As ClsPays
   On Error Resume Next
   Set Item = mCLn(NewValue)
   If Err Then
      Set Item = New ClsPays
      Set Item = Me
      mCLn.Add Item, NewValue
   End If
   End Function
 

Pièces jointes

  • Test Module de classe Inclus Object Collection.xlsm
    31.7 KB · Affichages: 6
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je mieux serait de ne pas chercher à faire autre chose que d'utiliser ma classe SsGr et ma fonction Gigogne tels qu'ils sont. L'arborescence obtenue dépend entièrement des paramètres qui lui sont spécifiés.
Attention le classeur joint est un .xlsm précurseur de .xlam autoinstallable. Mais il est pourvu d'une page d'aide
 

Pièces jointes

  • GigIdx.xlsm
    68.5 KB · Affichages: 2
Dernière édition:

laurent950

XLDnaute Barbatruc
il serait intéressant aussi de regarder les dictionnaires comme ca on peut directement appeler une instance par le nom du pay je n'ai jamais essayer il faudra que le le fasse
ou alors avec une routine enum
@patricktoulon je suis déjà arrivé a réalisé quelque choses de la sorte récemment mais c'est vraiment le code et la logique @Dranreb.

Dans ce fil en Poste #19 avec Collection
en Poste #20 avec Dictionnary
en Poste #31 avec Module de Classe et Collection

Puis en Poste #4 juste en essaie mais rien de concluant avec Dictionnary.

J'ai compris le principe, mais je souhaite développer et comprendre le principe @Dranreb qui m'échappe en Poste #4 de ce Fils avec sont code qui est en lien dont le Poste est #41
 

laurent950

XLDnaute Barbatruc
Je mieux serait de ne pas chercher à faire autre chose que d'utiliser ma classe SsGr et ma fonction Gigogne tels qu'ils sont. L'arborescence obtenue dépend entièrement des paramètres qui lui sont spécifiés.
Je suis entièrement d'accord @Dranreb mais je souhaite vraiment comprendre le code et le reproduire indépendamment de l'utilisé avec votre fichier qui est certes parfait et je vous remercie encore milles fois.
 

Dranreb

XLDnaute Barbatruc
Quelle question vous vient en premier à l'esprit de ce que vous ne comprenez pas ?
En gros c'est d'abord un classement ou plus exactement une indexation, par fusions, puis un positionnement initial d'amorçage pour une Function SousGroupes récursive.
 
Dernière édition:

laurent950

XLDnaute Barbatruc
Quelle question vous vient en premier à l'esprit de ce que vous ne comprenez pas ?
Celle-ci,
j'ai remplis ma classe depuis le module standard, puis avec la collection qui est incluse dans cette classe.
je consigne cette collection avec une clé (Dans le module de classe)
Collection.Add Photocopie de la classe, avec une clé

Comment vous avez fait pour récupérer depuis le module standard cette photocopie de classe qui se trouve dans la collection qui elle même est situé dans le module de classe ?
 

Dranreb

XLDnaute Barbatruc
Non, je croyais que c'était mon code que vous ne compreniez pas, ce qui est normal. Le votre c'est moi qui ne le comprends pas …
Peut être est-ce l'importance de l'indexation préalable que vous avez sous estimé ?
Je vous l'ai dit SousGroupe est une fonction récursive: c'est normal qu'elle sache récupérer la collection qu'elle demande par son propre même code pour le niveau suivant, non ?
 

laurent950

XLDnaute Barbatruc
Je vous l'ai dit SousGroupe est une fonction récursive: c'est normal qu'elle sache récupérer la collection qu'elle demande par son propre même code pour le niveau suivant, non ?
Je suis d'accord avec cela, mais comment comprendre ce code avec un exemple très simple pour que je puisse conceptualisé le principe, l'écrire, et l'adapter par la suite. en partant d'un exemple très simplicité mais pertinent à la fois.
Avec Mon exemple d'image en Poste #13 vous pouvez en établir quelques choses pour principe simple ?
 

Dranreb

XLDnaute Barbatruc
Ne perdez pas de vue l'indexation préalable qui permet de récupérer séquentiellement tout ce qui va ensemble. Le principal intérêt de la fonction c'est de s'affranchir des test de ruptures de séquences: elle les aura tous faits préalablement.
 
Dernière édition:

laurent950

XLDnaute Barbatruc
@Dranreb Encore merci de toutes ces sources d'informations que vous m'offrais, je vais étudié cela aussi pour essayer de réalisé cela a partir de se fichier excel :

A Partir de cela :

1692918930599.png


Réalisé cela

1692918875677.png


Ps : Il n' a au aucun code dans le fichier car je ne sais pas le faire mais essayer et bien sur le poster par la suite dans ce même Poste.

Si vous avez la solution @Dranreb vraiment avec plaisir et utilisant votre technique de code

l'idée serait d'aller plus loin par la suite avec des sous arborescense de type
9.1.1
9.1.2
9.1.3
9.1.3.1
9.1.3.2
9.1.3.2.1
Ect
Exactement l'esprit gigogne illimité et comprendre se principe pour être libre de pouvoir réalisé tous ce que l'on souhaite en partant déjà de cette exemple simple
avec Une arborescence et juste un sous niveau d'arborescence avant de poursuivre et d'en ajouter plusieurs
 

Pièces jointes

  • ModuleDeClasseModeleArborescenceApartirCollection.xlsm
    11.5 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour ajouter des niveaux supplémentaires il suffit de spécifier des colonnes supplémentaires.
Le second argument de la fonction est en effet un ParamArray, donc le 1er d'une série de paramètres en nombre indéterminé.
 

laurent950

XLDnaute Barbatruc
Bonsoir @Dranreb

je suis entrain de décortiqué le code du module Gigogne. J'ai des questions

J'ai écrit la procédure, mais c'est trop copieux il y a toutes les combinaisons possibles, vous avez développer un outils pour des développeurs c'est du génie.

Je sais pas comment commencer pour les questions ?
Une par une Alors :
Vous paramétrer cette RupMax = &H7FFFFFFF avec cela qui a cette valeur 2147483647
C'est une cohérence de quelques choses ? Une astuce, Une limite absolue ?

Je souhaite a présent faire plus simple consigné dans une collection des groupes sans arborescence pour comprendre avec un sujet vraiment simple.
Je vais travailler sur un modèle très très simple et prendre le minimum de vos code pour arrivé a utilisé une variable collection consigné dans un module de classe a partir d'un module standard

Mais j'ai noté beaucoup de question, si vous accepter de répondre a la première question merci @Dranreb
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Oui, c'est une limite absolue: c'est la plus grande valeur que peut posséder un Long
Pour qu'une collection globale dans un module de classe puisse être accédée de l'extérieur il suffit qu'elle en soit une propriété, c'est à dire qu'elle y soit Public.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 087
Messages
2 116 082
Membres
112 653
dernier inscrit
flapynot7x