ChiffreS aléatoireS sans redondance (colonne chiffres et lettres)

Bonjour à toutes et tous,

Comme beaucoup, je m'interesse de plus en plus aux diverses fonctionnalités d'Excel découvrant sa puissance et ses possibilités.

Je suis confronté à un problème, vous vous en doutez.

Je cherche à automatiser un planing. En clair, positionner automatiquement des postes de travail en face d'une personne à un jour donné à partir d'une matrice dont le personnel absent est déjà noté. Je vais pas faire trop long mais essayer d'être clair quand même. Je reste bien sur à l'écoute s'il y à besoin de plus de détails ou des incompréhensions sur ma demande.

Je travaille en colonne car elle représente les postes à occuper dans 1 journée. Dans les cases vides, est génèré un nombre aléatoire borné compris entre 1 et le nombre de case vide dans le colonne (si je n'ai pas fait de faute) ce nombre de case vide représentant le nombre de poste à placer pour cette journée. Il faudrait que ces nombres générés, ne présentent aucun doublon dans la colonne (pas 2 personnes sur une même numéro de poste de travail). Je ne sais pas comment faire dans une colonne qui ne contient pas que des chiffres.

Avez vous une idée en formule ou en VBA (que je ne maitraise pas vraiment)?

Egalement, si vous avez une idée de comment figer les chiffres aléatoirement générés après leur génération (pour l'instant je copie colle les valeures, j'ai pas trouvé mieux) je suis preneur.

Une grand merci d'avance pour votre aide. Je vous joint le fichier à mon avancé actuelle.

Bonsoir,

l'idée afin que les chiffres dans les cellules restent fichés est que dans les cellules il n'y ait pas de formules ! Donc il vous faut créer une colonne sous VBA qui reprend les données, et pour chaque cellule vides, mettre en place un chiffre allant de 1 à nombre de case vides sans doublons.

L'aléatoire sous VBA peut être obtenu avec RND qui donne un chiffre entre 0 inclus et 1 non inclus, donc de 0 à 0,99999999.
Si nb case vide = 7, alors il faut multiplier RND par 7 puis additionner 1 : si RND = 0, alors x7 = 0 + 1 = 1 et si RND = 0.999999, alors x7 = 6,9999999 + 1 = 7,9999, ensuite on prend la partie entière du résultat, on a bien un chiffre entre 1 et 7 !
Chiffre = INT(RND*7) + 1

Ensuite à l'issue de chaque tirage on vérifie s'il n'est pas déjà sorti, l'ordre de sortie des chiffres sera l'ordre des lignes croissantes des cellules vides.

Bonne chance !

@ bientôt

LouReeD

Bonjour LouReeD,

Tout d'abord merci, pour votre réponse et le temps consacré à mon problème.

en lisant votre réponse (que je vais essayer) deux questions me viennent en tête :

- Le nombre de cases vides varie d'une colonne à l'autre, dois-je créer une colonne VBA pour chaque colonne du classeur en changeant le multiplicateur ?

- Vu que les nombres générés sont aléatoires, je ne risque pas de rencontrer deux fois un produit dont l'entier est égale à 7. Si j'ai bien compris votre raisonnement, tous les nombres aléatoirement généré entre 0,900000 et 0,999999 *7 +1 vont généré un entier égale à 7 non?

Encore merci pour votre temps et vos réponses.

Bonjour

Si j'en crois le tableau "D25:AE40" voici une solution en VBA

'Microsoft scripting runtime doit être coché dans Outils/Référence

Bonjour Yal,

merci beaucoup pour votre temps. Je vais le tester et je vous tiens au courant rapidement.

Encore merci.

Bonne soirée.

Si vous avez besoin d'explication n'hésitez pas

Cordialement.

Bonsoir Yal,

votre solution fonctionne magnifiquement bien.

Si cela ne vous dérange pas, je suis en effet très preneur de vos explications car je souhaiterais adapter ce que vous avez réussi à faire à un tableau plus grand et pour progresser aussi un peu.

Je vous en remercie beaucoup.

Bonjour

Voici la version avec les commentaires dans le code. J'ai ajouté un un contrôle Pour le cas ou il y aurait plus d'employés que de postes disponibles.

Super merci beaucoup Yal. Je vais regarder ça de près.

j'ai vu un petit truc que je vais essayer de compléter sur la base du code commenté que vous m'avez envoyé. Il faut que je borne le nombre aléatoire max sur le nombre de case vide dans la colonne. Un employé ne peut pas occuper le poste 10 si le poste 9 n'est pas occupé. J'avais réussi à le faire en formule, je vais donc essayer de l'implémenter dans votre code. Faut bien que je travail aussi un peu ^^.

Est- que je pourrais éventuellement vous envoyé un message en privé si je ne comprends pas tout?

Encore un grand merci pour tout ce temps que vous avez consacré à la résolution de mon problème.

Si j'ai bien compris voici une solution

J'en ai profité pour apporter une petite modification au contrôle du cas ou il y a plus d'employés que de postes. Dans la version précédente si on rencontrait cette situation dans une colonne ça arrêtait toute le procédure. Dans celle ci on passe juste à la colonne suivante.

Pas de souci pour communiquer par message privé

Bonsoir,

merci yal_excel ! Et beau travail !

@ bientôt

LouReeD

Bonjour,

Après quelques échange très cordiaux avec Yal_excel pour finir de régler quelques détails, je vais clore le poste.

Avant je souhaitais de nouveau le remercier pour sont fantastique travail sa patience malgrè les changements et les commentaires apportés au code. Merci beaucoup pour votre temps.

LooReeD également pour votre réponse et le temps que vous avez consacré à mon problème. Un grand merci à vous aussi.

Et les autres qui n'ont pas posté mais qui ont peut être essayé de voir ce qu'il pouvais faire.

Merci à tous.

A Bientot pour d'autres questions ou peut être même des réponses qui sait.

Merci pour ce retour et ces remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "chiffres aleatoires redondance colonne lettres"