IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Appel de procédure avec arguments pour RowSource d'une ListBox [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Par défaut Appel de procédure avec arguments pour RowSource d'une ListBox
    Bonjour à tous,

    J'ai récemment appris comment passer des arguments optionnels ou non à une procédure.

    Toutefois je n'ai été confronté à l'appel de ce type de procédure que pour le passage des paramètres de graphiques.

    Ici je voudrais savoir comment à chaque appel de la procédure pouvoir à la fois transmettre les paramètres du graphique à créer tout en passant la ou les plage(s) devant alimenter l'argument RowSource d'une ListeBox qui irait chercher systématiquement ses données dans un Bilan, Compte de résultats et une série de ratios (Feuille 3). Graphiques et données financières apparaissant tous en Feulle 1.

    En annexe je fourni un document .pdf se composant à la fois de la feuille 1 sur laquelle on peut voir que j'ai appelé le graphique Key Financials et de la feuille 3 dans laquelle se trouve les bilan, compte de résultat et les ratios.

    Pour enfoncer le clou je précise donc qu'IDEALEMENT j'aimerais accompagner mon graphique d'une fenêtre affichant les données financières dudit graphique. Cela aide mieux à l'analyse selon moi.

    D'avance merci de votre temps et patience.

    Ricardo.

    PS Ci-dessous les deux procédures clés de ma requête. Celle appelant le graphique Key Financial. Ansi que celle, Chart_PL_Analysis, recevant les arguments et dans laquelle devrait apparaître le code pour l'affichage de la ListBox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Private Sub BTNPLAnalysisRatiosMenuKF_Click()
     
    Dim PlageF As Variant
    Dim Plage1 As Range
    Dim Plage2 As Range
    Dim Plage3 As Range
    Dim Plage4 As Range
    Dim Plage5 As Range
     
    Dim Etiquette1 As Variant
    Dim Etiquette2 As Variant
    Dim Etiquette3 As Variant
    Dim Etiquette4 As Variant
    Dim Etiquette5 As Variant
     
     
    Dim ChartTitleA As String
    Dim ChartTypeA As Variant
    Dim ChartNameA As Variant
     
    ChartTypeA = xlColumnClustered
    ChartTitleA = "Key Financials"
    ChartNameA = "Key Financials"
     
    Set Plage1 = Worksheets(1).Range("I35:K35")
    Set Plage2 = Worksheets(1).Range("I37:K37")
    Set Plage3 = Worksheets(1).Range("I40:K40")
    Set Plage4 = Worksheets(1).Range("I42:K42")
    Set Plage5 = Worksheets(1).Range("I44:k44")
     
    Etiquette1 = Worksheets(1).Range("G35")
    Etiquette2 = Worksheets(1).Range("G37")
    Etiquette3 = Worksheets(1).Range("G40")
    Etiquette4 = Worksheets(1).Range("G42")
    Etiquette5 = Worksheets(1).Range("G44")
     
    Call Chart_PL_Analysis(ChartNameA, ChartTypeA, ChartTitleA, Plage1, Etiquette1, Etiquette2, Etiquette3, Etiquette4, Etiquette5, Plage2, Plage3, Plage4, Plage5)
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Sub Chart_PL_Analysis(CharTNamePLA As Variant, ChartTypePLA As Variant, ChartTitlePLA As String, Plage1 As Range, Optional Etiquette1 As Variant, Optional Etiquette2 As Variant, Optional Etiquette3 As Variant, Optional Etiquette4 As Variant, Optional Etiquette5 As Variant, Optional Plage2 As Variant, Optional Plage3 As Variant, Optional Plage4 As Variant, Optional Plage5 As Variant)
     
    Dim Plage As Range
    Dim Mon_Graphique As Shape
    Dim Ma_Feuille As Worksheet
     
    On Error Resume Next
     
    Set Plage = Plage1
    If Not IsMissing(Plage2) Then Set Plage = Union(Plage, Plage2)
    If Not IsMissing(Plage3) Then Set Plage = Union(Plage, Plage3)
    If Not IsMissing(Plage4) Then Set Plage = Union(Plage, Plage4)
    If Not IsMissing(Plage5) Then Set Plage = Union(Plage, Plage5)
    Set Ma_Feuille = ThisWorkbook.Worksheets(1)
    Set Mon_Graphique = Ma_Feuille.Shapes.AddChart
     
    With Mon_Graphique
        .Top = Range("e12").Top
        .Left = Range("e12").Left
        .Height = Range("e12:h28").Height
        .Width = Range("e12:h28").Width
        .Name = CharTNamePLA
     
        With .Chart
            .SetSourceData Plage, xlRows
            .SeriesCollection(1).XValues = "='Balance Sh. and P&L'!$D$7:$F$7"
            .SeriesCollection(1).Name = Etiquette1
            .SeriesCollection(2).Name = Etiquette2
            .SeriesCollection(3).Name = Etiquette3
            .SeriesCollection(4).Name = Etiquette4
            .SeriesCollection(5).Name = Etiquette5
            .ChartType = ChartTypePLA
            .HasTitle = True
            .ChartTitle.Text = ChartTitlePLA
        End With
     
    End With
     
    Set Ma_Feuille = Nothing
    Set Mon_Graphique = Nothing
    Set Plage = Nothing
     
    End Sub

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Si j'ai bien compris, tu ajoute un paramètre ListBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Private Sub Chart_PL_Analysis(ListBox As Object, CharTNamePLA As Variant, ChartTypePLA As Variant, ChartTitlePLA As String, Plage1 As Range, Optional Etiquette1 As Variant, Optional Etiquette2 As Variant, Optional Etiquette3 As Variant, Optional Etiquette4 As Variant, Optional Etiquette5 As Variant, Optional Plage2 As Variant, Optional Plage3 As Variant, Optional Plage4 As Variant, Optional Plage5 As Variant)
    Dim Plage As Range
    Dim Mon_Graphique As Shape
    Dim Ma_Feuille As Worksheet
     
    On Error Resume Next
     
    Set Plage = Plage1
    ListBox.AddItem Plage1.Address(0, 0)
    If Not IsMissing(Plage2) Then
       Set Plage = Union(Plage, Plage2)
       ListBox.AddItem Plage2.Address(0, 0)
    End If
    '.....

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Par défaut
    Cher Mercatog,

    Je viens avec plaisir de lire ta réponse. Cependant je voudrais m'assurer de bien comprendre.

    Avec le code que tu as écris j'aurais bien une fenêtre qui s'affichera reprenant dans le cas présent plusieurs lignes de ratios ?

    Concrètement je passe la plage de Nett Working Capital (Fonds de roulement net) et une fenêtre s'affichera avec les données financières de Nett Working Capital ?

    J'essaie entre temps sur mon portable ton code.

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Donc, mes excuses, je n'avais pas bien compris.
    Ma proposition était la suivante:
    Sur Ta feuille une listbox nommée ListBox1 qui reprend les adresses des plages qui sont entrés en paramètre dans Chart_PL_Analysis.

    et l'appel se fera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '....
    Call Chart_PL_Analysis(Worksheets(1).ListBox1, ChartNameA, ChartTypeA, ChartTitleA, Plage1, Etiquette1, Etiquette2, Etiquette3, Etiquette4, Etiquette5, Plage2, Plage3, Plage4, Plage5)

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Par défaut Code modifié mais je capte pas tout
    Voici le code des procédures Key Financial et Chart_PL_Analysis modifiés.

    Mais je l'avoue je ne maîtrise pas du tout les ListBox car je ne m'y suis jamais attaqué auparavant.

    Comment fais-je pour dire ok la rowsource est là et affiche la ListBox ?

    Ci-dessous comme tu le proposes je mets ListBox as Object et plus loin le code mais j'affiche concrètement comment ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Private Sub Chart_PL_Analysis(Listbox As Object, CharTNamePLA As Variant, ChartTypePLA As Variant, ChartTitlePLA As String, Plage1 As Range, Optional Etiquette1 As Variant, Optional Etiquette2 As Variant, Optional Etiquette3 As Variant, Optional Etiquette4 As Variant, Optional Etiquette5 As Variant, Optional Plage2 As Variant, Optional Plage3 As Variant, Optional Plage4 As Variant, Optional Plage5 As Variant)
    
    Dim Plage As Range
    Dim Mon_Graphique As Shape
    Dim Ma_Feuille As Worksheet
    
    On Error Resume Next
     
    Set Plage = Plage1
    
    Listbox.AddItem Plage1.Address(0, 0)
    If Not IsMissing(Plage2) Then
       Set Plage = Union(Plage, Plage2)
       Listbox.AddItem Plage2.Address(0, 0)
    End If
    
    If Not IsMissing(Plage2) Then Set Plage = Union(Plage, Plage2)
    If Not IsMissing(Plage3) Then Set Plage = Union(Plage, Plage3)
    If Not IsMissing(Plage4) Then Set Plage = Union(Plage, Plage4)
    If Not IsMissing(Plage5) Then Set Plage = Union(Plage, Plage5)
    Set Ma_Feuille = ThisWorkbook.Worksheets(1)
    Set Mon_Graphique = Ma_Feuille.Shapes.AddChart
    
    With Mon_Graphique
        .Top = Range("e12").Top
        .Left = Range("e12").Left
        .Height = Range("e12:h28").Height
        .Width = Range("e12:h28").Width
        .Name = CharTNamePLA
        
        With .Chart
            .SetSourceData Plage, xlRows
            .SeriesCollection(1).XValues = "='Balance Sh. and P&L'!$D$7:$F$7"
            .SeriesCollection(1).Name = Etiquette1
            .SeriesCollection(2).Name = Etiquette2
            .SeriesCollection(3).Name = Etiquette3
            .SeriesCollection(4).Name = Etiquette4
            .SeriesCollection(5).Name = Etiquette5
            .ChartType = ChartTypePLA
            .HasTitle = True
            .ChartTitle.Text = ChartTitlePLA
        End With
         
    End With
    
    Set Ma_Feuille = Nothing
    Set Mon_Graphique = Nothing
    Set Plage = Nothing
    
    End Sub
    Ici je fourni comme argument la plage1 (exemple) vu que je désire afficher les chiffres provenant de cette plage ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub BTNPLAnalysisRatiosMenuKF_Click()
    
    Dim Plage1 As Range
    Dim Plage2 As Range
    Dim Plage3 As Range
    Dim Plage4 As Range
    Dim Plage5 As Range
    
    Dim Etiquette1 As Variant
    Dim Etiquette2 As Variant
    Dim Etiquette3 As Variant
    Dim Etiquette4 As Variant
    Dim Etiquette5 As Variant
    
    
    Dim ChartTitleA As String
    Dim ChartTypeA As Variant
    Dim ChartNameA As Variant
    
    ChartTypeA = xlColumnClustered
    ChartTitleA = "Key Financials"
    ChartNameA = "Key Financials"
    
    Set Plage1 = Worksheets(1).Range("I35:K35")
    Set Plage2 = Worksheets(1).Range("I37:K37")
    Set Plage3 = Worksheets(1).Range("I40:K40")
    Set Plage4 = Worksheets(1).Range("I42:K42")
    Set Plage5 = Worksheets(1).Range("I44:k44")
    
    Etiquette1 = Worksheets(1).Range("G35")
    Etiquette2 = Worksheets(1).Range("G37")
    Etiquette3 = Worksheets(1).Range("G40")
    Etiquette4 = Worksheets(1).Range("G42")
    Etiquette5 = Worksheets(1).Range("G44")
    
    Call Chart_PL_Analysis(Plage1, ChartNameA, ChartTypeA, ChartTitleA, Plage1, Etiquette1, Etiquette2, Etiquette3, Etiquette4, Etiquette5, Plage2, Plage3, Plage4, Plage5)
    
    End Sub

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 362
    Par défaut
    Ah lol tu écrivais déjà quelque chose entre temps. Mais bon je vais faire des tests.

    Bon là je suis perdu tu peux faire comme pour les enfants un dessin

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Tu insère une listbox ActiveX sur ta feuille, tu la nomme ListBox1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call Chart_PL_Analysis(Worksheets(1).ListBox1, ChartNameA, ChartTypeA, ChartTitleA, Plage1, Etiquette1, Etiquette2, Etiquette3, Etiquette4, Etiquette5, Plage2, Plage3, Plage4, Plage5)
    permet de remplir ta listbox par les adresses de tes plages

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel par bouton d'une procédure avec argument
    Par defluc dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/05/2012, 15h48
  2. Appel d'une procédure avec argument d'un autre script
    Par behonestinlife dans le forum VBScript
    Réponses: 1
    Dernier message: 10/05/2010, 00h04
  3. [ZF 1.9] Appel de procédure avec déclaration
    Par Benoit7114 dans le forum Zend_Db
    Réponses: 2
    Dernier message: 05/03/2010, 11h06
  4. rexx appel routine externe avec arguments
    Par qqoos dans le forum z/OS
    Réponses: 2
    Dernier message: 13/05/2009, 11h51
  5. Appel script Perl avec arguments
    Par metalcoyote dans le forum Général Java
    Réponses: 5
    Dernier message: 12/06/2008, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo