Microsoft 365 Select case ou If

MarcMad

XLDnaute Nouveau
Bonjour,

J'ai de la difficulté a figurer l'écriture d'un code.

Prenons l'exemple simplifier suivant :

Nous avons une feuille de papier blanche de dimension 8.5" x 11"
Nous avons aussi plusieurs bandes papier de couleur jaune de dimensions :
Bande #1 = 8.5" x 2"
Bande #2 = 8.5" x 3"
Bande #3 = 8.5" x 5.5"
Bande #4 = 8.5" x 7"
Bande #5 = 8.5" x 8"
Le but étant de remplir la feuille blanche avec les bandes de couleur jaune dans le sens de l'axe Y (soit le 11")
Je désir obtenir toutes les combinaisons possible avec les différentes bandes.

Ex :

Cas#1 - 4x bandes de 2" + 1x bande de 3"
Cas#2 - 2x bandes de 5.5"
etc...

Ainsi, la variable X (8.5") étant toujours constante, il n'y a pas lieux d'en tenir compte.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @MarcMad,

Un essai assez vite fait (donc à contrôler) en recyclant une vieille procédure de mon cru pour trouver les combinaisons P parmi N.
  • En colonne A, indiquez les différentes tailles possibles.
  • En C2, indiquez l'objectif.
  • Cliquer sur le bouton Hop!
Les résultats sont affichés à partie de la colonne H.

Les codes se trouvent dans le module de la feuille "Feuil".

Nota : la méthode utilisé est foireuse (je le sais) car dès qu'on augmente un tout petit peu le nombre de largeur de bande de la colonne A, on arrive vite à un débordement de capacité. Mais c'était du recyclage.

J'ai quelque part une autre méthode (méthode pour lettrer) qui conviendrait mieux mais je ne la retrouve pas. Je continue à chercher.
 

Pièces jointes

  • MarcMad- bande à néon- v1.xlsm
    21.6 KB · Affichages: 10
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Un membre éminent de XLD à retrouver le fichier que je cherchais. Mille merci à lui. Il mériterait que je lui agrafe la médaille de la reconnaissance sur la poitrine. :)

Le fichier joint montre ce qu'on pourrait faire à partir de ce fichier.

  • Sur la feuille "Data", on indique les largeurs de bande qu'on est susceptible d'employer.
  • On part de 10 largeurs possibles (1; 2; 3; 4; 5; 5,5; 6; 7; 8; 9)
  • Ce qui nous donne en possibilités de choix : 29 bandes de largeurs (1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 3; 3; 3; 4; 4; 5; 5; 5,5; 5,5; 6; 7; 8; 9)
  • on met ces 26 valeurs dans la colonne B à partir de B5
  • On affecte à la valeur cible (cellule B3) la valeur 11

Puis en cliquant sur Hop!, le résultat se retrouve sur la feuille Result.

Il y a beaucoup moins de possibilités que celles affichées. C'est parce que l'exercice de lettrage considérait que deux valeurs sources identiques correspondaient à des factures différentes (ce qui n'est pas le cas dans votre problème).

Dans votre cas, il faudrait (mais pas ce soir), cribler les résultats pour éliminer les doublons de factures de mêmes valeurs.

Cela montre que pour un nombre de bandes plus grand, c'est faisable en un temps pas trop long et sans débordement. Attention quand-même! C'est le genre de problème qui atteint vite les limites du système.

Sur ma bécane, avec les valeurs citées, on trouve 54 508 solutions en 2,45 seconde.

nota: avec ces mêmes largeurs, le fichier du message précédent plante!
 

Pièces jointes

  • mapomme- MarcMad- Lettrage-v4a-demo01.xlsm
    53.9 KB · Affichages: 3
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Tout ceci est basé sur le recyclage de ma méthode pour faire du lettrage de banque.
Une version que j'espère finale. L'utilisateur a le choix de réaliser ou non les trois étapes.
  1. sur la feuille "Initialisation", indiquer les tailles et la cible puis cliquer sur Hop!
  2. sur la feuille "Data", cliquer sur le bouton Hop! pour lancer le calcul de recherche de toutes les solutions.
  3. sur la feuille "Après crible", cliquer sur le bouton Hop! pour lancer le criblage.

edit : la méthode de criblage n'a pas été optimisée. C'est en chantier...
 

Pièces jointes

  • MarcMad- bande à néon- v2.xlsm
    72.1 KB · Affichages: 14
Dernière édition:

MarcMad

XLDnaute Nouveau
Merci pour tes exemples mapomme j'ai étudier les codes présents ici mais je pense que ce n'ai pas tout a fait l'orientation que je désire pour mon code. Je n'utiliser pas les feuilles Excel pour ce code. Je doit stocker les possibilité avec des variables pour les utiliser pas la suite dans un userform. Je doit aussi noter la position de chaque bande et stocker cette variable pour utilisation futur (soit de réaliser les dessins dans un userform avec les différent agencements. J'ai débuter un code (voir plus bas).


'-----------------------------------------Définition-des-Variables-Globales----------------------------------

Comme la hauteur des bandes ne change jamais je les définies dans mes variables globales, dans le module standard en cours.

Bande_2.5 = 2.5
Bande_48 = 48
Bande 50.5 = 50.5
Bande_96 = 96
Bande_97.25 = 97.25
Bande_98.5 = 98.5
HL = 109 'Hauteur Libre

'---------------------------------------------Rang-du-bas-----------------------------------------------

Par la suite, je doit définir la première bande de couleur dans le bas de la feuille blanche (on débute toujours par le bas de la feuille). Ici on ne peu placer que les bandes de 2.5, 48, 96, 97.25, disons que c'est bande sont de couleur orangé et que la bas de la feuille doit être orangé XD. Donc, j'avais l'idée de faire des tableau (Array).

Dim H_Array(1 To 4) As Currency 'Tableau des hauteurs de bande
Dim R_Array(1 To 4) As Currency 'Compteur de bande utilisé
Dim HR(1 To 4) As Currency 'Hauteur restante
Dim i As Integer

H_Array(1) = Bande_2.5
H_Array(2) = Bande_48
H_Array(3) = Bande_96
H_Array(4) = Bande_97.25

For i = 1 To 4
HR(i) = HL - H_Array(i)
Next i

For i = 1 To 4
If HR(i) >= 0 Then
R_Array(i) = 1
End If
Next i

'---------------------------------------------Rangs-de-milieux-----------------------------------------------

Ici on peut utiliser toutes les bande peut importe leur couleurs

For i = 1 To 6

'---------------------------------------------Rang-du-haut-----------------------------------------------

Ici on peut utiliser toutes les bande peut importe leur couleurs

For i = 1 To 6

Next i
 

Statistiques des forums

Discussions
312 215
Messages
2 086 331
Membres
103 188
dernier inscrit
evebar