[Algo] Définir des paquets [Difficile]

LeGaulois

XLDnaute Nouveau
Bonjour,

Je vais tenter d'être le plus clair possible, si je n'y arrive pas ou que j'ai omis des informations, n'hésitez pas à me poser des questions.

Je cherche à faire un algorithme, que je coderai ensuite sur VBA Excel. Pour l'instant je m'intéresse à l'algorithme...

Alors imaginons que j'ai un tableau...
Dans la première colonne j'ai des "titres", et dans la seconde colonne j'ai des "noms".
Les titres contiennent plusieurs noms.

Dans la troisième colonne, j'ai un nombre pour chaque nom.
Et dans la quatrième colonne, j'ai un nombre pour chaque titre, qui est en faite le total des valeurs de la troisième colonne.

Pour vous aider à imaginer ce tableau je vais essayer de le schématiser...

Code:
TITRE - NOM - Nb1 - Nb2

A     -     -      - 10
      - a   - 8    - 
      - b   - 2    -
B     -     -      - 3 
      - a   -  1   -   
      - b   -  1   -
      - c   -  1   - 
etc

Et je cherche à faire l'algo qui me permettrait de faire dans une cinquième colonne des paquets d'un nombre limite disons dans notre exemple : 12. Donc je souhaite faire des paquets de 12.

Code:
TITRE - NOM - Nb1 - Nb2 - Paquet

A     -     -      - 10  -  
      - a   - 8    -      -  1
      - b   - 2    -      -  1
B     -     -      - 3    - 
      - a   -  1   -      -  1
      - b   -  1   -      -  1
      - c   -  1   -      -  2
etc

Ceci n'est pas ce que je souhaite avoir lol

Tout le problème est là... Je souhaite faire des paquets qui seront pas forcément de la même valeur que celle choisit (12 ici).

C'est à dire que lorsqu'un titre est inférieur à 12, il soit ajouté complètement à un paquet. Il ne peut être séparé comme ce que je vous ai montré précédemment.

On a donc plusieurs cas possible :

-> Le titre à lui seul est supérieur à 12
Dans ce cas, il faudra diviser ce titre en plusieurs paquets.

-> Le nom à lui seul est supérieur à 12
Dans ce cas, il faudra le mettre dans plusieurs paquets.

-> On ajoute plusieurs titres jusqu'à obtenir 12.
Il faut faire attention à ce qu'il ne dépasse 12 et qu'on ne divise pas de noms.

Ça fait 2 jours que je bûche sur ça, et je bois totalement la tasse... J'espère vraiment trouver du soutient ici...

Merci d'avance!
 

Hippolite

XLDnaute Accro
Re : [Algo] Définir des paquets [Difficile]

Bonsoir,
Le problème est trop ouvert.
L'ordre doit-il être conservé ?
Est-ce un rangement classé ? ou optimisé ? Quelles sont les priorités ?
Code:
TITRE 	NOM   Nb1   Nb2   Paquet   Paquet+				
A                    10
         a     8            1       1
         b     2            1       1
B                    13
         a     1            2       1
         b     1            2       2
         c    11            3       2
Le besoin serait peut-être plus facile à comprendre en expliquant à quoi ça servira.
A+
 

Habitude

XLDnaute Accro
Re : [Algo] Définir des paquets [Difficile]

Bonjour

Je vois comme ceci, avec fonctions récursives
Avec rangement non optimisé

Code:
cpt=1
cptTitre=0
GenererTitre
DecouperTitre Titre(cptTitre)

Fonction GenererTitre
....Faire un vecteur avec tous les titres : Titre()
Fin Fonction

Fonction DecouperTitre (titre)
      Si nb2 de titre < 12 Et nb2 de titre < EspaceDisponible(paquet(cpt)) alors
               insererTitre dans paquet(cpt)
               cptTitre= cptTitre +1
               DecouperTitre Titre(cptTitre)
      SinonSi nb2 de titre < 12 alors
              cpt= cpt+1
              insererTitre dans paquet(cpt)
              cptTitre= cptTitre +1
              DecouperTitre Titre(cptTitre)
      Sinon
            GenererNom Titre(cptTitre)
            cptNom= 0
            DecouperNom Nom(cptNom)
      FinSi
Fin Fonction

Fonction GenererNom(titre)
....Faire un vecteur avec les noms associé au titre : Nom()
Fin Fonction

Fonction DecouperNom(nom)
     
      Si nb de nom < 12 Et nb de nom < EspaceDisponible(paquet(cpt)) alors
               insererNom dans paquet(cpt)
               cptNom= cptNom +1
               DecouperNom Nom(cptNom)
      SinonSi nb de nom < 12 alors
              cpt= cpt+1
              insererNom dans paquet(cpt)
              cptNom= cptNom+1
              DecouperNom Nom(cptNom)
      Sinon
           ''Ce gère seulement si un nom peut avoir un nombre plus élevé que 12
      FinSi


Fin Fonction

