Tableau de surfaces

Bonjour

en ces temps de confinement je travaille de chez moi et où que vous soyez j'espère que vous allez bien

je suis constructeur et j'a une problématique de tableur de prix que je dois faire pour les équipes commerciales

nous modifions des plans et devons y associer un prix (surcoût ou moins-value ) en fonctions de plusieurs paramètres

j'ai 5 espaces ( rez de chaussée/étage/garage/sous-sol/auvent)

les surfaces peuvent être en moins sou en plus et doivent avoir un prix en fonction de leur transformation, agrandissement ou réduction

l'idée générale est de trouver le solde de m² non transformés et de leur appliquer là où ils se trouvent une décote de moitié prix en prenant en compte les surfaces RDC ETAGE GARAGE SOUS SOL et AUVENT

on transforme toujours la surface la plus chère en la moins chère

le solde de surface restant à déduire doit l'être à moitié prix et doit être la surface la moins chère de celles qui restent à enlever

je vous mets en PJ un tableur avec 5 exemples qui j’espère seront parlants

d'avance merci à tous ceux qui prendront de leur temps pour m'aider à trouver les bonnes formules à mettre en face de chaque espace

Bonjour,

solution via une fonction personnalisée (ilfaudrait )

Function ilfaudrait(tableau As Range)
    ' tableau (6 lignes, 5 colonnes) : 5 colonnes,base, type,vendu,ecart,prix/m²
    '
    t = tableau
    'tri du tableau en ordre croissant sur le prix
    For i = 1 To 5
        For j = i + 1 To 6
            If t(i, 5) > t(j, 5) Then
                For k = 1 To 5
                    temp = t(i, k): t(i, k) = t(j, k): t(j, k) = temp
                Next k
            End If
        Next j
    Next i
    sommeecarts = Application.Sum(tableau.Range("D1:D6"))
    i = 1
    Do While i <= 6
                oti = t(i, 4)
        If sommeecarts < 0 Then
            If oti < 0 Then
                If sommeecarts - oti < 0 Then
                sommeecarts = sommeecarts - t(i, 4)
                    t(i, 4) = 0
                    prix = oti * t(i, 5) / 2
                Else
                    t(i, 4) = oti - sommeecarts
                    sommeecarts = 0
                    prix = (oti - t(i, 4)) * t(i, 5) / 2 + t(i, 4) * t(i, 5)
                End If
              Else
              prix = oti * t(i, 5)
            End If
        Else
            prix = oti * t(i, 5)
        End If
        sommeprix = sommeprix + prix
        i = i + 1
    Loop
    ilfaudrait = sommeprix
End Function

à utiliser dans une cellule excel

=ilfaudrait(plagededonnées)

Bonjour

Solution PowerQuery fonctionnelle supprimée comme indiquée dans mon message de 22:25

bonjour h2so4

j'ai bien reçu votre solution sur le forum et vous en remercie mais pour moi c'est du chinois

je vous admire de savoir faire ca

où dois je écrire cette formule dans mon fichier , dans quelle cellule dois je la mettre ?

je dois vous préciser que les prix de chaque espace doit être mentionné

en colonne J par exemple

je ne dois pas avoir que la somme mais chaque prix selon chaque espace

merci de votre aide

valérie

Bonjour,

j'ai fourni le fichier avec la fonction personnalisée (qui nécessité d'autoriser les macros) et mis la formule dans les cellules en jaune de ton tableau.

la formule affiche le résultat final (prix total) mais pas les résultats intermédiaires. Si tel est le souhait, il faudra adapter la solution proposée ou prendre la solution de 78Chris qui me semble-t-il répond à ce besoin.

super

j'ai (enfin) trouvé où est la macro

j'avais fourni un tableur d'essai car le tableur initial est bcp trop lourd

puis je copier la macro telle quelle ?

et surtout pouvez vous me la mettre espace par espace svp

ensuite je saurais faire la somme de tout ca je crois !!!( on ne se moque pas )

merci bcp en tout cas

RE

Décidément la politesse doit aussi être en confinement, on ne la voit plus beaucoup ces temps-ci.

Je supprime ma solution qui donnait bien le résultat de toutes les lignes pour tous les cas testés...

cher chris 78 ,

vous semblez penser que je vous ai ignoré alors que j'ai fait de nombreux essais sur le tableur que vous m'avez renvoyé et vous en ai fait un retour en message privé dans la 1/2 heure

je suis embetée de votre message , ne l'avez vous pas recue ?

