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

Messages postés
3
Date d'inscription
dimanche 11 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2008
- - Dernière réponse : PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
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
Afficher la suite 

8 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
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
Commenter la réponse de jmfmarques
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
0
Merci
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
Commenter la réponse de cs_Orohena
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
0
Merci
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+
Commenter la réponse de bigfish_le vrai
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
0
Merci
Sorry jmfmarques, je n'ai pas vu ta réponse
Commenter la réponse de cs_Orohena
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
0
Merci
Re,

Désolé pour le poste croisé

A+
Commenter la réponse de bigfish_le vrai
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
0
Merci
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
Commenter la réponse de cs_Orohena
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
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 
Commenter la réponse de PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
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 
Commenter la réponse de PCPT