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

XL 2013 injection d'argument array en tant qu'object dans une fonction ou sub

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
tiens un petit truc qui me simplifierait bien la tache dans mes fonctions
et je ne sais pas si c'est possible

imaginons que j'ai une fonction que je vais appeller "chosebidule"
Code:
function chosebidule( arr)
msgbox arr(0).name
end function

et que je l'appelle comme ceci
VB:
sub test()
chosebidule array(TextBox1,TextBox2,TextBox3,TextBox4,TextBox5)
end sub

il est bien evident que ce qui est injecté est le ".Value(par defaut)"

ma question est donc ;

comment pourrait on faire pour que ça soit l'object qui soit injecté et non son value
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour @mapomme oui j'aurais du précisé c'est dans un userform
tu me dira ta methode peut etre reproduit de la meme maniere dans le userform
j'aurais souhaité ne pas passer par l'intermediaire du remplissage du tableau
c'est juste pour savoir si c'est possible d'une maniere ou d'une autre
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour patricktoulon, mapomme, le forum

Je le ferai comme ça

Cordialement, @+
VB:
Sub test()
chosebidule Array("TextBox1", "TextBox2", "TextBox3", "TextBox4", "TextBox5")
End Sub
Function chosebidule(arr)
MsgBox Me.Controls(arr(0)).Name & vbLf & Me.Controls(arr(0)).Value, vbOKOnly + vbInformation
End Function
 

patricktoulon

XLDnaute Barbatruc
re bonjour @Yeahou
oui de toute facon il faut passer en amont ou en aval par une reclassification de l'argument

@mapomme
là c'est intéressant dans le sens ou visiblement(je te fait confiance pour avoir tester ) le value par défaut n'est pas appliqué car l'object envoyé est un object control et comme l'object control n'a pas de propriété ".value" puisque ca peut être un control sans text meme si en lecture on peut le lire

rigolo non ?

étonnant ces petites divergences
merci a tous les deux pour cet éclairage
 

patricktoulon

XLDnaute Barbatruc
j'adopterais donc cette écriture histoire de raccourcir mes lignes verbeuses
VB:
Private Sub CommandButton1_Click()
   dim cts as object:   Set cts = Me.Controls
   chosebidule Array(cts("textbox1"), cts("textbox2"))
End Sub
on passe donc par la collection controls
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,

sur 365, ça passe direct comme ça, contrairement à ce qui est dit dans le post initial de Patrick, différence de version Excel ?
VB:
chosebidule Array(TextBox1, TextBox2)

Cordialement, @+

 

Pièces jointes

  • Test_Patricktoulon - Copie.xlsm
    15.4 KB · Affichages: 0
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonsoir le Fil
Idem chez moi "sur 365, ça passe direct comme ça" !
VB:
Option Explicit
Option Base 1
Dim i As Byte
Private Sub CommandButton1_Click()
   chosebidule Array(TextBox1, TextBox2, TextBox3)
End Sub

Function chosebidule(arr)
For i = 1 To UBound(arr)
   MsgBox arr(i).Name & vbCrLf & arr(i).Value
   Next
End Function
Bonne fin de Soirée
Jean marie
 

patricktoulon

XLDnaute Barbatruc
bonsoir à tous
intéressant sur 2007 ok mais 2013 c'est value par default
merci pour ces précieuses contributions je suis conforté dans mon idée d'utiliser la collection controls pour eviler les problèmes de versions
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…