Balayer des lignes et ajouter des coûts sous conditions

Bonjour,

Je souhaite balayer des lignes et effectuer des opérations sous plusieurs conditions. Au vue du fichier joint j'aimerai pouvoir :

faire la somme des couts du mois de janvier, février mars etc...pour le type "tre" et "ORT". Sachant que si le prix est égal à 0 alors il faut aller chercher le cout dans commande.

Pour ma petite connaissance en vb il y a trop de conditions je m'y perds....sachant aussi que quand je rajouterai au fur a mesure de nouvelle ligne dans le tableau il ne faudra pas que les anciennes soit prises en compte dans le nouveau calcul de coût...

Si quelqu'un pouvait m'aider sur ce sujet.

Merci par avance.

11essai-indic.xlsx (37.89 Ko)

Bonjour

arnd92 a écrit :

Pour ma petite connaissance en vb il y a trop de conditions je m'y perds....sachant aussi que quand je rajouterai au fur a mesure de nouvelle ligne dans le tableau il ne faudra pas que les anciennes soit prises en compte dans le nouveau calcul de coût...

Peux-tu expliquer ce que cela signifie concrètement ? un exemple ?

un exemple par rapport au fichier joint ou par rapport à a dernière ligne?

POur la dernière ligne je veux signifier que si je rajoute une ligne à mon fichier, il ne faudra pas que mon programme prenne en compte les lignes qui ont été déjà balayer lors d'un calcul précédent, puisque déjà inclu dans le cout, mais uniquement cette ligne.

merci pour ton retour

re-bonjour,

pas sûr d'avoir compris comment tu allais utiliser concrètement,

mais voici une proposition

faire alt-f11 pour lancer la macro.

11essai-indic.xlsm (14.74 Ko)

mmm je crois que c'est nickel! enfaite disons que je vais avoir un point 0 ou je vais devoir balayer un gros fichier, une fois ce travail fait je rentrerai mes commandes au fur et a mesure chaque jour dans la base. Voila pourquoi il ne faut pas qu'elle soit prise en compte plusieurs fois dans le cout.

En tous cas merci c'est impeccable!!

Une dernière question tout de même, d'après ce que j'ai compris dans le code vb, pour la lecture du type c'est soit "ORT" soit l'autre. Mais cela ne vaut que si j'ai deux types, mais dans mon fichier réel j'ai 14 types,comment faire pour incrémenter la bonne colonne "calcul du cout " dans ce cas??.

Merci pour ton retour.

Bonjour,

macro adaptée, à tester

24essai-indic-1.xlsm (16.27 Ko)

Merci, j'ai testé mais le type "TST" que tu a du rajouter n'apparait pas. D'ailleurs si je comprends bien le code, le type se crée en fonction des types trouvés lors du balayage des lignes? est ce bien cela?

En tous cas merci! j'ai jamais vu un code aussi concis pour tant de chose à faire, moi j'étais partis pour un code à rallonge!

Tu gères.

arnd92 a écrit :

Merci, j'ai testé mais le type "TST" que tu a du rajouter n'apparait pas. D'ailleurs si je comprends bien le code, le type se crée en fonction des types trouvés lors du balayage des lignes? est ce bien cela?

En tous cas merci! j'ai jamais vu un code aussi concis pour tant de chose à faire, moi j'étais partis pour un code à rallonge!

Tu gères.

effectivement les types s'ajoutent automatiquement en fonction des types trouvés.

Sur le fichier que je t'ai fourni, TST apparait bien (en tout cas chez moi).

effectivement cela fonctionne! j'ai du merdé toute à l'heure. Vraiment merci, ton programme est tellement étrange pour moi qui suit habitué au fonction bien basique (if, for, etc...) que j'ai du mal à comprendre comment je vais pouvoir l'adapter si besoin c'est un langage vraiment nouveau pour moi! Une dernière petite question et promis j'arrête! enfin j'espère, en cas de doublon ou triplons etc...(étrangement mon fichier de base génère des doublons voir plus) comment ne prendre en compte que la première ligne trouvé?

