Fonction SOMME suivant attribut d'une autre colonne

Bonjour à vous tous les experts !

Je viens vous demander de l'aide car je bloque pas mal (déja pour trouver un sujet compréhensible).

Je travaille en tant que primeur et à la suite d'un changement de caisse enregistreuse je me retrouve à devoir changer toutes mes habitudes y compris mes rapports de ventes que je faisais à la main auparavant.

Je m'explique :

  • J'ai environ 150 articles pour lesquels je souhaite garder les historiques de quantités de ventes journalières.
  • J'ai un fichier "HISTORIQUE" rempli avec une ligne par article, une colonne par jour.
  • Chaque article a un code correspondant (tomate = 1 ; abricot = 156... )

Aujourd'hui je ne peux pas éditer le total comme je veux mais je peux récupérer sur clé usb un fichier .csv qui ressemble au fichier joint.

Pour mieux comprendre, chaque article pesé est enregistré au fur et a mesure de la journée.

Je voudrais donc faire la somme totale de chaque article vendus dans la même journée et si possible les exporter directement dans mon fichier "HISTORIQUE"

Je l'ai fais à la main en triant les données par ordre croissant puis en utilisant la fonction SOMME et enfin en faisant copier coller de chaque article mais avec 1500-2000 ligne par jour a traiter je ne vais pas tenir longtemps !

Je ne demande bien sûr par de macro toute cuite ou de formule magique mais j'aime comprendre ce que je fais donc des pistes sont les bienvenues !

Bonjour,

une première approche consiste à réaliser un tableau croisé dynamique et l'exporter en tant que tel

Bonjour,

Le tableau croisé dynamique est probablement la solution la plus simple est efficace pour réaliser ce que tu souhaites.

Mais tu peux également utiliser des fonctions =SOMME.SI(colonne_avec_tes_codes_article;cellule_avec_1_code_article;colonne_avec_tes_quantités) ou =SOMME.SI.ENS() qui te permet d'ajouter des conditions supplémentaires (Somme pour 1 article pour 1 date donnée par exemple). Dans le même registre, les fonctions =MOYENNE.SI.ENS() et =NB.SI.ENS()...

Bonjour le forum,

Proposition :

Automatiser les cumuls des colonnes F et G ?

cumuls

Bonjour le forum,

Proposition :

Automatiser les cumuls des colonnes F et G ?

Bonjour, pour l'instant je n'ai pas trop besoin d'automatiser les colonnes F et G, elles sont crées automatiquement et sont le prix de chaque vente (F) et le Chiffre d'affaire cumulé par client (G).

Pour les chiffre j'aurais besoin de transposer le CA cumulé a 13h00 ainsi que le CA final de la journée mais je garde ça pour plus tard, c'est moins important...

Bonjour,

une première approche consiste à réaliser un tableau croisé dynamique et l'exporter en tant que tel

Voici mon tableau vers lequel je voudrais exporter les données.

Ce serait possible d'automatiser le transfert avec les tableaux croisés dynamiques ?

Oui c'est possible ... mais il faut que l'on réfléchisse à la meilleure façon de le faire ... laisse moi un, jour ou deux.

A moins qu'un autre ne prenne le sujet jusqu'au bout... Pedro ? mbbp ?

Oui c'est possible ... mais il faut que l'on réfléchisse à la meilleure façon de le faire ... laisse moi un, jour ou deux.

A moins qu'un autre ne prenne le sujet jusqu'au bout... Pedro ? mbbp ?

Tu es plus avancé que moi sur le sujet, alors je te laisse poursuivre !

Salut à tous

Elle vaut ce qu'elle vaut, mais voici une possibilité, à l'aide d'une macro.

Je me suis dit que pour historiser les commandes, des formules ne conviendraient pas. D'autre part, je suis parti du principe que dans les 1500 à 2000 lignes des ventes quotidiennes, les 150 produits recherchés ne seraient pas forcément présents.

L'idée est la suivante: dans la seconde feuille du classeur, on copie-colle les 3 colonnes du fichier des ventes (n°, désignation, quantité). On clique ensuite sur le bouton. La macro répertorie les n° présents en colonne A de la Feuil1, puis, dans la liste en feuille ("CollerIci"), si le même n° est trouvé en colonne A, les quantités en C sont additionnées.

