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 :

Somme logarithmique excel [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut Somme logarithmique excel
    Bonjour !

    je suis assez nouveau dans le monde VB pour la création de macros... En fait je veux créer une formule personnalisée pour faire une somme logarithmique en choississant plusieurs cellules.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =10*log10(10^(arg1/10)+10^(arg2/10)+....)
    Jusque là j'ai trouvé pas mal de tutoriaux et exmples qui permettent de prendre les valeurs d'une ou plusieurs cellules et/ou plages de cellules.

    Ce que je n'arrive pas à trouver, c'est comment faire pour pouvoir mettre un nombre "illimité" d'entrées (cellules et plages de cellules)... Je pense notamment à la fonction toute simple de SOMME(arg1,arg2....) d'excel qui "s'adapte au nombre d'arguments" et à leur type

    Est ce que qqun sait faire ça ou pourrait m'orienter ? Ou qqun aurait ou saurait comment trouver le code source de la fonction excel SOMME ??


    En espérant être assez clair, je vous remercie d'avance

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Citation Envoyé par chamo3000 Voir le message
    Bonjour !

    je suis assez nouveau dans le monde VB pour la création de macros... En fait je veux créer une formule personnalisée pour faire une somme logarithmique en choississant plusieurs cellules.
    Vous voulez passer par VisualBasic et faire une macro, ou utiliser directement une fonction dans une case EXCEL ?

    Si vous voulez passer par une macro, une des solutions consisterait à implémenter une boucle qui s'arrête lorsqu'elle tombe sur une cellule vide.
    En admettant que les données se situent sur la colonne A, et commencent à la ligne 1, et qu'un bouton soit installé sur la feuille, un appui sur celui-ci enclencherait la macro suivante:
    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
     
    Private Sub CommandButton1_Click()
      Dim resultat As Double
      Dim valeur As Single
      Dim ligne As Integer
     
      resultat = 0
      ligne = 1
     
      Do
        If Cells(ligne, 1).Value = "" Then
          Exit Do ' S'il n'y a plus rien, on sort
        End If
     
        valeur = Val(Cells(ligne, 1).Value) ' retourne '0' si ce n'est pas un nombre dans la cellule
     
        If valeur <> 0 Then ' On a un nombre à traiter...
          resultat = resultat + 10 ^ (Cells(ligne, 1).Value / 10)
        End If
        ligne = ligne + 1
      Loop
     
      Range("B1").Value = 10 * Log(resultat)
    End Sub
    Le résultat figure dans la case B1

    @ bientôt...

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    je pense qu'il y a une piste a suivre avec optional qui permet de definir un argument comme facultatif, ainsi, tu défini ta fonction avec un nombre d'argument préétabli mais tu n'utilises que ceux dont tu as besoin. c'est le cas de beaucoup de fonction d'excel, le nombre d'argument n'est pas illimité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonction arguments(optionnal arg1 as range , optionnal arg2 as long)
    mais honnetement, je ne parvient pas a créer une fonction qui utilise et qui fonctionne correctement en suivant cette piste, même une simple addition de plusieur cellules

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut
    Bonjour !

    Merci pour vos réponses !!

    @rtg57

    Si je comprends bien, ton code prends toutes les valeurs de la colonne A et donne le résultat de la somme en B1. Le problème est que ce que je voulais est de pouvoir prendre des cellules ou plages de cellules dans toute la feuille et mettre le resultat sur une cellule. genre =sommedb(A1;A5:C8;F1:F19)

    @alsimbad

    j'avais deja vu cette option mais le probleme c'est que tu peut definir qu'un nombre limité d'arguments... Si jamais tu veux un jour un de plus, plus possible.


    J'ai cherché un peu sur le site microsoft et sur le forum et apres un peu de code jai reussi a ecrire le code suivant et ca marche !!! L'entree ce sont plusieurs plages de cellules ou des cellueles seules. et apartir de ca le code cree un tableau d'une dimension. Apres il suffit d'appliquer la formule sur ces elements et voila !


    MERCI de votre aide et abientot !!



    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
     
    Function sommedB(ParamArray CellAddress()) As Variant
       ' Declaration of function variables.
       Dim Temp As Variant
       Dim TheArray() As Variant
       Dim Count As Integer, Ver As Integer
       Dim W As Integer, X As Integer, Y As Integer, Z As Integer
     
       ' Initialize the Count variable.
       Count = 1
       ' Set the variable Ver = 0 if the version of Microsoft Excel is
       ' greater than 8 (8 is Microsoft Excel 97 for Windows).
       If Left(Application.Version, Len(Application.Version) - 1) >= 8 Then
          Ver = 0
       Else
          Ver = 1
       End If
       ' Set variable X from Ver to the total number of arguments in
       ' the CellAddress array.
       For X = Ver To UBound(CellAddress, 1)
          ' Temp equals the first element of the CellAddress array.
          Set Temp = CellAddress(X)
     
          ' Test Temp to see whether it is an array.
          If IsArray(Temp) Then
     
             ' If Temp is an array, set Y from 1 to the total number
             ' arguments in the Temp array's first dimension.
             For Y = 1 To UBound(Temp.Value, 1)
                 ' If Temp is an array, set Z from 1 to the total number
                ' arguments in the Temp array's second dimension.
                For Z = 1 To UBound(Temp.Value, 2)
     
                   ' ReDimension TheArray, Preserving any existing
                   ' values, from 1 to Count.
                   ReDim Preserve TheArray(1 To Count)
     
                   ' TheArray, element Count equals Temp, element Y in the
                   ' first dimension by element Z in the second dimension.
                   TheArray(Count) = Temp(Y, Z).Value
                    ' Increment the Count variable by one.
                   Count = Count + 1
                Next Z
     
             Next Y
          ' If Temp is not an array, proceed from here.
          Else
             ' ReDimension TheArray, preserving any existing
             ' values, from 1 to Count.
             ReDim Preserve TheArray(1 To Count)
              ' TheArray element Count equals Temp.
             TheArray(Count) = Temp
     
             ' Increment the Count variable by one.
             Count = Count + 1
          ' End the block If statement.
          End If
       Next X
     
    som = 0
    For W = 1 To UBound(TheArray, 1)
    som = som + 10 ^ (TheArray(W) / 10)
    Next W
     
       sommedB = 10 * Application.Log10(som)
     
     
     
    End Function

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

Discussions similaires

  1. [XL-2010] Petite somme dans excel
    Par sasafca dans le forum Excel
    Réponses: 3
    Dernier message: 14/05/2013, 09h42
  2. AutomationExcel pour écrire la fonction SOMME dans Excel
    Par antow42 dans le forum Visual C++
    Réponses: 1
    Dernier message: 05/08/2009, 15h41
  3. Somme conditionnelle excel
    Par kluh dans le forum Excel
    Réponses: 1
    Dernier message: 08/12/2008, 16h56
  4. Calcul d'une somme dans Excel ??
    Par LaVaZza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/06/2006, 22h55
  5. Probleme pour faire une somme sous Excel
    Par Nicolas92 dans le forum Excel
    Réponses: 5
    Dernier message: 02/12/2005, 11h38

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