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 :

Passage de paramètres à une procédure [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    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
    Points : 70
    Points
    70
    Par défaut Passage de paramètres à une procédure
    Bonjour Chers Tous,

    Avant tout bonne année et bonne santée sont ce que je vous souhaite du fond du coeur.

    Bon mon souci.

    Toujours dans le cadre du développement d'une application en Credit Risk Management je reviens cette fois-ci, non plus à propos des menus déroulants, mais pour le passage de paramètres à une procédure.

    Dans la procédure ci-dessous j'attribue à chacune des variables la valeur que je désire voire être transmise en faisant Call Chart_PL_Analysis

    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
    Private Sub BTNPLAnalysisLiabilities_Click()
     
    Dim Plage1 As Range
    Dim Plage2 As Range
    Dim Plage3 As Range
     
    Dim ChartTitleA As String
    Dim ChartTypeA As Variant
     
    ChartTypeA = xlColumnClustered
    ChartTitleA = "Liabilitities"
     
    Set Plage1 = Worksheets(3).Range("A23:F23")
    Set Plage2 = Worksheets(3).Range("A28:F28")
    Set Plage3 = Worksheets(3).Range("A30:F30")
     
    Call Chart_PL_Analysis(Plage1, Plage2, Plage3, ChartTypeA, ChartTitleA)
     
    End Sub
    Dans la copie d'écran fournie en annexe vous constaterez que je propose un Menu déroulant via lequel on peut choisis un graphique pour les Assets, un graphique pour les Liabilities, etc, etc.

    Mon souci a été que dans certains cas je n'ai qu'une plage de cellules à transférer dans d'autres cas deux voire trois plages.

    Dans le graphique (Graphique Liabilities) que je vous ai joint j'avais effectivement trois plages à transmettre: Plage 1 = Capital and Reserves, Plage 2 = LT Liabilities et Plage 3= ST Liabilities.

    Mais si je prends la procédure (Graphique Assets) ci-dessous je n'ai à transférer en réalité que deux plages de cellules. Les Plages 1 et 2. La Plage 3se voit attribuer une ligne vide de données. Pourquoi ? Parce que je ne sais comment dire que le passage de paramètres n'est pas toujours de x valeurs mais des fois de x mais aussi de y voire z....valeurs

    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
    Private Sub BTNPLAnalysisAssets_click()
     
    Dim Plage1 As Range
    Dim Plage2 As Range
    Dim Plage3 As Range
     
    Dim ChartTitleA As String
    Dim ChartTypeA As Variant
     
    ChartTypeA = xlColumnClustered
    ChartTitleA = "Assets"
     
    Set Plage1 = Worksheets(3).Range("A8:F8")
    Set Plage2 = Worksheets(3).Range("A14:F14")
    Set Plage3 = Worksheets(3).Range("A21:F21")
     
    Call Chart_PL_Analysis(Plage1, Plage2, Plage3, ChartTypeA, ChartTitleA)
     
    End Sub
    Dans la procédure ci-dessous (celle qui crée le le graphique) je propose les trois plages comme valeurs entrantes.


    Ma question est la suivante: Comment faire en sorte pour que la procédure créant le graphique appelée par toutes mes procédures d'analyse de bilan fonctionne sachant que les plages de valeurs fournies seront différentes en nombre ?

    Question annexe. J'ai tenté d'incorporer les dates dans mes graphiques mais n'ai pas trop su comment faire. Sur base du bilan tel que joint pourriez-vous me donner une idée ?

    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
    Private Sub Chart_PL_Analysis(Plage1 As Range, Plage2 As Range, Plage3 As Range, ChartTypeS As Variant, ChartTitleS As String)
     
    Dim Mon_Graphique As Shape
    Dim Ma_Feuille As Worksheet
     
    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 = "Ratio's Chart"
     
        With .Chart
            .SetSourceData Union(Plage1, Plage2, Plage3), xlRows
            .ChartType = ChartTypeS
            .HasTitle = True
            .ChartTitle.Text = ChartTitleS
        End With
     
    End With
     
    End Sub

  2. #2
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Plage2 et Plage3 sont optionnels
    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
    Private Sub Chart_PL_Analysis(Plage1 As Range, ChartTypeS As Variant, ChartTitleS As String, Optional Plage2 As Range, Optional Plage3 As Range)
    Dim plage As Range
    Dim Mon_Graphique As Shape
    Dim Ma_Feuille As Worksheet
     
    Set plage = Plage1
    If Not IsMissing(Plage2) Then Set plage = Union(plage, Plage2)
    If Not IsMissing(Plage3) Then Set plage = Union(plage, Plage3)
    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 = "Ratio's Chart"
     
        With .Chart
            .SetSourceData plage, xlRows
            .ChartType = ChartTypeS
            .HasTitle = True
            .ChartTitle.Text = ChartTitleS
        End With
    End With
    Set Ma_Feuille = Nothing
    Set Mon_Graphique = Nothing
    Set plage = Nothing
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre régulier
    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
    Points : 70
    Points
    70
    Par défaut Erreur en prenant ta procédure
    Bonjour Mercatog,

    J'ai mis ta procédure en lieu et place de la mienne et lorsque je clique sur le bouton Assets il me sort l'erreur suivante (copie écran annexé).

    Ou est le souci ?

  4. #4
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Attention à l'ordre des variables, les Optional sont laissés en dernier
    Regarde attentivement et adapte l'appel de la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Chart_PL_Analysis(Plage1 As Range, ChartTypeS As Variant, ChartTitleS As String, Optional Plage2 As Range, Optional Plage3 As Range)
    Pour plus de lisibilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Chart_PL_Analysis(ChartTypeS As Variant, ChartTitleS As String, Plage1 As Range, Optional Plage2 As Range, Optional Plage3 As Range)
    les varaibles: Tye graphique, titre, plage1, optionnal plage2 et optionnal plage3

    dans l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call Chart_PL_Analysis(type, titre, plage1, [plage2],[plage3]) 'entre crochets: variable facultative
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre régulier
    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
    Points : 70
    Points
    70
    Par défaut
    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
    Private Sub BTNPLAnalysisLiabilities_Click()
     
    Dim Plage1 As Range
    Dim Plage2 As Range
    Dim Plage3 As Range
     
    Dim ChartTitleA As String
    Dim ChartTypeA As Variant
     
    ChartTypeA = xlColumnClustered
    ChartTitleA = "Liabilitities"
     
    Set Plage1 = Worksheets(3).Range("A23:F23")
    Set Plage2 = Worksheets(3).Range("A28:F28")
    Set Plage3 = Worksheets(3).Range("A30:F30")
     
    Call Chart_PL_Analysis(ChartTypeA, ChartTitleA, Plage1, Plage2, Plage3)
    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
    Private Sub BTNPLAnalysisAssets_click()
     
    Dim Plage1 As Range
    Dim Plage2 As Range
    Dim Plage3 As Range
     
    Dim ChartTitleA As String
    Dim ChartTypeA As Variant
     
    ChartTypeA = xlColumnClustered
    ChartTitleA = "Assets"
     
    Set Plage1 = Worksheets(3).Range("A8:F8")
    Set Plage2 = Worksheets(3).Range("A14:F14")
    Set Plage3 = Worksheets(3).Range("A20:F20")
     
    Call Chart_PL_Analysis(ChartTypeA, ChartTitleA, Plage1, [Plage2], [Plage3])
    Mercatog excuse-moi mais je dois pas être aussi vif d'esprit que tu le supposes.

    Pour la procédure ci-dessus j'ai tenté soit de retirer le paramètre Plage3 soit de lui lmettre la valeur Nothing. Dans les deux cas la procédure appelée ne fonctionnait pas. Il me fallait mettre plage 3 et en plus lui attibuer une valeur.

    L'aspect optionnel sous-entend quand-même bien que si je veux appeler ma procédure de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call Chart_PL_Analysis(type, titre, plage1, [plage2],[plage3])
    je peux ne rien indiquer en lieu et place de plage 2 et plage 3 ? genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call Chart_PL_Analysis(type, titre, plage1,)
    Tu pourrais reprendre la procédure ci-dessus en ayant que les deux premières à passer que je vois comment tu fais.

    Et pour que ce soit vraiment clair je voudrais en fait que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage3 = Worksheets(3).Range("A20:F20")
    disparaisse pour le graphique Assets.


    Merci d'avance de ta patience et savoir.

  6. #6
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Désolé, le IsMissing fonctionne avec des arguments facultatifs de type variant
    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
    Private Sub Chart_PL_Analysis(ChartTypeS As Variant, ChartTitleS As String, Plage1 As Range, Optional Plage2 As Variant, Optional Plage3 As Variant)
    Dim plage As Range
    Dim Mon_Graphique As Shape
    Dim Ma_Feuille As Worksheet
     
    Set plage = Plage1
    If Not IsMissing(Plage2) Then Set plage = Union(plage, Plage2)
    If Not IsMissing(Plage3) Then Set plage = Union(plage, Plage3)
    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 = "Ratio's Chart"
     
        With .Chart
            .SetSourceData plage, xlRows
            .ChartType = ChartTypeS
            .HasTitle = True
            .ChartTitle.Text = ChartTitleS
        End With
    End With
    Set Ma_Feuille = Nothing
    Set Mon_Graphique = Nothing
    Set plage = Nothing
    End Sub
     
    Private Sub BTNPLAnalysisAssets_click()
     
    Dim Plage1 As Range
    Dim Plage2 As Range
     
    Dim ChartTitleA As String
    Dim ChartTypeA As Variant
     
    ChartTypeA = xlColumnClustered
    ChartTitleA = "Assets"
     
    Set Plage1 = Worksheets(3).Range("A8:F8")
    Set Plage2 = Worksheets(3).Range("A14:F14")
     
    Call Chart_PL_Analysis(ChartTypeA, ChartTitleA, Plage1, Plage2) 'sans Plage3
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre régulier
    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
    Points : 70
    Points
    70
    Par défaut Grand Merci
    Je sais pas je t fais la bise ou te dis merci voire les deux à la fois lol.

    Ca Marche !!!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/03/2014, 12h16
  2. [CR 8] passage de paramètre à une procédure stockée
    Par prinki dans le forum Débuter
    Réponses: 1
    Dernier message: 20/05/2010, 14h16
  3. Réponses: 6
    Dernier message: 12/01/2009, 15h57
  4. [SQL2K] Passage de paramètre à une procédure stockée
    Par Faboul dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 29/05/2007, 16h51
  5. [XSLT][Saxon]passage de paramètres à une template
    Par RB Greg dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 12/05/2005, 16h29

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