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 :

appeler deux fonctions dans une autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut appeler deux fonctions dans une autre
    bonjour tout le monde,

    Je cherche à appeler deux fonctions qui me permettre de faire des sommes en une 3ème mon code est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub TotalP()
     
        Dim Totaux() As Double
     
     
        Totaux = SousTotalP1() + SousTotalP2() 
        'SousTotaP1 et SousTotalP2 sont deux Sub déjà définient et Totaux doit normalement me donner la somme des résultats obtenus dans les deux Sub
     
        MsgBox ("le total Passif : " & Totaux)
     
    End Sub
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour,

    SousTotalP1() + SousTotalP2() devraient être des fonctions et non des Sub(s) si tu veux que ces macros te retournent un résultat.

    cordialement

  3. #3
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    je pense que tu confonds Fonction et Sub (Procédure).

    La procédure ne te ramène généralement pas de résultat, mais bien la fonction.

    Dans ton cas il te faut une fonction.

    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function SousTotalP1() As Double
    SousTotalP1 = 10
    End Function
    Ton code deviendra alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Totaux = SousTotalP1() + SousTotalP2()

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    Rebonjour,

    ça marche toujours pas,

    Voilà les trois fonctions modifiées

    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
     
     
    Function SousTotalP1() As Double
    Dim Tablo As Variant, Totaux() As Double, Total As Double, somme As Double
    Dim TabloC As Variant, TabloD As Variant
     
        Tablo = Array( _
                    101, 104, 105, 106, _
                    11, _
                    12, _
                    13, _
                    14)
     
     
        For i = 0 To UBound(Tablo)
            ReDim Preserve Totaux(i)
            Totaux(i) = ResultPassif(CStr(Tablo(i)))
        Next i
        For i = 0 To UBound(Totaux)
            Total = Total + Totaux(i)
        Next
     
        MsgBox ("le total1 est : " & Total)
     
    End Function
    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
     
    Function SousTotalP2() As Double
    Dim Tablo As Variant, Totaux() As Double, Total As Double, somme As Double
    Dim TabloC As Variant, TabloD As Variant
     
        Tablo = Array( _
                    151, 153, 155, 157, 158)
     
        For i = 0 To UBound(Tablo)
            ReDim Preserve Totaux(i)
            Totaux(i) = ResultPassif(CStr(Tablo(i)))
        Next i
        For i = 0 To UBound(Totaux)
            Total = Total + Totaux(i)
        Next
     
        MsgBox ("le total2 est : " & Total)
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub TotalP()
     
        Dim Totaux() As Double
     
        Totaux = SousTotalP1() + SousTotalP2() 
     
        MsgBox ("le total Passif : " & Totaux)
     
    End Sub
    Voila. Sinon merci pour vos réponses

  5. #5
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re
    tes fonctions complétées
    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
    Dim Tablo As Variant, Totaux() As Double, Total As Double, somme As Double
    Dim TabloC As Variant, TabloD As Variant
     
        Tablo = Array( _
                    101, 104, 105, 106, _
                    11, _
                    12, _
                    13, _
                    14)
     
     
        For i = 0 To UBound(Tablo)
            ReDim Preserve Totaux(i)
            Totaux(i) = ResultPassif(CStr(Tablo(i)))
        Next i
        For i = 0 To UBound(Totaux)
            Total = Total + Totaux(i)
        Next
        SousTotalP1 = Total
        MsgBox ("le total1 est : " & SousTotalP1)
     
    End Function
     Function SousTotalP2() As Double
    Dim Tablo As Variant, Totaux() As Double, Total As Double, somme As Double
    Dim TabloC As Variant, TabloD As Variant
     
        Tablo = Array( _
                    151, 153, 155, 157, 158)
     
        For i = 0 To UBound(Tablo)
            ReDim Preserve Totaux(i)
            Totaux(i) = ResultPassif(CStr(Tablo(i)))
        Next i
        For i = 0 To UBound(Totaux)
            Total = Total + Totaux(i)
        Next
        SousTotalP2 = Total
        MsgBox ("le total2 est : " & SousTotalP2)
     
    End Function
     Sub TotalP()
     
        Dim Totaux As Double
     
        Totaux = SousTotalP1() + SousTotalP2()
     
        MsgBox ("le total Passif : " & Totaux)
     
    End Sub
    tiens nous au courant

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    merci c'est nikel sinon en fait au lieu d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Totaux = SousTotal1() + SousTotal2() + ...
    J'aurais bien aimé faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For i = 0 To ...
        Totaux =SousTotal & i 'ou un truc du genre
    Tu pourras m'aider? parce que je dois le faire le plus générique possible comme ça je pourrais ajouter autant de SousTotaux que je veux

    Mais sinon pour la modif c'était exactement ce que je cherchais

    Encore une fois merci

  7. #7
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    essaie si ça te convient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Sub TotalP()
     Dim tabSousTotaux As Variant
     tabSousTotaux = Array(SousTotalP1(), SousTotalP2())
     
        Dim Totaux As Double
         For i = LBound(tabSousTotaux) To UBound(tabSousTotaux)
         Totaux = Totaux + tabSousTotaux(i)
         Next i
        'Totaux = SousTotalP1() + SousTotalP2()
     
        MsgBox ("le total Passif : " & Totaux)
     
    End Sub
    @+

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    oui c'est ce que je mettais au début et ca marche bien mais est ce que je pourrais pas avoir une méthode qui me calcule combien de SousTotaux j'ai, genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 0 To Ubound(je c'est pas)
       ReDim Preserve Tab(i)
       Tab = Array(SousTotal & i())
    Merci d'avance

  9. #9
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re

    à part écrire une macro qui va compter tes fonctions qui commence par "SousTotalP" dans VBA, je ne vois pas.
    Et ça commence à devenir l'usine à gaz.
    @+

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    re,

    oui t'as tt à fait raison une vraie usine à gazz merci en tt cas tu m'as suffisament aidée

  11. #11
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    et voilà, largement inspiré d'une macro de J Walkenbach

    Recopie tout le code dans un module
    Fonctionne ici pour Module1
    Cette macro compte les fonctions qui commence par "SousTotalP" , les lance et ajoute le résultat de chacune à Totaux.
    Tes fonctions doivent toutes être dans le même module

    Tu dis
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    'IL FAUT COCHER LA RÉFÉRENCE
    'Microsoft Visual Basic for Application Extensibility
    Dim Total As Double
    Dim Totaux As Double
    Sub TotalP()
            Dim VBProj As VBIDE.VBProject
            Dim VBComp As VBIDE.VBComponent
            Dim CodeMod As VBIDE.CodeModule
            Dim LineNum As Long
            Dim NumLines As Long
            Dim WS As Worksheet
            Dim Rng As Range
            Dim ProcName As String
            Dim ProcKind As VBIDE.vbext_ProcKind
     
     
            Set VBProj = ActiveWorkbook.VBProject
            Set VBComp = VBProj.VBComponents("Module1")
            Set CodeMod = VBComp.CodeModule
     
            With CodeMod
                LineNum = .CountOfDeclarationLines + 1
                ProcName = .ProcOfLine(LineNum, ProcKind)
                Totaux = 0
     
                Do Until LineNum >= .CountOfLines
     
                    If Left(ProcName, 10) Like "SousTotalP" Then
                        Application.Run ProcName
                        Totaux = Totaux + Total
                    End If
     
                    LineNum = LineNum + .ProcCountLines(ProcName, ProcKind) + 1
                    ProcName = .ProcOfLine(LineNum, ProcKind)
                Loop
            End With
            MsgBox "Totaux = " & Totaux
            Set VBProj = Nothing
            Set VBComp = Nothing
            Set CodeMod = Nothing
        End Sub
    Function SousTotalP1() As Double
    Dim Tablo As Variant, Totaux() As Double, somme As Double ', Total As Double
    Dim TabloC As Variant, TabloD As Variant
      Total = 0
     
        Tablo = Array( _
                    101, 104, 105, 106, _
                    11, _
                    12, _
                    13, _
                    14)
     
     
        For i = 0 To UBound(Tablo)
            ReDim Preserve Totaux(i)
            Totaux(i) = ResultPassif(CStr(Tablo(i)))
           ' Totaux(i) = CStr(Tablo(i))
        Next i
        For i = 0 To UBound(Totaux)
            Total = Total + Totaux(i)
        Next
        SousTotalP1 = Total
        MsgBox ("le total1 est : " & SousTotalP1)
     
    End Function
     Function SousTotalP2() As Double
    Dim Tablo As Variant, Totaux() As Double, somme As Double ', Total As Double
    Dim TabloC As Variant, TabloD As Variant
     Total = 0
        Tablo = Array( _
                    151, 153, 155, 157, 158)
     
        For i = 0 To UBound(Tablo)
            ReDim Preserve Totaux(i)
            Totaux(i) = ResultPassif(CStr(Tablo(i)))
          '  Totaux(i) = (CStr(Tablo(i)))
        Next i
        For i = 0 To UBound(Totaux)
            Total = Total + Totaux(i)
        Next
        SousTotalP2 = Total
        MsgBox ("le total2 est : " & SousTotalP2)
     
    End Function
    C'est assez générique?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    Je pense que c'est assez générique pour moi mais tu seras ce que je dois ajouter parce ça se compile pas pour moi: on me donne une erreur au niveau de la définition de VBProj :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim VBProj As VBIDE.VBProject
    voila le message d'erreur: "Type défini pas l'utilisateur non défini"

    Et puis pour: 'il faut cocher la référence

    Ca veut dire quoi au juste

  13. #13
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    as tu coché la référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'IL FAUT COCHER LA RÉFÉRENCE
    'Microsoft Visual Basic for Application Extensibility
    Dans VBA outil / Références

    @+

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    effectivement fallait cocher cette case mais bon ... par contre j'ai tuoujours des erreur il arrive pas a trouver la fonction SousTotal1 le bug est à ce niveau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    If Left(ProcName, 10) Like "SousTotalP" Then
                        Application.Run ProcName
                        Totaux = Totaux + Total
                    End If

  15. #15
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour,

    les premières fonctions étaient nommées
    SousTotalP1 et SousTotalP2 et pas SousTotal1 et SousTotal2. Tu vérifies.

    Cest fonctions sont elles dans Module1, si ce n'est pas le cas, as tu modifié le nom du module dans le code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Left(ProcName, 10) Like "SousTotalP" Then
    SousTotalP ne contient que 9 caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Left(ProcName, 9) Like "SousTotalP" Then
    @+

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    Bonjour,

    d'abord dsl de ne pas pouvoir répondre immédiatement mais j'avais un soucis sur mon PC, en effet les fonction sont bien dans le module1 et j'utilise effectivement les fonction commençant pas SousTotalP l'autre jour j'avais juste fait une erreur de frappe. Malheureusement, j'ai toujours un problème dans la compilation mnt mon erreur se situe exactement ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set VBProj = ActiveWorkbook.VBProject
    le message qu'on m'affiche est le suivant:
    Erreur d'éxécution '1004'
    L'accès par programme au projet Visual Basic n'est pas fiable

  17. #17
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut


    quel est le niveau de sécurité de ton classeur?
    @+

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    Bonjour,

    Ben on m'a toujours conseiller de le mettre au niveau élevé

  19. #19
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    Bonjour avec un peu de retard,
    as tu essayé ta macro en changeant le niveau de sécurité?
    Tiens nous au courant.
    @+

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    bonjour,

    Effectivement j'ai changé le niveau de sécurité mais ca me donnetuoujours des bug

    bonjour fred65200,

    l'autre jour tu m'as dit qu'on peut jamais appeler une sub dans une autre alors comment peut t'en au même tps exécuter une fonction et pouvoir l'appeler dans une autre aussi.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. appel de fonctions dans une autre feuille
    Par arkhamon dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/02/2012, 14h04
  2. appel de fonctions dans une autre feuille
    Par arkhamon dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/02/2012, 13h17
  3. appelle des fonctions dans une autre
    Par bennkabazz dans le forum Requêtes
    Réponses: 0
    Dernier message: 01/12/2008, 15h40
  4. appel d'une fonction dans une autre feuille
    Par mardona dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/04/2007, 17h51
  5. PHP4 appel d'une fonction dans une autre
    Par cmicdev dans le forum Langage
    Réponses: 6
    Dernier message: 18/05/2006, 11h37

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