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

Excel Discussion :

formule avec des variables sur matrice


Sujet :

Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 22
    Points
    22
    Par défaut formule avec des variables sur matrice
    bonjour

    j'ai n concurrents et m articles
    chaque concurrent a proposé un prix pour chaque article

    et je voudrais pour chaque concurrent et pour chaque article faire le calcul suivant:
    M=moyenne des prix des autres concurrents ( on exclut à chaque foix le prix du concurrent)
    1- par exemple l'article1 :et mettons qu'on a 5 concurrents et chaque concurrent a mis un prix : a1c1,a1c2;a1c3;a1c4;a1c5
    M du premier concurrent= (a1c2+a1c3+a1c4+a1c5)/4
    M du 2ème concurrent=(a1c1+a1c3+a1c4+a1c5)/4
    etc.
    2-de même pour chaque article.
    ...


    la difficulté et que le nombre de concurrents varie et que le nombre d'articles varie aussi et que je veux arrêter une formule une fois pour toute . car je veux que l'utilisateur final qui est novice en la matière puisse juste saisir les différents prix des différents concurrents pour chaque article et que les résultats s'affichent automatiquement .

    j'espère avoir été claire et merci infiniment de m'aider

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    par exemple
    Fichiers attachés Fichiers attachés
    Elle est pas belle la vie ?

  3. #3
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    bonjour

    je ne sais pas si j'ai compris mais essayons

    avec la fonction SOMMEPROD

    le plages doivent etre strictement egales

    =SI(SOMMEPROD((concurent=premier)*1)>0;SOMMEPROD((concurent=premier)*montant)/sommeprod((concurent=premier)*1);0)

    Concurent = plage de ta base contenant les references concurents
    Premier, est la cellule contenant le nom du concurent testé
    Montant = plage de ta base contenant les montant à additionner

    Concurent et montant doivent etre de meme longueur
    Wilfried

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 22
    Points
    22
    Par défaut
    bonjour et merci infiniment pour vos réponses
    je m'adresse à random plus particulièrement . c'est exactement ça le calcul (surtout le nbval dont j'ignorais l'exstence)l à un détail prés : j'ai ajouté un si au début si le concurrent n'a pas de prix je dois avoir résultat vide. c'est pour les colonnes qui se trouvent à droite du dernier concurrent: comme le nombre de concurrents n'est pas connu à l'avance et que la formule je vais la recopier sur un maximum de colonnes possibles .
    je vais t'envoyer mon exemple . j'ai ajouté une colonne en plus qui est admin car au fait la vrai moyenne prend en compte aussi les prix de cette colonne.
    ensuite j'ai mis d'autres feuilles que tu pourras comprendre facilement .
    mais le hic c'est que l'utilisateur lambda va se retrouver avec 4 feuilles et comme je veux lui faciliter la vie n'ya a til pa un moyen de tout mettre sur la même feuille peut être en ajoutant des colonnes affichant le résultat final moyennant par exemple vba
    autre chose : avant j'ai utilisé nb(si ...) mais j'étais obligée de valider avec ctrl shift entrée (formule matricielle ) sinon j'obtenais 0 . avec ta méthode j'ai évité les formules matricielles qui m'ont trop alourdi les manipulations
    merci encore beaucoup
    au fait depsui belel lurette que j'essaie d'envoyer mon exmple et rien je vais tâcher de l'envoyerdemain du boulot en espérant que ça marche

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour samimikha,

    A toutes fins utiles, pour joindre un fichier :

    Vous ouvrez votre sujet puis vous cliquez sur "Ajouter une réponse".

    Sous la fenêtre contenant la réponse, vous cliquez sur "Gérer les pièces jointes"
    puis sur "Parcourir" pour sélectionner le chemin contenant votre fichier puis vous cliquez sur "Envoyer".

    Attention la taille de doit pas dépasser 128 Ko pour un fichier .Xls mais vous pouvez le "Zipper" (taille maximum 512 K0).

    De toutes façons si votre fichier contient des objets inutiles pour la compréhension (images par exemple) il vaut mieux en créer une copie et supprimer le superflu.

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 22
    Points
    22
    Par défaut
    j'ai compris pourquoi le fichier ne veut pas être envoyé car il était gros 36 Mo j'ai effacé les formules recopiées et je l'ai zippé
    Fichiers attachés Fichiers attachés

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 22
    Points
    22
    Par défaut
    rebonjour
    au fait ce que je voudrais c'est que 3 colonnes s'insèrent après chaque concurrent affichant les min les max et le résultat et ce pour chaque concurrent et chaque prix donc ça va boucler jusqu'à ce qu'il n'y ait plus de concurrent et prix cad 1ere colonne vide et 1ere ligne vide ou alors on peut saisir le nombre de concurrents et le nombre de prix

    donc je crois qu'il faut du vba pour ça et je n'ai que quelqeus notions donc si vous pouvez m'aider
    merci

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 22
    Points
    22
    Par défaut
    bonjour
    finalement j'ai pu écrire un petit programme vb
    voici son contenu à toutes fins utiles:

    Sub appeloffre()
    Dim cel As Range
    Dim s As Currency
    Dim z As String


    'E3 correspond à au premier prix du premier concurrent, B3 au premier prix de l'administration,C3 à la quantité du premier prix, et D3 à la tva du premier prix ; vous pourrez modifier ces valeurs selon les cellules occupées par ces valeurs
    Set cel = Range("E3")
    Set admin = Range("B3")
    Set qte = Range("C3")
    Set tva = Range("D3")

    'x = WorksheetFunction.CountA(cel.EntireColumn)


    'calcul des min max des diffrents prix
    i = 0
    j = 0


    'boucle pour calcul par ligne
    Do While cel.Offset(i, j) <> ""
    s = 0

    'boucle pour calcul du total des concurrents et nombre de concurrents
    Do While cel.Offset(i, j) <> ""
    var = cel.Offset(i, j).Value
    s = s + var
    j = j + 5
    x = (j - 5) / 5
    Loop

    'boucle pour calcul par colonne
    j = 0
    Do While cel.Offset(i, j) <> ""
    mn = (admin.Offset(i, 0).Value + (s - cel.Offset(i, j).Value) / x) / 2
    cel.Offset(i, j + 1).Value = cel.Offset(i, j).Value * qte.Offset(i, 0).Value
    cel.Offset(i, j + 2).Value = mn * 0.75
    cel.Offset(i, j + 3).Value = mn * 1.25
    If cel.Offset(i, j).Value > mn * 1.25 Then
    z = "Excessive"
    ElseIf cel.Offset(i, j).Value < mn * 0.75 Then
    z = "Basse"
    Else
    z = "OK"
    End If
    cel.Offset(i, j + 4).Value = z

    j = j + 5
    Loop


    i = i + 1
    j = 0
    Loop




    'calcul des totaux dernière ligne


    'calcul total hors TVA

    i = 0
    j = 0
    s = 0
    'boucle pour calcul hors tva de administration
    Do While admin.Offset(i, 0) <> ""
    var = admin.Offset(i, 0).Value * qte.Offset(i, 0).Value
    s = s + var
    i = i + 1
    Loop
    admin.Offset(i + 1, -1).Value = "Total hors TVA"
    admin.Offset(i + 2, -1).Value = "TVA"
    admin.Offset(i + 3, -1).Value = "Total TTC"
    admin.Offset(i + 1, 0).Value = s


    'boucle pour total hors tva chaque concurrent
    i = 0
    j = 0
    Do While cel.Offset(i, j) <> ""
    s = 0
    Do While cel.Offset(i, j) <> ""
    var = cel.Offset(i, j).Value * qte.Offset(i, 0).Value
    s = s + var
    i = i + 1
    Loop
    cel.Offset(i + 1, j + 1).Value = s

    j = j + 5
    i = 0
    Loop




    'calcul Montant TVA

    i = 0
    j = 0
    s = 0
    'boucle pour montant tva de administration
    Do While admin.Offset(i, 0) <> ""
    var = admin.Offset(i, 0).Value * qte.Offset(i, 0).Value * tva.Offset(i, 0).Value
    s = s + var
    i = i + 1
    Loop
    admin.Offset(i + 2, 0).Value = s


    'boucle pour montant tva chaque concurrent
    i = 0
    j = 0
    Do While cel.Offset(i, j) <> ""
    s = 0
    Do While cel.Offset(i, j) <> ""
    var = cel.Offset(i, j).Value * qte.Offset(i, 0).Value * tva.Offset(i, 0).Value
    s = s + var
    i = i + 1
    Loop
    cel.Offset(i + 2, j + 1).Value = s

    j = j + 5
    i = 0
    Loop




    'calcul total dépenses TTC

    i = 0
    j = 0
    s = 0
    'boucle pour calcul total de administration
    Do While admin.Offset(i, 0) <> ""
    var = admin.Offset(i, 0).Value * qte.Offset(i, 0).Value * (1 + tva.Offset(i, 0).Value)
    s = s + var
    i = i + 1
    Loop
    admin.Offset(i + 3, 0).Value = s


    'boucle pour total chaque concurrent
    i = 0
    j = 0
    Do While cel.Offset(i, j) <> ""
    s = 0
    Do While cel.Offset(i, j) <> ""
    var = cel.Offset(i, j).Value * qte.Offset(i, 0).Value * (1 + tva.Offset(i, 0).Value)
    s = s + var
    i = i + 1
    Loop
    cel.Offset(i + 3, j + 1).Value = s

    j = j + 5
    i = 0
    Loop

    'boucle par colonne pour comparer etr calculer min et max

    Do While admin.Offset(i, 0) <> ""
    i = i + 1
    Loop
    j = 0
    s = 0
    Do While cel.Offset(i + 3, j + 1) <> ""
    var = cel.Offset(i + 3, j + 1).Value
    s = s + var
    j = j + 5
    x = (j - 5) / 5

    Loop

    j = 0
    Do While cel.Offset(i + 3, j + 1) <> ""
    mn = (admin.Offset(i + 3, 0).Value + (s - cel.Offset(i + 3, j + 1).Value) / x) / 2

    cel.Offset(i + 3, j + 2).Value = mn * 0.75
    cel.Offset(i + 3, j + 3).Value = mn * 1.25
    If cel.Offset(i + 3, j + 1).Value < cel.Offset(i + 3, j + 2).Value Then
    z = "Basse"
    ElseIf cel.Offset(i + 3, j).Value > cel.Offset(i + 3, j + 3).Value Then
    z = "Excessive"
    Else
    z = "OK"
    End If
    cel.Offset(i + 3, j + 4).Value = z
    j = j + 5
    Loop




    End Sub

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

Discussions similaires

  1. [WebI XiR2] Graphique camembert avec des variables et un calcul sur les variables
    Par colom dans le forum Débuter
    Réponses: 0
    Dernier message: 12/02/2014, 14h02
  2. [XL-2000] Ecrire une formule avec des variables
    Par mollus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/06/2011, 13h31
  3. Réponses: 5
    Dernier message: 30/06/2009, 23h21
  4. interaction sur un CSS avec des variable PHP ? on peut ?
    Par dembroski dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 07/07/2007, 09h20
  5. Définir des variables sur le serveur avec PHP.
    Par ronio dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2006, 10h23

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