''' Fonction à faire
    insererNom
    insererTitre
    EspaceDisponible
 

LeGaulois

XLDnaute Nouveau
Re : [Algo] Définir des paquets [Difficile]

Bonjour Hippolite,

Le problème est trop ouvert, d'où la difficulté, et je ne trouve pas de moyen seul ... Je vais essayer de répondre au mieux à vos interrogations.

Pour commencer :
L'ordre doit rester le même.
J'ai fait tout un programme qui permet à partir d'une liste où on a accès à différentes informations et à un formulaire que l'utilisateur remplie de créer ensuite une nouvelle liste composé de Titre, et de documents. Mon programme permet aussi d'avoir le nombre de pages, le poids de ces documents.
Et ainsi on aimerait grâce à ces informations et cette liste généré par le programme créer des répertoires contenant une copie de ces documents mais dans des dossiers différents et chaque dossier contenant un nombre de pages ne dépassant pas un certain nombre (selon ce qui est rentré dans le formulaire).


Bonjour Habitude,

Je vais regarder un peu plus en profondeur votre algo demain, mais je peux déjà poser une question lol
Qu'est ce que vous voulez dire par "Faire un vecteur" ?

Merci pour vos réponses ! A demain!
 

Gorfael

XLDnaute Barbatruc
Re : [Algo] Définir des paquets [Difficile]

Salut LeGaulois et le forum
Petit rappel : ce site manque de devin et de télépathe ! La seule personne pourqui c'est évident c'est toi.
une formule simple : Valeur (laquelle, mystère) divisée par 12 = nombre de paquets (+1, s'il y a des décimales)
Mais tant qu'on ne saura pas de quoi on parle...
A+
 

LeGaulois

XLDnaute Nouveau
Re : [Algo] Définir des paquets [Difficile]

Bonjour Gorfael,

Je le sais... J'ai bien précisé que si je ne suis pas assez clair (car il est assez difficile quand on a le nez depuis 1 mois et demi dans un projet de bien l'expliquer) vous pouviez poser autant de question possible j'y répondrai le mieux possible... Je suis conscient que c'est difficile pour vous, mais ça l'est aussi pour moi de bien expliquer mon problème.

Je ne peux même pas mettre le fichier en ligne puisqu'il pèse bien trop lourd.
Donc j'ai donné un exemple représentant selon moi le mieux possible ce que je souhaite exploiter.
C'est à dire une liste de document avec des titres qui contient plusieurs documents, et on a accès aux nombres de pages de ces documents.
Ensuite depuis cette liste (schématisé dans mon premier poste) j'aimerai qu'on les reclasse selon leur nombre de pages ce qui n'est pas le cas à l'origine.


Bonjour Habitude,

Les vecteurs je connais, mais je n'ai pas compris l'idée de faire un vecteur avec tout les titres, est similaire à faire un tableau?


Merci pour vos réponses!
 

LeGaulois

XLDnaute Nouveau
Re : [Algo] Définir des paquets [Difficile]

Bonjour,

Nouvelle question pour Habitude que je remercie encore pour son aide!
Quand vous mettez paquet(cpt), cela veut dire que vous mettez le titre dans un tableau à 2 dimensions? La première dimension concerne le paquet numéro cpt, et la seconde dimension stockera tout les titres de ce paquet?

Honnêtement je ne m'en sors pas, je suis fatigué, et le niveau demandé est bien trop élevé, si vous ne répondez pas ce n'est pas grave, c'est déjà vraiment très généreux de votre part de passer du temps à mon problème. Mais je ne crois pas que le projet sera fini... Je ne pense pas qu'il était possible de le finir. Je suis désolé de vous avoir fait perdre votre temps.

Je vais néanmoins essayer encore jusqu'à la fin de mon stage mais vu le temps qu'il me reste... Et grâce à votre aide (Habitude) j'ai un aperçu différent du problème et de la solution possible (je tentais de faire quelque chose de similaire sauf que je l'avais mis dans une boucle qui attendait qu'on atteigne la fin du tableau).

Je vous remercie, à bientôt
 
Dernière édition:

Habitude

XLDnaute Accro
Re : [Algo] Définir des paquets [Difficile]

Re

Et bien pour moi Paquet(cpt) est un vecteur dynamique.
Associé à un objet classe.
Un objet contenant plusieurs informations, tel que Espace du paquet utilisé ainsi que les données qui le compose.
Évidemment il serait possible de faire un seul objet Paquet contenant le dit vecteur et Utiliser une fonction Add.
Soit Paquet.Add
 

LeGaulois

XLDnaute Nouveau
Re : [Algo] Définir des paquets [Difficile]

Rebonjour,

Merci pour ces précisions mais ça devient trop pointu pour moi là lol ... Je suis en BTS première année, je fais du VBA depuis maintenant environ un peu plus d'un mois, toutes ces notions de vecteur en programmation ou la création d'objet en VBA me sont totalement inconnues.

Je vous remercie, je vais essayer de trouver un moyen de bidouiller, tant pis si ce n'est pas propre...

Au revoir, et encore merci pour votre aide ! Ca m'est utile !
 

Discussions similaires

Statistiques des forums

Discussions
312 841
Messages
2 092 705
Membres
105 514
dernier inscrit
Hébera