Objet Listbox comme argument d'une procédure VBA Excel
beaujack
Messages postés3Date d'inscriptiondimanche 11 mai 2003StatutMembreDernière intervention 3 décembre 2008
-
6 nov. 2008 à 22:37
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
10 nov. 2008 à 03:42
Bonjour,
Avec excel 2000 et VBA
Depuis 2 jours, je ne trouve pas; ni dans les forum ni dans les tutoriels ni dans les ouvrages spécialisés grand public et professionnels l'explication de passage d'objet comme argument d'une procédure VBA excel
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="ProgId" content="Word.Document" /><meta name="Generator" content="Microsoft Word 9" /><meta name="Originator" content="Microsoft Word 9" /><link rel="File-List" href="file:///C:/DOCUME%7E1/BEAUGE%7E1/LOCALS%7E1/Temp/msoclip1/01/clip_filelist.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:DoNotOptimizeForBrowser/>
</w:WordDocument>
</xml><![endif]--><style><!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
--></style>Voilà ce que je souhaite faire :
Dans Userform1 j'ai 3 ListBox (ListBox1,ListBox2,ListBox3) chacune contient des informations différentes
pour chacune il y a 1 CommandButton (CommandButton1,CommandButton2,CommandButton3)
Chaque bouton doit me permettre d'exécuter la même procédure Sub pour éviter de l'écrire 3 fois
Je pensais faire :
Call maprocédure (ListBox1)..........quand je clique sur le bouton CommandButton1
Call maprocédure (ListBox2)..........quand je clique sur le bouton CommandButton2
Call maprocédure (ListBox3)..........quand je clique sur le bouton CommandButton3
et dans la procédure
Sub maprocédure (une variable objet ?....) qui récupère soit ListBox1, soit ListBox2 ou ListBox3 suivant le bouton sur lequel j'ai cliqué.
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 6 nov. 2008 à 23:08
Bonjour beaujack
J'ai simulé ton userform. J'ai donc créé un userform avec un listbox et un bouton. Le code du formulaire est le suivant, et sur mon PC il s'exécute sans problème.
Private Sub CommandButton1_Click()
Call maprocedure(ListBox1)
End Sub
Sub maprocedure(o As Object)
...
End Sub
Néanmoins d'après moi, il vaudrait mieux passer comme argument du Call un identificateur du bouton, qui permette à maprocedure() de récupérer l'objet, comme dans l'exemple ci-dessous :
Private Sub CommandButton1_Click()
Call maprocedure(id:=1)
End Sub
Sub maprocedure(ByVal id As Integer)
Dim o As Object
Select Case id
Case 1
Set o = ListBox1
...
End Select
End Sub
Cordialement
Citations célèbres :<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 6 nov. 2008 à 23:08
Salut,
je ne vais as t'apprendre grans chose vu que tu y etais presque :
Private Sub CommandButton1_Click()
Call MaProcedure(Me.ListBox1)
End Sub
Sub MaProcedure(Byval MonControl As Object)
MsgBox MonControl.Name
End Sub
Prend l'habitude de definir aussi la methode de passage du parametre
c'est a dire si tu veux passer la valeur (Byval) ou la variable
(Byref). Sache que par defaut si tu ne specifis rien VBA utilise ByRef.
Dans ce cas si la valeur de ta variable passée en parametre change dans
la sub ou la fonction appelé elle sera aussi changée dans la variable
d'origine.
Exemple:
Sub Test()
Dim MonNom As String, MomNomDeFamille As String
MonNom = "James Bond"
MomNomDeFamille = ExtraireNomDeFamille(MonNom)
MsgBox "Vous Etes : " & MonNom _
& vbCrLf & "Votre Nom de Famille est : " & MomNomDeFamille
End Sub
Function ExtraireNomDeFamille(ByVal NonRecuEnParametre As String) As String
NonRecuEnParametre = Right(NonRecuEnParametre, InStr(1, StrReverse(NonRecuEnParametre), Chr(32)) - 1)
ExtraireNomDeFamille = NonRecuEnParametre
End Function
Premier essait avec Byval :
la reponse sera :
Vous Etes : James Bond
Votre Nom de Famille est : Bond
deuxieme essait avec rien ou ByRef :
la reponse sera :
Vous Etes : Bond <--- regarde bien ici
Votre Nom de Famille est : Bond
dans ce dernier cas la valeur de ta variable d'origine a elle aussi changer.