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 :

Compiler des fonctions perso en une seule


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien Spectacle
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Spectacle

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Par défaut Compiler des fonctions perso en une seule
    Bonjour, j'ai un problème pour compiler 3 fonction perso (à peu près identique)... J'aimerais d'une valeur trouver un résultat. Seulement celui ci est identifiable par un chemin du genre Cellule A => Cellule B => Cellule C => Cellule D
    j'ai réussi à créer une bidouille en créant des lignes qui affiche les résultats intermédiaires. Seulement celle ci ne me convient qu'à moitié... j'aimerais supprimer ces "cellules d'étape"
    Comment faire en VBA? Pour que genre, il garde en "mémoire" les résultats intermédiaires et s'en serve pour la suite des calculs.
    J'ajoute que je suis totalement newbie en programmation
    Merci

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,


    utilise les balises de codes [Code] TES FORMULES [/code] pour nous montrer tes formules...

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien Spectacle
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Spectacle

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Par défaut
    Comme ça? :
    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
     Option Explicit
    Function RechercheTypeBrut(Nom As Range) As String
     Application.Volatile
     Dim WsS As Worksheet
    Dim Cel As Range, C As Range
    Dim Tablo
    Dim i As Integer
    Dim Valeur As String
        Set WsS = Worksheets("Patch DMX")
            If Not IsEmpty(Nom) Then
                Tablo = Split(Nom, "/")
                For i = 0 To UBound(Tablo)
                    Set C = WsS.Columns(1).Find(Tablo(i), , xlValues, xlWhole)
                    If Not C Is Nothing Then
                        Valeur = Valeur & C.Offset(0, 1) & "/"
                    End If
                Next i
                RechercheTypeBrut = Left(Valeur, Len(Valeur) - 1)
                Valeur = ""
            End If
    End Function
     
    Function RechercheAmpBrut(Nom As Range) As String
     Application.Volatile
     Dim WsS As Worksheet
    Dim Cel As Range, C As Range
    Dim Tablo
    Dim i As Integer
    Dim Valeur As String
        Set WsS = Worksheets("Amperage")
            If Not IsEmpty(Nom) Then
                Tablo = Split(Nom, "/")
                For i = 0 To UBound(Tablo)
                    Set C = WsS.Columns(1).Find(Tablo(i), , xlValues, xlWhole)
                    If Not C Is Nothing Then
                        Valeur = Valeur & C.Offset(0, 1) & "/"
                    End If
                Next i
                RechercheAmpBrut = Left(Valeur, Len(Valeur) - 1)
                Valeur = ""
            End If
    End Function
     
    Function SomInterne(RangeInput As Range) As Double
     
     SomInterne = Evaluate(Replace(RangeInput, "/", "+"))
    End Function
    Chacune des 3 fonctions se rapporte à la cellules engendrée par la précédente

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Et comment tu utilise ( lie...) ces fonctions entre-elles ... dans tes cellules :
    Citation Envoyé par miyhun
    Cellule A => Cellule B => Cellule C => Cellule D

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien Spectacle
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Spectacle

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Par défaut
    Dans la A1 j'écris manuellement 1 ou plusieurs valeurs (dans ce cas séparées de "/")
    Dans A2, la fonction va me chercher les Types correspondant à chaque valeur de A1 dans la feuille "Patch DMX"
    Dans A3 elle va me chercher la correspondance de chaque valeurs de A2 dans la feuille "Amperage"
    Dans A4 elle m'additionne les valeurs de A3

    Le problème n°1 est que dans A2, je supprime les doublons pour une meilleure visibilité à l'impression
    Le problème n°2 est que A3, je n'ai pas envie qu'elle apparaisse, elle ne me sert à rien visuellement

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    encore une fois c'est incomplet pour nous aider à comprendre tu aurais pu mettre tes formules .... afin que l'on voit si l'on peu modifier tes fonctions pour en faire une seule ..

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien Spectacle
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Spectacle

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Par défaut
    Je crois les avoir mis plus haut non?

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par miyhun Voir le message
    Je crois les avoir mis plus haut non?
    non ... quand on dit formule l'on parle pas du code VBA mais des formules contenues dans ta feuille de calcul ..! , si tu n'utilise pas de formule comment utilise tu tes fonctions ?

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien Spectacle
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Spectacle

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Par défaut
    j'utilise pas de formule... Juste des recherches de valeurs dans différentes colonnes, de différentes feuilles

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je ne sais pas si tu as trouvé une solution mais comme la différence entre les deux fonctions est le nom de la feuille, il suffit de demander en argument la colonne qui a pour parent la feuille concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Test()
     
        'Appelle la même fonction...
        'pour la feuille "Patch DMX"
        MsgBox RechercheBrut(Worksheets("Patch DMX").Columns(1), Range("A1"))
        'pour la feuille "Amperage"
        MsgBox RechercheBrut(Worksheets("Amperage").Columns(1), Range("A1"))
     
    End Sub
    et la fonction pourrait ressembler à ça :
    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
     
    Function RechercheBrut(Colonne As Range, Nom As Range) As String
     
        Dim Cel As Range, C As Range
        Dim Tablo
        Dim i As Integer
        Dim Valeur As String
     
        Application.Volatile
     
        If Not IsEmpty(Nom) Then
     
            Tablo = Split(Nom.Value, "/")
     
            For i = 0 To UBound(Tablo)
     
                Set C = Colonne.Find(Tablo(i), , xlValues, xlWhole)
     
                If Not C Is Nothing Then Valeur = Valeur & C.Offset(0, 1) & "/"
     
            Next i
     
            RechercheAmpBrut = Left(Valeur, Len(Valeur) - 1)
     
        End If
     
    End Function

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si j'ai bien compris, tu dispose de 3 feuilles de données et une feuille de résultat.

    La feuille résultat récupère la somme de 3 recherche sur chaque feuille de données.

    Pour résoudre cette problématique, tu as procédé par étapes, maintenant tu voudrais fusionner ces étapes?

    Le problème c'est que ton raisonnent est faut! Il faudrait que tu implémentes un fonction de recherche universelle qui te retourne la valeur recherchée qui servirait a implémenter la fonction sommes.

    Mysomme(recherche(A),recherche(B),recherche(C)) !

    Ce que je veux dire, c'est que tu ne peux pas partir d'une solution que tu as choisi par dépit comme base pour échafauder une solution finale!

    Il faut reprendre l'analyse du début!
    Dernière modification par Invité ; 16/11/2015 à 08h38.

Discussions similaires

  1. Fonction js lancée une seule fois avec setInterval
    Par stephnane dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/08/2007, 23h03
  2. [Requête] Utilisation d'une fonction perso dans une requête
    Par Julien Dufour dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/03/2007, 10h53
  3. Réponses: 8
    Dernier message: 26/10/2006, 17h46
  4. Réponses: 2
    Dernier message: 19/09/2006, 20h06
  5. Pointeur sur des fonctions membres d'une classe
    Par Muetdhiver dans le forum C++
    Réponses: 3
    Dernier message: 15/02/2006, 12h35

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