Probleme de doublon avec un Radomize

Bonsoir Tout le monde,

Comme le titre le dis, je fait une boucle pour récupérer des lignes dans une table pour insérer les éléments Trouvés.

Pour le choix de la ligne j'utilise un Randomize avec différents critères, et si l'élément a deja était choisi je passe un autre choix.

Malgré les critères je me retrouve parfois avec un doublon, j'ai essayé plusieurs solution, mais je ne trouve pas la Solution,

une aide serais la bienvenue, merci d'avance.

je met en copie mon prog en copie joint.

16menus-semainev02.xlsm (495.86 Ko)

Bonjour Domy59,

Je suppose que ce fichier posté est la suite de ton précédent. Je le télécharge puis le regarde ensuite à la pause Déjeuner.

A suivre...

Bonjour X Cellus,

les Grands esprits se rencontre, j'étais sur le point de t'envoyer un MP car oui c'est la suite de mon programme et il commençait a se perdre dans les ténèbres du forum !!

Dit moi si le fait de te MP ça te gene, et dans ce cas je patienterais le temps qu'il faut.

merci de prendre le temps sur ta pause déjeuné, bonne journée

A nouveau,

Si tu n'as pas eu de réponse depuis quelques jours sur ton sujet. Dis le moi par MP, je pourrais sans doute le regarder.

A suivre...

Bonjour le fil, bonjour le forum,

Je n'ai pas ouvert ton fichier mais il m'est arrivé la même galère. Voici une solution que j'ai trouvée pour éviter les doublons.

J'ai deux fois la même base : base1 et base2. Chaque fois qu'une ligne est tirée au sort, je la supprime de la base1. Quand la base1 est vide je la réinitialise avec la base2...

Bonjour le fil, bonjour le forum,

Je n'ai pas ouvert ton fichier mais il m'est arrivé la même galère. Voici une solution que j'ai trouvée pour éviter les doublons.

J'ai deux fois la même base : base1 et base2. Chaque fois qu'une ligne est tirée au sort, je la supprime de la base1. Quand la base1 est vide je la réinitialise avec la base2...

Bonjour ThauThéme,

merci pour ton intervention, je la met de coté pour le moment, je vais attendre de voir X cellus si il m'apporte une autre solution, un peu plus approprié car la table et faite de multi tableau et je ne vois pas pourquoi qu'une fois lu et validé, cette ligne reviens aussi aléatoirement et sans raison ??, mais merci quand meme.

bonne journée a toi

A nouveau,

J'ai réalisé quelques modifs sur la macro Menu.TabEntrées ou se trouve la ligne Randomize. Voir si cela convient comme 1ier test.

J'ai supposé que tu désirais avoir des menus différents (sans-doublon) pour tous les jours de la semaine. Je l'ai fait uniquement pour les entrées, à poursuivre pour les autres plats si correct pour toi.

Bons tests, bonne continuation.

Merci X Cellus, comme dab ça fonctionne comme prevue,

seul petit bémol, sur la base Entrée qui est de 24 enreg, lors de la recherche des 3 voir 2 et meme 1 enreg ça boucle trop longtemps sur" DepAlea:" plus de 100 passages et j'ai coupé avant lol pour trouver la dernier ligne a valider ? j'essaye de trouver le moyen de le faire sortir de là mais sans avoir de bon résultat.

Sur ta variable tu fait les recherche dans le Tableau() alors que moi je la faisait dans la base … quel est la difference et pour Mon système ne fonctionne pas et je trouve des doublon, tu pourrais m'explique un peu.

du coup j'ai essayé de faire la "redim" du tableau apres le second passage de façon a n'avoir que les Ligne non validées et du coup une boucle plus sur puisque tout les enreg du Tab() sont valide, mais je ne trouve pas le système.

si ti pouvais m'aiguiller un peu.

merci d'avance, Amicalement Domy59

Derniere_Ligne = Sheets("BD_Repas").Range("E65000").End(xlUp).Row If Derniere_Ligne >= 1 Then 'SI BD PAS VIDE Dim Tab_BD_Entrees() ReDim Tab_BD_Entrees(Derniere_Ligne - 2, 6) 'descendre de 2 ligne, 6= Nb de colonne For I = 1 To UBound(Tab_BD_Entrees, 1) ' si cette enreg est validée par la valeur 1 du coup ne pas prendre en compte et diminuer "I" de 1 ?? 'afin de n'avoir que les Ligne 0 de la base. Tab_BD_Entrees(I, 0) = Sheets("BD_Repas").Cells(I + 2, 1) 'Colonne B ID_Fait Tab_BD_Entrees(I, 1) = Sheets("BD_Repas").Cells(I + 2, 2) 'Colonne C ID_Plat Tab_BD_Entrees(I, 2) = Sheets("BD_Repas").Cells(I + 2, 3) 'Colonne D Type de plat Tab_BD_Entrees(I, 3) = Sheets("BD_Repas").Cells(I + 2, 4) 'Colonne E D?sactiv? Tab_BD_Entrees(I, 4) = Sheets("BD_Repas").Cells(I + 2, 5) 'Colonne F Plats Dispo Tab_BD_Entrees(I, 5) = Sheets("BD_Repas").Cells(I + 2, 7) 'Colonne G Dimanche ou pas Next I End If