En dernière étape, la date est insérée dans une nouvelle colonne, en Feuil1, de même que les quantités cumulées pour les x produits.

On peut encore améliorer, mais voyons d'abord si le résultat est le bon ?

Si la proposition d'U.milité te convient c'est parfait.

Pour ma part, je pensais

  • tout mettre dans une liste (y compris l'historique actuel) date / article / quantité
  • appeler la lecture du csv et ajouter à la liste existante
  • et faire un TCD sur le tout.

Si j'ai un peu de temps je m'y mettrai.

Voici ma contribution que j'ai voulu très simple d'utilisation ...

Indique une nouvelle date dans le carré jaune, la macro te demandera le fichier csv et le chargera

Sub importer()

    If Range("qte") <> 0 Then
        MsgBox Range("qte") & " valeurs en date du """ & Range("datum") & """ ont déjà été introduites !"
        Exit Sub
    End If

    Fichier = Application.GetOpenFilename("Fichiers csv, *.csv")
    If Fichier = False Then Exit Sub

    Dim ListObj As ListObject
    Dim i As Integer
    Set ListObj = Worksheets("data").ListObjects("donnees")

    N = FreeFile
    Open Fichier For Input As #N

    i = 0
    Do While Not EOF(1)
        Line Input #N, Contenu
        i = i + 1
        If i > 2 Then
            Table = Split(Contenu, ";")
            If Table(1) <> "" Then

                ListObj.ListRows.Add
                With ListObj
                    .Range(ListObj.ListRows.Count + 1, 1).Value = Range("datum")
                    .Range(ListObj.ListRows.Count + 1, 2).Value = Table(1)
                    .Range(ListObj.ListRows.Count + 1, 3).Value = Table(2)
                    .Range(ListObj.ListRows.Count + 1, 4).Value = Val(Replace(Table(3), ",", "."))
                End With

            End If
        End If
    Loop

    Close #N

    Sheets("Synthèse").Select
    ActiveSheet.PivotTables("TCD").PivotCache.Refresh

End Sub

Salut à tous

Elle vaut ce qu'elle vaut, mais voici une possibilité, à l'aide d'une macro.

Je me suis dit que pour historiser les commandes, des formules ne conviendraient pas. D'autre part, je suis parti du principe que dans les 1500 à 2000 lignes des ventes quotidiennes, les 150 produits recherchés ne seraient pas forcément présents.

L'idée est la suivante: dans la seconde feuille du classeur, on copie-colle les 3 colonnes du fichier des ventes (n°, désignation, quantité). On clique ensuite sur le bouton. La macro répertorie les n° présents en colonne A de la Feuil1, puis, dans la liste en feuille ("CollerIci"), si le même n° est trouvé en colonne A, les quantités en C sont additionnées.

En dernière étape, la date est insérée dans une nouvelle colonne, en Feuil1, de même que les quantités cumulées pour les x produits.

On peut encore améliorer, mais voyons d'abord si le résultat est le bon ?

Déja merci à vous tous de vous intéresser a mes questions !

Malheureusement en lançant cette macro, ça m'indique "erreur d'execution 429 - un composant ActiveX ne peut pas créer d'objet"

Est ce parce que je suis sous mac ? Sous excel 2016 ?

Bonsoir,

Est ce parce que je suis sous mac ?

Ah oui, désolé, je n'ai pas fait attention au fait que tu étais sous Mac On ne peut pas utiliser d'objet "dictionary", comme je l'ai fait, dans ce cas.

Heureusement, Steelson a "trouvé un peu de temps" pour mettre en œuvre sa solution

Voici ma contribution que j'ai voulu très simple d'utilisation ...

Indique une nouvelle date dans le carré jaune, la macro te demandera le fichier csv et le chargera

Sub importer()

    If Range("qte") <> 0 Then
        MsgBox Range("qte") & " valeurs en date du """ & Range("datum") & """ ont déjà été introduites !"
        Exit Sub
    End If

    Fichier = Application.GetOpenFilename("Fichiers csv, *.csv")
    If Fichier = False Then Exit Sub

    Dim ListObj As ListObject
    Dim i As Integer
    Set ListObj = Worksheets("data").ListObjects("donnees")

    N = FreeFile
    Open Fichier For Input As #N

    i = 0
    Do While Not EOF(1)
        Line Input #N, Contenu
        i = i + 1
        If i > 2 Then
            Table = Split(Contenu, ";")
            If Table(1) <> "" Then

                ListObj.ListRows.Add
                With ListObj
                    .Range(ListObj.ListRows.Count + 1, 1).Value = Range("datum")
                    .Range(ListObj.ListRows.Count + 1, 2).Value = Table(1)
                    .Range(ListObj.ListRows.Count + 1, 3).Value = Table(2)
                    .Range(ListObj.ListRows.Count + 1, 4).Value = Val(Replace(Table(3), ",", "."))
                End With

            End If
        End If
    Loop

    Close #N

    Sheets("Synthèse").Select
    ActiveSheet.PivotTables("TCD").PivotCache.Refresh

End Sub

Oups, je n'avais pas vu votre message qui était en page 2.

J'ai également un message d'erreur puisque je suis sous mac j'imagine mais je vais essayer sous windows.

@Steelson

J'avais un message d'erreur sous mac donc j'ai changé avec ça :

Sub importer()

    If Range("qte") <> 0 Then
        MsgBox Range("qte") & " valeurs en date du """ & Range("datum") & """ ont déjà été introduites !"
        Exit Sub
    End If
Dim QuelFichier
    QuelFichier = Application.GetOpenFilename(, , "Sélectionnez votre source de données")
    If QuelFichier <> False Then
        Debug.Print QuelFichier 'Workbooks.Open QuelFichier
    Else
        MsgBox "Vous n'avez pas sélectionné de fichier"
    End If
    If Fichier = False Then Exit Sub

    Dim ListObj As ListObject
    Dim i As Integer
    Set ListObj = Worksheets("data").ListObjects("donnees")

    N = FreeFile
    Open Fichier For Input As #N

    i = 0
    Do While Not EOF(1)
        Line Input #N, Contenu
        i = i + 1
        If i > 2 Then
            Table = Split(Contenu, ";")
            If Table(1) <> "" Then

                ListObj.ListRows.Add
                With ListObj
                    .Range(ListObj.ListRows.Count + 1, 1).Value = Range("datum")
                    .Range(ListObj.ListRows.Count + 1, 2).Value = Table(1)
                    .Range(ListObj.ListRows.Count + 1, 3).Value = Table(2)
                    .Range(ListObj.ListRows.Count + 1, 4).Value = Val(Replace(Table(3), ",", "."))
                End With

            End If
        End If
    Loop

    Close #N

    Sheets("Synthèse").Select
    ActiveSheet.PivotTables("TCD").PivotCache.Refresh

End Sub

Maintenant je peux sélectionner un fichier mais rien ne se passe ensuite.

J'ai oublié quelque chose ?

ceci n'est plus utile dans ton cas

If Fichier = False Then Exit Sub

ajoute exit sub après MsgBox "Vous n'avez pas sélectionné de fichier"


Open Fichier For Input As #N

devient sans doute

Open QuelFichier For Input As #N

Je reviens apres avoir enfin trouve un pc Windows (sans accent au passage desole)...

J'ai alors une erreur :

Erreur d'execution 9

L'indice n'appartient pas a la selection.

Sheets("synthèse").Select

Bonjour,

cela veut dire qu'il n'existe pas de feuille synthèse (attention à la casse, j'avais mis Synthèse) contenant le TCD

y a t'il aussi un accent ?

Bonjour,

cela veut dire qu'il n'existe pas de feuille synthèse (attention à la casse, j'avais mis Synthèse) contenant le TCD

y a t'il aussi un accent ?

Super ça fonctionne! J'avais essayé d'enlever la majuscule mais pas l'accent et maintenant c'est ok. Et c'est aussi ok sur mac en modifiant comme vous m'aviez indiqué.

Maintenant j'ai envie de comprendre les lignes de code crées mais je vais bien trouver ça avec notre ami google!

Merci 1000 fois pour cette aide précieuse et très TRES réactive !

Ah oui petit détail en plus :

Les fichiers CSV sont nommés "05071801.csv" "06071801.csv" "07071801.csv" pour les classeurs du 5,6,7 juillet 2018.

Il y aurait un moyen de sélectionner tous les fichiers de l'année et de dire de récupérer la date via le nom du fichier en supprimant les 2 derniers caractères ?

Rechercher des sujets similaires à "fonction somme suivant attribut colonne"