avez mes sincères excuses si je vous ai froissé et laisser croire que vos efforts n'avaient pas été appréciés

j'espère que nous ne m'en voudrez pas trop

bonne journée

RE

Non pas reçu de message d'où effectivement ma réaction

Depuis quelques semaines beaucoup de nouveaux inscrits qui ne répondent pas, cela finit par lasser surtout quand on a passé du temps pour comprendre le problème posé et y apporter une solution.

Il est plus simple de rester sur le forum que d'échanger par MP sauf accord préalable...

Bonjour,

je partage tout à fait les remarques et le ressenti de 78Chris.

voici une adaptation de la fonction personnalisée. Calcul du prix du type de pièce en fonction des données d'un tableau de ventes.

à copier dans un nouveau module VBA du classeur cible.

Function ilfaudrait(piece As String, tableau As Range)
    ' tableau (6 lignes, 5 colonnes) : 5 colonnes,base, type,vendu,ecart,prix/m²
    '
    Dim tprix(1 To 6) As Single, t, i&, j&, k&, sommeecarts As Single, prix As Single, oti As Single, temp
    t = tableau
    If UBound(t, 1) = 6 And UBound(t, 2) = 5 Then
        'tri du tableau en ordre croissant sur le prix
        For i = 1 To 5
            For j = i + 1 To 6
                If t(i, 5) > t(j, 5) Then
                    For k = 1 To 5
                        temp = t(i, k): t(i, k) = t(j, k): t(j, k) = temp
                    Next k
                End If
            Next j
        Next i
        ' calcul du prix par type de pièce
        sommeecarts = Application.Sum(tableau.Range("D1:D6"))
        i = 1
        Do While i <= 6
            oti = t(i, 4)
            If sommeecarts < 0 Then
                If oti < 0 Then
                    If sommeecarts - oti < 0 Then
                        sommeecarts = sommeecarts - t(i, 4)
                        t(i, 4) = 0
                        prix = oti * t(i, 5) / 2
                    Else
                        t(i, 4) = oti - sommeecarts
                        sommeecarts = 0
                        prix = (oti - t(i, 4)) * t(i, 5) / 2 + t(i, 4) * t(i, 5)
                    End If
                Else
                    prix = oti * t(i, 5)
                End If
            Else
                prix = oti * t(i, 5)
            End If
            tprix(i) = prix
            i = i + 1
        Loop
        For i = 1 To 6
            If t(i, 2) = piece Then ilfaudrait = tprix(i): Exit Function 'renvoie le prix calculé pour la pièce demandée
        Next i
        ilfaudrait = "erreur : type piece " & piece & " non trouvée"
    Else
        ilfaudrait = "erreur : tableau doit avoir 6 lignes et 5 colonnes (base, type piece, vendu,ecart et prix/m²)"
    End If
End Function

la fonction s'utilise ainsi

=ilfaudrait(typepiece,tableau)

où typepiece correspond à l'un des types suivants : RDC ETAGE GARAGE SOUS SOL ABRI et AUVENT et où le tableau reprend sur 6 lignes (1 ligne par type) les infos base, type piece, vendu,ecart et prix/m²

exemple d'utilisation dans le fichier joint.

RE

je partage tout à fait les remarques et le ressenti de 78Chris.

voici une adaptation de la fonction personnalisée...

Merci

Belle fonction et c'est vraiment sincère

J'avais amélioré le PowerQuery (plus besoin des totaux) mais le grand avantage de la fonction est de rester dans le tableau initial.

Le demandeur aurait tout intérêt à créer un xltm pour créer ses tarifs avec la fonction toujours dispo.

bonjour

merci pour ces réponses messieurs

avec mes plus sincères excuses de vous avoir blessé 78Chris... vraiment !

je ne sais pas comment vous faire comprendre que je suis en totale admiration devant ce que vous faites pour moi et pour la communauté

je suis tellement nulle dans ce domaine

je vais faire des essais sur la solution de h2so4 cet am

mes respects pour cette aide précieuse dont je ne manquerais pas de vous donner des nouvelles pour le suivi

bonne journée et courage pour le confinement

valérie

RE

avec mes plus sincères excuses de vous avoir blessé 78Chris... vraiment

A priori c'est un malentendu donc on oublie.

Bons test

bonjour

J’espère que vous allez bien tous les 2...

ça y est j'ai fait mes essais et çà fonctionne nickel

merci infiniment

bonne fin de journée

Rechercher des sujets similaires à "tableau surfaces"