Bonsoir Domy59,

Je recommence mon message car le site plante beaucoup. Et vu qu'il était assez long. Je vais le faire en plusieurs parties.

Donc premièrement: J'ai d'abord cherché ou était ton Randomize et l'ai trouvé dans la macro Menu.TabEntrées. Ainsi qu'un commentaire avec GRRRRR. De ce fait j'ai modifié la partie haute de cette macro consacrée aux Entrées. Vu que tu n'as pas laissé d'explications sur ton mode opératoire. J'ai pensé que tu désirais remplir le menu pour tous les jours de la semaine.

Et j'ai orientée cette macro pour cela en la laissant régulièrement afin de tester son fonctionnement. Note que j'ai mis For J=1 to 15 mais ce soir j'ai changé pour 16 voire 17. Et c'est mieux.

Suite,

Je passe par le tableau parce que c'est une reprise de ta base (ici Entrées) et que c'est plus rapide de l'interroger que de revenir sur la feuille. Et aussi parce qu'il n'y a pas besoin de modifier sur la feuille pour accepter ou non une entrée selon qu'elle a été choisie déjà ou non. Le tableau fait office de "zone tampon" intermédiaire.

De ce fait je peux lancer plusieurs fois la macro très rapidement. Le menu sera différent à chaque fois. Après je ne sais pas quel mode opératoire tu utilises dans ta recherche. Je ne comprends pas comment tu peux arriver à 100 passages?. En effet en lançant la macro Menu.TabEntrees, la sortie est très rapide.

Merci pour la Réponse, mais pour etre honnête je ne comprend pas trop !!

tu reposte quelque chose d'autre plus tard ou je dois faire avec ce que tu m'a deja donné ?

parce que ce que tu m'a deja fait fonction comme je voudrais que ça aille, seul défaut c'est qu' apres d'autres lancements, qui correspondrais à une nouvel semaine et du coup la base est faite de moins de ligne et la boucle "DepAlea:" tourne trop longtemp voir meme a planter Excel .

Mode opératoire dans un 1er temps et de remplir Aff_Semaine pour 7 jour indépendamment du soir sinon je vais prendre des kg si je mange midi et soir lol.

ensuite de pouvoir faire les recherche sur les autre tableaux " de la page BD_repas et de les associer aux entrée pour avoir un menu complet : "entrée + Plat + Accompagnement + Apres_plat et Dessert.

C'est l'idées de base§

re modification

si je ferme le projet Excel et que je le ré- ouvre, le Tableau() n 'existe plus du coup pas de trace des menus precedents ?

et le projet travail sur plusieurs semaine voir quatre pour que les menus ne soit pas répétitif pendant 3 semaine

Suite,

Troisièmement: Je suppose qu'une fois les entrées inscrites sur le menu tu souhaites ajouter les plats puis les desserts…

Donc utiliser ce qui est déjà inscrit et ajouter le reste afin d'obtenir un menu complet pour tous les jours (midi et soir).

Mais vu qu'il n'y a qu'une seule cellule à remplir par jour et repas (midi ou soir) il faudra utiliser un retour à la ligne pour l'ajout.

Afin de ne pas accoler les catégories. Cela donnerait des plats bizarres sinon.

Re

je pense que nos messages ce croise !!

Merci pour la Réponse, mais pour etre honnête je ne comprend pas trop !!

tu reposte quelque chose d'autre plus tard ou je dois faire avec ce que tu m'a deja donné ?

parce que ce que tu m'a deja fait fonction comme je voudrais que ça aille, seul défaut c'est qu' apres d'autres lancements, qui correspondrais à une nouvel semaine et du coup la base est faite de moins de ligne et la boucle "DepAlea:" tourne trop longtemp voir meme a planter Excel .

Mode opératoire dans un 1er temps et de remplir Aff_Semaine pour 7 jour indépendamment du soir sinon je vais prendre des kg si je mange midi et soir lol.

ensuite de pouvoir faire les recherche sur les autre tableaux " de la page BD_repas et de les associer aux entrée pour avoir un menu complet : "entrée + Plat + Accompagnement + Apres_plat et Dessert.

C'est l'idées de base§

re modification

si je ferme le projet Excel et que je le ré- ouvre, le Tableau() n 'existe plus du coup pas de trace des menus precedents ?

