Problème VBA : combinaisons de 3 paramètres

Bonjour à tous,

Pour faire suite à mon premier message (https://forum.excel-pratique.com/excel/impossible-de-valider-la-creation-d-un-tcd-t67065.html) j'aimerais partir sur un autre axe de recherche et retravailler avec du VBA l'extract qui se trouve dans la feuille "Extract" du fichier joint :

Avec la méthode .RemoveDuplicates pour enlever les doublons appliquée dans la feuille "DATA", je peux obtenir la liste de tous les types de projets, tous les types de consos et tous les types de chantier : dans mon exemple 4 projets, 4 types de consos et 6 chantiers (ces 3 paramètres sont variables d'un extract à un autre).

J'aimerais maintenant savoir s'il existe une méthode pour obtenir le type de tableau qui se trouve dans l'onglet "Objectif" : c'est à dire associer à chaque projet chaque type de conso et chaque chantier possible, dans le but d'obtenir toutes les combinaisons possibles.

C'est-à-dire ici 4 (projets) * 4 (types de consos) * 6 (chantiers) = 96 possibilités.

Cela dans le but de calculer la somme par mois pour chaque combinaison (même si celle-ci est nulle).

J'espère avoir été assez clair et compréhensible dans la formulation de mon problème.

Si quelqu'un pouvait me donner une piste pour arriver aux 96 possibilités de mon exmple...

Merci d'avance

Re , je me permets de remonter le sujet.. Si certains d'entre vous ont des pistes de solutions ce serait super...

Bonsoir,

Une récap par combinaison, si j'ai bien compris. Une formule classique peut faire l'affaire dans ce cas.

[b]=SOMMEPROD((Extract!$B$5:$B$81=$A3)*(Extract!$C$5:$C$81=DROITE($B3;7))*(Extract!$D$5:$D$81=$C3)*Extract!E$5:E$81)

[/b]

Cordialement

Ferrand

Super, cela me convient parfaitement pour le calcul des charges par mois. C'est bête mais je n'avais pas du tout songé à SOMMEPROD (que je n'ai jamais utilisé auparavant.. )

Mais je me demandais surtout comment calculer ou plutôt trouver et afficher automatiquement toutes les combinaisons possibles de projet, types consos et chantier (c'est-à-dire les colonnes A, B, C dans l'onglet "Objectif")

P1 Type Conso 1 Chantier 1

P1 Type Conso 1 Chantier 2

P2 Type Conso 1 Chantier 1

P4 Type Conso 4 Chantier 6

Est-ce que cela est possible par macro ?

Merci..

Bonjour à tous

Version macro

Moi non plus, je ne suis pas sûr d’avoir bien compris : la macro

• part du tableau de la feuille ‘’Extract’’,

• remplit les données de la feuille ‘’DATA’’, où elle les stockent pour s’en reservir plus tard,

• dresse le tableau de la feuille ‘’Objectif’’, colonnes A, B, C

• puis y reporte les données

Cela te convient-il ?

Merci à MFERRAND qui m’a permis de vérifier mon résultat.

Bye !

Après une première analyse et quelques tests, il semblerait que ton programme réponde parfaitement à ce que j'avais (pas très bien, désolé) exprimé...

Par contre ouch la macro, loin de mon niveau tout ça je vais l'analyser et essayer de l'adapter.

Merci beaucoup à vous deux

J'ai vraiment du mal à comprendre ton code.. Pourrais-tu expliquer les lignes dans des commentaires (bien que tu l'ais déjà fait plus ou moins).. En particulier "chargerDico" et Tri(a, gauc, droi)...

Ce serait super

Car appliqué à mes données, il ne fonctionne pas et j'aimerais comprendre pourquoi : il liste bien toutes les combinaisons des 3 paramètres possibles, mais toutes les valeurs sont nulles à part celles de la dernière ligne..

Si les lignes étaient explicitées avec des commentaires, ce serait donc top.

julking92 a écrit :

J'ai vraiment du mal à comprendre ton code.. Pourrais-tu expliquer les lignes dans des commentaires (bien que tu l'ais déjà fait plus ou moins).. En particulier "chargerDico" et Tri(a, gauc, droi)...

La macro ''chargerDico'' et son sous-programme ''Tri...'' est un programme type qui permet à partir d'une liste d'en extraire une autre liste sans doublon et classée par ordre alphabétique.

Il suffit donc de l'adapter pour bien définir l'adresse de la liste de départ et l'adresse où on veut avoir le résultat.

Le reste ne change pas : il faut malgré tout vérifier que dans le reste de ton code il n'y a pas des variables propres à ces deux programmmes.

On trouve beaucoup ce type de macro pour remplir des Combox ou des ListBox d'UserForm.

mais toutes les valeurs sont nulles à part celles de la dernière ligne..

Pour t'expliquer ça, il faudrait déjà que cela marche avec tes données ! Si tu y tiens, joins ton fichier avec ces données !

Mais, en regardant la formule qu'a proposée MFERRAND, on peut faire mieux et la macro va beaucoup plus vite au résultat.

Il suffit de demander à la macro de la copier sur le tableau puis de lui faire faire un copier - collage spécial valeur sur place : les formules disparaissent et les valeurs restent.

Ci-joint une nouvelle version, en espérant que MFERRAND ne m'en voudra pas....

Bye !

Bonsoir le forum,

Je me suis appuyé sur les doublons figurant en Feuille "Extract"

Je n'ai pas ressorti toutes les combinaisons contrairement à gmb.

J'ai trié dans le tableur.

Restitution en Feuil1 :

Option Explicit

Sub test()
Dim a, i As Long, j As Long, b(), n As Long, x As Long, txt As String
    Application.ScreenUpdating = False
    a = Sheets("Extract").Range("B4").CurrentRegion.Value
    ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))
    For i = 1 To UBound(a, 2)
        b(1, i) = a(1, i)
    Next
    n = 1
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            txt = Join$(Array(a(i, 1), a(i, 2), a(i, 3)), Chr(2))
            If Not .exists(txt) Then
                n = n + 1
                For j = 1 To 3
                    b(n, j) = a(i, j)
                Next
                .Add txt, n
            End If
            x = .Item(txt)
            For j = 4 To UBound(a, 2)
                If a(i, j) <> "" Then
                    b(x, j) = b(x, j) + a(i, j)
                End If
            Next
        Next
    End With
    'Restitution en Feuil1
    With Sheets("Feuil1").Range("a2")
        .CurrentRegion.Clear
        .Resize(n, UBound(b, 2)).Value = b
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            .Rows.RowHeight = 19
            With .Rows(1)
                .HorizontalAlignment = xlCenter
                .Interior.ColorIndex = 42
                .BorderAround Weight:=xlThin
            End With
            .Offset(, 3).Resize(1, .Columns.Count - 3).NumberFormat = "mmm-yy"
            .Offset(1, 3).Resize(.Rows.Count - 1, .Columns.Count - 3).NumberFormat = "#,##0.00"
            .Columns.AutoFit
            .Sort Key1:=.Cells(1), Order1:=1, Key2:=.Cells(2), Order1:=1, Key3:=.Cells(3), Order1:=1, Header:=1
        End With
        .Parent.Activate
    End With
    Application.ScreenUpdating = True
