Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Petite question VBA

  • Initiateur de la discussion Initiateur de la discussion JJ1
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

JJ1

Guest
(Re)Bonjour,

Je voudrais inscrire en C1 un nombre parmi L1:Q1:
(code de Pierre-Jean)

tablo = Range("L1:Q1")
Randomize
Set Dico = CreateObject("Scripting.dictionary")
While Dico.Count < 1
xx = Int((UBound(tablo, 2) * Rnd) + 1)
X = tablo(1, xx)
Dico(X) = X
Wend
Range("C1").Resize(, 1) = Dico.keys

Est-il utile de faire Dictionary ou existe-t-il plus simple?
merci.
 
Re : Petite question VBA

Bonjour JJ1,

Je suis très étonné que le code que tu indiques soit de pierrejean, ou alors tu l'as trafiqué.

Code:
Randomize
[C1] = [L1:Q1].Cells(Int([L1:Q1].Count * Rnd) + 1)
A+
 
Re : Petite question VBA

Bonsour®
il n'a donc que 6 nombres possibles : L1;M1;N1;O1;P1;Q1

se pose alors la question ces nombres sont-ils préalablement connus ou aléatoires ???

si connus :
Randomize
Range("C1")=[L1].Offset(0,Int(Rnd()*6))

si aléatoire :
alors il faut définir le type entier ou décimal, positif ou négatif, domaine >X et < Y
????
 
Dernière édition:
Re : Petite question VBA

Bonjour JJ1,

Un essai avec une fonction personnalisée:

En C1 = PickOneRange("L1:Q1")

VB:
'En colonne
Function PickOneRandom(Source As Range) As Variant
   Dim Tablo
   Dim i As Long, n As Long

   'Application.Volatile
   Randomize
   Tablo = Source.Value
   For i = 1 To UBound(Tablo, 2)
      Tablo(1, i) = Rnd
   Next i
   n = Application.Match(Application.Min(Tablo), Tablo, 0)
   PickOneRandom = Application.Index(Source, , n)
End Function

À+
 
Re : Petite question VBA

Rebonjour,

Je vais tester la solution très simple de Job (il me semble bien que ce code était de Pierrejean mais bricolé à 1 nombre au lieu de 10)
merci à tous, je vais tester.
(il s'agit bien d'en choisir un au hasard dans la plage)

merci
A+
 
Re : Petite question VBA

Bonjour à tous

Je crois bien avoir commis le code donné par JJ1 , mais comme l'a supposé notre ami JOB il a subi une adaptation pour le moins hasardeuse
A la base ce code permet l'obtention d'une liste de n termes differents choisis au hasard dans un groupe comportant plus de n elements
 
Re : Petite question VBA

Bonjour Pierrejean, merci de confirmer....j'avais peur de ma mémoire!
Ce code fonctionne très bien pour plusieurs nombres extraits dans une grande plage.

merci
Bonne soirée
 
Re : Petite question VBA

Bonsoir au Forum,

Je n'arrive pas à utiliser [C1] = [L1:Q1].Cells(Int([L1:Q1].Count * Rnd) + 1) en voulant l'appliquer à mon exemple avec un critère supplémentaire.
J'ai voulu mettre [C1] = [L1:Q1].Cells(Int([L1:Q1].Count * Rnd) + 11) pour les dizaines mais la technique ne fonctionne pas.
Je joins un exemple de ma recherche (résultat attendu en A1:C1).

merci de votre aide.

Bonne soirée
 

Pièces jointes

Re : Petite question VBA

Bonsoir JJ1,

Ma foi tu as de l'imagination 🙂

Cette macro dans le fichier joint :

Code:
Sub Tirage()
Dim P As Range, R As Range, c As Range, test1, test2, test3, x
Set P = [K1:R1] 'à adapter
Set R = [A1:C1] 'plage de restitution
For Each c In P
  If c Like "#" Then test1 = True
  If c Like "1#" Then test2 = True
  If c Like "2#" Then test3 = True
Next
Randomize
R.ClearContents 'RAZ
While test1
  x = P(Int(P.Count * Rnd) + 1)
  If x Like "#" Then R(2) = x: test1 = False
Wend
While test2
  x = P(Int(P.Count * Rnd) + 1)
  If x Like "1#" Then R(1) = x: test2 = False
Wend
While test3
  x = P(Int(P.Count * Rnd) + 1)
  If x Like "2#" Then R(3) = x: test3 = False
Wend
End Sub
A+
 

Pièces jointes

Re : Petite question VBA

bonsour®
pour les dizaines mais la technique ne fonctionne pas.
Je joins un exemple de ma recherche (résultat attendu en A1:C1).


🙄
une approche sans VBA

l'adaptation VBA se limitera alors à alimenter le tableau des valeurs possibles
puis duplication du résultat en valeur vers la plage d'utilisation

edit :ajout historisation(VBA)
 

Pièces jointes

  • Capture.JPG
    30.7 KB · Affichages: 47
  • Capture.JPG
    30.7 KB · Affichages: 42
  • tirage_tranches.xls
    tirage_tranches.xls
    97.5 KB · Affichages: 23
Dernière édition:
Re : Petite question VBA

Bonjour Job, Modeste,

merci pour vos solutions, mon tableau est presque terminé grace à votre aide-merci.
J'ai dit presque car il me reste un contrôle final de la plage restituée en A1:H1
Je souhaiterais renvoyer vers une ligne erreur si la plage contient plus de 1 nombre par tranche et 2 nombres dans une tranche quelconque pour totaliser 8 nombres (ex: Diz Uni Tren Vingt Quar Cinq Cinq Soixant. (y compris le 70)
Chaque tranche doit être représentée au moins une fois dans la plage.
La forme de la ligne vba serait du type : If .....(pas conforme ) Then Goto erreur

Avez-vous une idée de code?

Si vous avez un moment, rien n'est urgent.



Merci et bon samedi à tous.
 
Re : Petite question VBA

Bonjour Job,

Voici le fichier avec la macro installée (bouton bleu).
En fait, je voudrais intégrer mes formules en ligne 1 directement dans le code. C'est complexe.

Merci à toi.

A+
 

Pièces jointes

Re : Petite question VBA

Bonjour Modeste,

Je l'avais bien lu dans ton précédent fichier (merci) mais la condition de pioche (voir le code de la macro) est absente (3 puis 3 puis 2 dans mes tablo) et je ne sais pas l'adapter. Dommage !

Bon samedi.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
918
Réponses
12
Affichages
750
A
  • Question Question
Réponses
3
Affichages
595
R
  • Question Question
Réponses
2
Affichages
986
Rousseau Benoit
R
  • Suggestion Suggestion
Recherche & référence DicoCountOrder
Réponses
0
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…