et le projet travail sur plusieurs semaine voir quatre pour que les menus ne soit pas répétitif pendant 3 semaine

Suite,

Le but de plusieurs lancements était de tester le remplissage du Menu de la Semaine. Pour voir comment le programme se comporte. Evidemment ce n'était pas de construire plusieurs Menus de la Semaine d'avance. Cela est inopportun.

Ensuite il est toujours possible de désactiver des lignes de ta base afin de ne pas les choisir chaque semaine. Le tableau récupérera seulement les lignes actives de la base pour construire le menu. En fonction bien sur d'un nombre d'entrées suffisantes dans la base. Ou de la saisonnalité des produits, après recherche et désactivation de certains ingrédients.

Mais laisse une feuille Notes en fin de fichier afin de suivre le déroulement de tes choix. Une sorte de cahier de suivi du programme (sorte de cahier des charges). Sinon on peut naviguer à vue...

Suite et fin pour ce jour,

Si tu n'enregistres pas ton fichier après avoir réalisé le menu. Il ne le conservera pas. Tu as 2 ClearContents en haut de ta macro afin de repartir sur un menu vierge.

Si tu souhaites conserver tes menus il faut les copier sur une feuille réservée pour cela. Exemple: récapitulatif de chaque semaine (n° 1 à 52) ou faire une copie au format PDF.

Bon courage.

Merci X Cellus,

Je te met une réponse (pendant que c'est frais dans ma tête), pour Demain ou autre, tu en as déjà bien fait ce jour.

Alors je Récap,

Dans ce programme je n'ais pas besoin d'avoir un visuel des semaines passé, c'est pour ça que dans la Base la colonne "Fait" enregistre le fait d'avoir choisis ou pas la ligne utilisée, pour éviter la semaine suivante de reprendre le plat ou dessert deja utilisé.

au pire des cas si dans l'avancement du prog, je voudrais reconstituer les menus passés, j'ajoute une colonne "date passé" et je recrée un visuel, mais ce n'est pas le propos pour le moment.

-1) ensuite il est prévu ajouter dans la même cellule du jour : Cells(Ligne_Tab, Col) = Tab_BD_Entrees(Nb_Alea, 4) & CHR(10) & Tab_BD_Plats(Nb_Alea, 4) & chr(10) Etc...

j'espère etre assez clair dans mes propos, pas toujours facile de mettre sur papier !!

Merci et bonne journée pour demain,

Bonjour Domy59,

Modification pour l'affichage du menu de la semaine:

J'ai ôté la boucle For J … Next. Pour la remplacer par un While …. Wend. En contrôlant la dernière cellule du menu I6 pour Midi ou I8 pour Midi et Soir. C'est plus efficace.

Voir l'image ci-dessous.

captcodemenu

A suivre...

Merci X Cellus,

Je vais finaliser cette étape avec " ton code " qui va bien, et je reviendrais surement vers toi ou même les autres Membres du Forum qui desire participer, et une fois tout ça mis en place je vous ferais profiter de ce que je fait en réalité.

encore merci XCellus pour ton aide et ta gentillesse.

ha oui Quel sont les avantages et inconvénient Entre la boucle " For et Next" et " While et Wend "

et derniere question le code que tu présente sur font noir et le code couleur est ce un paramétrage Excel ou une appli externe ?

peu tu me dire comment faire, merci

Amicalement Domy

Bonsoir Domy59,

La boucle For ... Next est plutôt réservée lorsqu'on connait le nombre d'itérations, de tours qu'elle est sensée réaliser. Exemple simple: si tu connais exactement le nombre de lignes d'une colonne et que tu recherches une donnée particulière à totaliser sur toute cette colonne.

La boucle While ... Wend est plutôt conditionnelle. Il faut qu'une condition existe pour qu'elle cesse. Et tant que cette condition n'est pas là, elle continuera. A manier avec précaution, parce que contrairement à la 1ière boucle, si ta condition n'arrive jamais, cela va tourner indéfiniment. Ici dans le programme tant que la longueur de la valeur en cellule test est égale à zéro comparée à Lg, la boucle continue. Puis dès que cette cellule finale vide au départ est remplie par du texte la longueur augmente et l'égalité est rompue. Donc arrêt de la boucle.

A plus.

Suite,

J'oubliais ton 2ième point. L'éditeur VBA est paramétrable. Couleur de Fonds, des caractères pour les commentaires et les codes VBA réservées d'Excel, le surlignement...

Regarde Outils, Options puis Formats de l'éditeur.

Personnellement j'utilise un fonds noir et caractères blanc qui est plus reposant à l’œil que le fonds blanc et caractères noir. Surtout pour les longs programmes.

Bonne fin de soirée.

Rechercher des sujets similaires à "probleme doublon radomize"