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 :

Cherche Fonction de calcul. [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut Cherche Fonction de calcul.
    Bonjour le forum,

    J'espère que ma question concernera ce forum, si ce n'est pas le cas, les modérateurs me dirigeront sur le bon forum.

    Voici mon exposé:

    J'ai un tableau de 19 variables ou instances ou occurences (je ne connais pas le terme à utiliser) qui me donne un résultat (somme).

    Je compare ce résultat à un attendu.

    Si le résultat est > à l'attendu, je souhaite que chaque donnée du tableau soit recalculée au prorata de la différence entre le résultat et l'attendu.

    Je l'ai écris (papier) comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (somme(tablo(19))=Res
    Diff=Res - attendu
    Delta=Diff / attendu
     
    For x=1 to ubound(tablo)
      if tablo(x) >0 then tablo(x)=tablo(x) - (delta * tablo(x))
    next
    La somme obtenue ensuite s'approche de l'attendu mais n'est pas identique

    J'ai essayé avec les propriétés .RoundUp et .RoundDown mais cela ne varie pas beaucoup.

    Quelqu'un connait il une propriété me permettant de réussir cette équation?

    J'ai oublié les maths depuis longtemps.

    Merci par avance

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonsoir
    c'est pas clair.

    le problème est là :
    en français :si la valeur servant au calcul est positive

    où est la comparaison
    Si le résultat est > à l'attendu, je souhaite

    la ligne de "If" doit déjà être en dehors de la boucle.

    Je m'avance peut-être...
    car c'est pas clair;

    m'absnte...

    ESVBA

  3. #3
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonsoir, ESVBA, le forum,

    J'ai juste tenté de traduire mes reflexions pour atteindre le resultat

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Vous avez écrit :

    J'ai essayé avec les propriétés .RoundUp et .RoundDown mais cela ne varie pas beaucoup.
    Vous avez donc créé une macro ?

    Si c'est la cas, donnez le code.

  5. #5
    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
    Bonsoir,
    Algo
    If Res>attendu then
    For x=1 to ubound(tablo)
    tablo(x)=tablo(x)*attendu/Res
    next x
    endif
    exemple
    à la place du tableau, une plage A1:A19
    somme(plage) en C1
    attendu en D1
    en B1:B19, valeurs ajustées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim Att As Double, Res As Double
    Dim i As Integer
    Att = Range("D1").Value
    Res = Range("C1").Value
     
    If Res > Att Then
        For i = 1 To 19
            Range("B" & i).Value = Att * Range("A" & i).Value / Res
        Next i
    End If
    End Sub

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut marc58 et le forum
    Sans parler de programmation dans un premier temps.

    Tu as une différence qui correspond à ton attendu (A), moins une somme de 19 nombres (B).
    D=A-B
    Pour avoir le résultat attendu, il faut que tu ajoutes 1/19 de la différence à chacun des 19 nombres.
    X=X+(D/19)
    Comme tu veux une égalité parfaite, les 18 premiers seront de la forme :
    X=X+(D/19)
    Comme le résultat de la division (D/19) risque d'être arrondi, le 19ème sera de la forme :
    X=A-somme(18 premiers nombres modifiés)

    Le codage est simple, mais ne disposant que de données fragmentaires, je préfère ne pas le faire, en attendant, si besoin est, le total des données pour faire un code correct.
    A+

  7. #7
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonsoir à tou(te)s,

    Avant que la discussion ne dérive sur des chemins de traverses , je vais tenter de vous apporter un éclaircissement.

    Dans un programme, je cumule à l'aide du tablo(19) des temps par action réalisée (19 au maxi).

    Je cumule ces temps, et compare le total à un attendu (temps maxi).

    Si la différence > à 0, je cherche à recalculer les temps par action pour atteindre mon temps maxi.

    J'ai donc essayé comme indiqué dans le post de départ.

    J'espère avoir apporté des précisions.

  8. #8
    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
    Re,
    pour refaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Res > Attendu Then
        For i = 1 To ubound(tablo)
            tablo(i) = tablo(i)*Attendu/ Res
        Next i
    End If
    dans Res tu as la somme

    le résultat est pile poil (sans arrondi)

  9. #9
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonsoir à tou(te)s,

    Merci à Mercatog qui a donné la solution que je cherchais. En fait j'essayais de calculer en prenant le mauvais sens (res / attendu)

    Encore une fois, je dois reconnaitre vos compétences à toutes et tous, et votre implication à faire évoluer ce forum.

    J'essaie de lire tout ce qui m'intéresse et post par énormément car j'arrive toujours à trouver, parfois avec difficultés, des réponses à mes soucis.

    J'essaie aussi d'apporter des solutions si la question m'inspire.

    Toujours est-il que je savais qu'une réponse me serait apportée en vous demandant de m'aider.

    Que le forum continue avec cet esprit le plus longtemps possible.

    Je sais, bien évidemment que bientôt on se ré-écrira.

    Encore merci à tous

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

Discussions similaires

  1. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 01h55
  2. Cherche fonction de traitement de chaine de caractere
    Par DeezerD dans le forum Langage
    Réponses: 1
    Dernier message: 10/09/2005, 15h41
  3. fonction qui calcule la factorielle ?
    Par piff62 dans le forum C
    Réponses: 8
    Dernier message: 27/02/2005, 12h00
  4. Réponses: 10
    Dernier message: 17/12/2003, 14h51
  5. Cherche Fonction du style replace...
    Par sdchamplas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/03/2003, 14h54

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