Juste pour info perso, tu es développeur? c'est ton métier ou juste un passe temps?

merci bien

bonsoir,

qu'est-ce qui caractérise un doublon ? 2 lignes avec 5 colonnes identiques ?

pour l'autre question, c'est un hobby.

rebonsoir,

partant de l'hypothèse qu'un doublon est caractérisé par des valeurs identiques sur les 5 colonnes, voir en annexe une proposition qui gère les doublons

22essai-indic.xlsm (16.56 Ko)

Bonsoir,

Et merci pour ta réponse tout d'abord. Lorsque je lance la macro, il me met un composant activeX ne peut pas créer d'objet, Erreur 429.

Dans la commande de déboguage c'est "Set doublon = CreateObject("Scripting.Dictionary") ' on crée un dictionnaire pour détecter les doublons" qui est surligné en jaune. Et pour le doublon ou triplon etc...oui c'est une ligne identique.

Concernant le 0 qui est la valeur qui nous dit d'aller chercher dans la case commande peut-on la remplacer en disant "si inférieur ou = à 20" on regarde dans la commande.

Désolé pour toutes ces questions, j'aurai voulu avoir un minimum d'autonomie sur mon code, mais vu que ton code est hyper optimiser et développé dans un language bien poussé que je ne maitrise absolument pas, je suis paumé et sans valeur ajouté!!

Merci

bonsoir,

pour l'erreur 429, il manque probablement une référence dans VBA

alt F11 pour ouvrir l'editeur VBA

menu tools(outils), ->references

cocher microsoft scripting runtime

adaptation pour prendre en compte le prix selon tes critères ci-dessous.

Sub calculprix()
    dl = Cells(Rows.Count, 2).End(xlUp).Row    ' dernière ligne détail
    dlr = Cells(Rows.Count, "E").End(xlUp).Row    'dernière ligne tableau synthèse
    lhdr = dlr - 12    ' ligne entête
    dchdr = Cells(lhdr, Columns.Count).End(xlToLeft).Column    ' dernière colonne sur ligne entête
    If dchdr = 1 Then dchdr = 5
    Set doublon = CreateObject("Scripting.Dictionary")    ' on crée un dictionnaire pour détecter les doublons
    For i = 2 To dl    ' on parcourt toutes les lignes détails
        If Cells(i, "f") = "" Then    ' si pas encore pris en compte
            clé = ""
            For j = 1 To j
                clé = clé & Cells(i, j)    'on concatène les éléments de la ligne dans clé
            Next j
            If Not doublon.Exists(clé) Then    ' si la clé n'existe pas
                doublon.Add clé, i    'on l'ajoute au dictionnaire
                m = Month(Cells(i, "c"))    ' on détermine le mois
                Set re = Range(Cells(lhdr, "F"), Cells(lhdr, dchdr)).Find(Cells(i, "B"), lookat:=xlWhole)    ' on recherche le type dans la ligne d'entête
                If re Is Nothing Then    'on n'a pas trouvé le type
                    dchdr = dchdr + 1    'on rajoute une colonne dans l'entête
                    Cells(lhdr, dchdr) = Cells(i, "B")    ' on y met le type
                    c = dchdr    ' la colonne correspondant au type
                Else
                    c = re.Column    ' la colonne correspondant au type
                End If

'-------------------------------------------
                prix = Cells(i, "d")
                If prix <= 20 Then prix = Cells(i, "e") 'si prix <=20 on prend le prix de la commande
'-------------------------------------------
                Cells(m + dlr - 12, c) = Cells(m + dlr - 12, c) + prix    ' on totalise en fonction du mois et du type
                Cells(i, "f") = "x"    'on indique que la ligne détail a été prise en compte
            Else
                Cells(i, "f") = "doublon avec " & doublon.Item(clé)    'on indique que la ligne détail a été prise en compte
            End If
        End If
    Next i
End Sub
Rechercher des sujets similaires à "balayer lignes ajouter couts conditions"