End Sub
10extract.zip (26.83 Ko)

klin89

Bonjour tout le monde,

je sens que dans cette conversation je suis susceptible d'obtenir de l'aide et j'ai besoin qu'on me sauve la mise!

Actuellement en stage dans une entreprise, je dois construire un fichier permettant de constituer notre planning d'approvisionnement en matières premières. Je m'explique.; nous avons plusieurs références de bouteilles et de caisses à approvisionner chaque jour selon les productions prévues dans notre usine, ce qui est géré par Excel.

Je cherche à simplifier la vie des opérateurs qui perdent énormément de temps à réfléchir à la constitution de camion complets, qu'ils doivent ensuite positionner sur le planning.

Dans le fichier joint en exemple, vous verrez que nous avons plusieurs "blocs" de référence, certaines avec lesquelles on peut loger 52 palettes 100*120 par camion, d'autres 46 et d'autres 26. Ceci est dû non pas à la dimension des palettes (toutes 100*120) mais la hauteur de celles-ci (ce qui implique qu'elles puissent être gerbées ou non) et à la limite de poids supportée dans le camion (23.5T).

J'aimerais pouvoir proposer grâce à excel un fichier qui permet de dire que le 1er tour sera constituer de tant de palettes d'une réf X et Y, d'un 2ème tour de tant de palettes Z etc....

Ce calcul devra bien sûr tenir compte du poids limite dans le camion, du nombre limite de palettes ET SURTOUT d'une condition primordiale, l'ORDRE DE PRODUCTION.

En effet, notre entrepôt étant plus que limité en place, nous approvisionnons en juste à temps (environ 5H de prod!)

J'aimerais donc que ce fichier aille d'abord rechercher dans un autre fichier chercher l'ordonnancement (suite de chiffres) et qu'il fasse ensuite une proposition (je dis bien proposition car il peut toujours il y avoir des changements) d'ordre des tournées.

Difficile d'expliquer ce que l'on recherhce par écrit, mais j'espère que mes explications sont à peu près claires!

Toute aide sera la bienvenue! Dans l'attente d'échanger avec vous la dessus :

Merci à tous

Rechercher des sujets similaires à "probleme vba combinaisons parametres"