Objet Listbox comme argument d'une procédure VBA Excel

beaujack Messages postés 3 Date d'inscription dimanche 11 mai 2003 Statut Membre Dernière intervention 3 décembre 2008 - 6 nov. 2008 à 22:37
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Derniè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é.

Merci d'avance de votre aide,
J.B
A voir également:

8 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
6 nov. 2008 à 22:53
maprocedure listbox1
maprocedure lisbox2
...

Private sub maprocedure(ctrl as control)
..........
end sub

maintenant, avec VBA, c'est peut-être as MSforms.listbox ou quelque-chose de similaire
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
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" /??>








 








Impossible n’est pas français

,

Napoléon, 1808

,

----

Impossible n’est pas vbfrançais

,

Orohena, 2008
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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.

D'ou l'importance de specifier la methode

A+
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
6 nov. 2008 à 23:10
Sorry jmfmarques, je n'ai pas vu ta réponse
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
6 nov. 2008 à 23:12
Re,

Désolé pour le poste croisé

A+
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
6 nov. 2008 à 23:21
C'est vrai que ç'est un peu le bazar
désolé, beaujack, tu n'as plus qu'à faire le tri...


@+





Citations célèbres :<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>








 











Impossible n'est pas français

,

Napoléon, 1808

,

----

Impossible n'est pas vbfrançais

,

Orohena, 2008
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 nov. 2008 à 08:22
salut,

module de class, object, ok.
mais module je ne vois pas ce qui empêche de typer explicitement


<title>Coloration syntaxique, vendredi 07 novembre 2008 08:22</title>

Public Sub 
MaProc(
ByRef 
oLBox 
As 
MSForms.ListBox)

    oLBox.AddItem CStr(Time)
    oLBox.AddItem "+ une ligne"
    oLBox.AddItem "-----------"
End Sub





et l'appel est bon, avec ou sans CALL


<title>Coloration syntaxique, vendredi 07 novembre 2008 08:23</title>

Private Sub 
CommandButton1_Click()

    Call MaProc(ListBox1)
    MaProc ListBox3
End Sub





++


Prenez un instant pour répondre à [forum/sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 nov. 2008 à 03:42
salut,

merci pour tes remerciements (collectifs) en MP, çà fait plaisir

pour ton "résumé", OBJECT va fonctionner mais je maintiens que ce n'est pas approprié


en plus comme ici tu connais le type, ce
n'est vraiment pas utile, c'est comme si tu mettais VARIANT, un peu
trop passe-partout


ps : pour éviter une copie mémoire on passe les objets BYREF, et non BYVAL comme tu utilises actuellement
++


Prenez un instant pour répondre à [forum/sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
Rejoignez-nous