VBA pour spliter budget annuel en budget hebdomaire en fonction de critere

Bonjour Chers tous ,

Objectif: CREER UNE BASE DE DONNEE DE BUDGET HEBDO A PARTIR DUNE BASE DE DONNEE DE BUDGET ANNUEL

Je viens par cette publication pour solliciter votre aide. en effet chaque début d'année mes boss envoient un budget annuel(pour deux sociétés) des achats par produit et par fournisseurs que je dois splitter par mois et par semaine . le problème est que ce travail devient vraiment une corvée vu le nombre IMPORTANT de produit (20) et de fournisseurs que nous avons (environ 300). Dans la pratique le travail consiste :

* a splitter les budget annuel en budget mensuel toujours avec les mêmes éléments fournisseurs et produit

*puis a splitter les budgets mensuels obtenu en budget hebdo pour chaque produit et fournisseurs ( exemple fichier ci joint)

Pour mieux comprendre vous trouverez ci-joint un fichier excel avec tous les éléments et des exemples.

Quelqu'un aurait une technique ou une idée( CODE VBA OU AUTRE) pour automatiser le maximum de taches .

Merci d'avance pour votre aide.

bonsoir,

une proposition

Sub aargh()
    Set wsb = Sheets("exemple base a creer")
    dl = wsb.Cells(Rows.Count, 1).End(xlUp).Row
    wsb.Cells(2, 1).Resize(dl, 6).Delete
    Set wsi = Sheets("fichier initial")
    ligne = 1
    With wsi
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        societe = .Cells(1, 1)
        societe = Mid(societe, InStr(societe, "global") + 7)
        Set basetab1 = .Range("J9")
        For mois = 1 To 12
            For produit = 1 To 6
                nsemainemois = basetab1.Cells(mois + 2, 8)
                For semaine = 1 To nsemainemois
                    For fournisseur = 3 To dl
                        ligne = ligne + 1
                        wsb.Cells(ligne, 1) = .Cells(fournisseur, 1)
                        wsb.Cells(ligne, 2) = societe
                        wsb.Cells(ligne, 3) = mois
                        wsb.Cells(ligne, 4) = semaine
                        wsb.Cells(ligne, 5) = basetab1.Cells(2, produit + 1)
                        wsb.Cells(ligne, 6) = .Cells(fournisseur, produit + 1) * basetab1(mois + 2, produit + 1) / nsemainemois
                    Next fournisseur
                Next semaine
            Next produit
        Next mois
    End With

End Sub

Bonjour H2SO4,

merci pour ta réponse rapide . Ce code marche bien ;Par ailleurs je suis debutant en VBA peux tu donc expliquer ton code pour me permettre de comprendre et l'adapter a mon fichier d'origine qui est différent de celui joint a mon sujet qui est simplifié.

Merci d'avance pour ton aide.

Bonsoir,

avec quelques commentaires

Sub aargh()
    Set wsb = Sheets("exemple base a creer") ' wsb = feuille dans laquelle mettre le budget réparti par mois, produit,semaine et produit
    dl = wsb.Cells(Rows.Count, 1).End(xlUp).Row ' nombre de lignes de wsb
    wsb.Cells(2, 1).Resize(dl, 6).Delete 'on efface le contenu précédent
    Set wsi = Sheets("fichier initial") 'wsi feuille avec le budget et les pourcentages de répartition par mois et par produit
    ligne = 1 'n° de ligne cours sur wsb
    With wsi
        dl = .Cells(Rows.Count, 1).End(xlUp).Row ' nombre de lignes sur wsi = nombre de fournisseurs
        societe = .Cells(1, 1) ' nom de la société est en cellule A1
        societe = Mid(societe, InStr(societe, "global") + 7) ' après le mot global
        Set basetab = .Range("J9") ' basetab base du tableau avec les pourcentages de répartition
        For mois = 1 To 12 'pour chaque mois
            For produit = 1 To 6 'pour chaque produit
                nsemainemois = basetab.Cells(mois + 2, 8) ' nombre de semaine dans le mois en cours
                For semaine = 1 To nsemainemois ' pour chaque semaine dans le mois
                    For fournisseur = 3 To dl ' pour chaque fournisseur
                        ligne = ligne + 1 'on ajoute une ligne sur wsb
                        wsb.Cells(ligne, 1) = .Cells(fournisseur, 1) 'nom du fournisseur
                        wsb.Cells(ligne, 2) = societe
                        wsb.Cells(ligne, 3) = mois
                        wsb.Cells(ligne, 4) = semaine
                        wsb.Cells(ligne, 5) = basetab.Cells(2, produit + 1) 'nom du produit
                        wsb.Cells(ligne, 6) = .Cells(fournisseur, produit + 1) * basetab(mois + 2, produit + 1) / nsemainemois 'budget de la semaine
                    Next fournisseur
                Next semaine
            Next produit
        Next mois
    End With
End Sub

Bonjour,

Une autre proposition à étudier.

Réalisé avec Power Query (complément gratuit Microsoft à télécharger et installer).

Pas de VBA !...

A te relire.

Cdlt.

Joyeux Noel a tous.

Bonjour jean Eric,

Merci pour ta contribution . Je veux aussi comprendre ta methode . J'ai telechargé , installé POWER QUERY et regardé quelques Tuto mais malheureusement je ne sais toujours pas comment tu as procedé pour resoudre mon probleme . Peux tu m'aider a comprendre ?

Best regards

Bonjour,

Je peux te proposer une chose.

Te montrer et répondre à certaines de tes questions avec une session TeamViewer.

Je pourrai tenter d'expliquer par écrit et quelques images, mais c'est laborieux !...

C'est relativement simple, ne demande pas de réelles connaissances, mais tout de même...

A te relire.

Cdlt.

@Jean-Eric

Bonne et Heureuse année a toi et Toutes mes excuses d'avoir mis beaucoup de temps pour répondre a ta proposition . J’étais hors réseau internet. J'accepte ta proposition mais je ne sais pas comment s'organise les sessions team viewer . si ce n'est pas trop te demander. Peux tu m'aider a le faire ?

Rgds

Bonjour,

Pour commencer tu dois installer TeamViewer 14 (version gratuite).

Je t'envoie un MP avec mes coordonnées téléphoniques.

On se joint par téléphone pour définir un jour, une heure pour te montrer la chose.

Qu'en penses-tu ?

Cdlt.

Bonjour Jean Eric .

OK cela me va

Merci

Rechercher des sujets similaires à "vba spliter budget annuel hebdomaire fonction critere"