Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Comment pouvoir traiter normalement une structure perso

Dudu2

XLDnaute Barbatruc
Bonjour,
Avec Excel VBA on ne peut pas passer une structure utilisateur en argument d'une fonction ni en faire un retour de fonction.
Y a-t-il un moyen ? En faire une classe ?
VB:
Private Type TabAreas
    TabValues() As Variant
End Type

Dim TabAreasVal() As TabAreas
 
Dernière édition:
Solution
Bonjour,
ThisWorbook est un module de classe pas un module standard !
Code:
set wb=ThisWorbook

Par conséquent tu n'as pas accès à tous ce qui est privé.

Il est vrai que tout ce qui est privé devrait être accessible de l'intérieur du module de classe mais c'est comme ça !

Notes également que tout ce qui est privé dans un module standard n'est pas viable d'un autre monde !

Dudu2

XLDnaute Barbatruc
@Dranreb,
Tu veux dire que l'instruction CréerZonVal ZonVal, R créé le retour de la fonction Zonval ?
Si c'est ça alors je suis sur le ***.
Pour moi CréerZonVal ZonVal, R c'est un appel récursif à la fonction elle-même. Bon ok ça ne l'est pas !
Et un retour de fonction c'est Nom-de-fonction = <Valeur>, Zonval = <Valeur>.
 

Dudu2

XLDnaute Barbatruc
Ok, merci @Dranreb. J'ai compris.
Par contre ton idée de placer le retour de fonction ainsi, c'est un truc très original, efficace et économique.
Je ne sais pas si le réflexe m'en viendra à l'occasion mais j'essaierai d'y penser.
Merci encore pour tes explications.
 

Dudu2

XLDnaute Barbatruc
Bonjour à tous,

Finalement, après quelque insomnie ruminatoire, cette superbe fonction ne faisant que retourner une valeur qui vient d'ailleurs peut être... supprimée au bénéfice de cet ailleurs.
VB:
Function AdrZonVal(ByVal R As Range) As Variant()
   AdrZonVal = Array(R.Address(External:=True), CréerZonVal(R))
   End Function

Function CréerZonVal(ByVal Rng As Range) As Variant
   Dim Zon As Range, A&, TV(1 To 1, 1 To 1), TZon
   ReDim TZon(1 To Rng.Areas.Count)
   For Each Zon In Rng.Areas
      A = A + 1
      If Zon.Cells.Count = 1 Then
         TV(1, 1) = Zon.Value
         TZon(A) = TV
      Else
        TZon(A) = Zon.Value
        End If
      Next Zon
      CréerZonVal = TZon
   End Function
 

Discussions similaires

Réponses
3
Affichages
314
Réponses
2
Affichages
468
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…