Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche d'une valeur en VBA

4 réponses
Avatar
Guillaume
Bonjour a tous,

Je voudrais générer un nombre aléatoire compris entre 1 et une valeur
définie au début de la macro (variable nbphien). Le but étant de générer
tous les nombres de 1 à 19 par exemple et de les affecter a personne 1,
personne 2 ... personne 19, la personne n n'ayant pas forcément la
valeur n. Je vous joins le code que j'utilise:


Function RandomNumber(Lowest As Integer, Highest As Integer)
Randomize
RandomNumber = Int(Rnd * (Highest + 1 - Lowest)) + Lowest

End Function

Sheets("Pharmaciens").Select
Range("A2:A30").Select
Selection.ClearContents
'Attribution aléatoire d'un numéro à un pharmacien
Dim nbphien As Integer
nbphien = InputBox("Combien de pharmaciens participent au tour de
garde dans ce secteur:", "Saisir le nombre de pharmacien de la zone
géographique concernée")
Dim a As Integer
Dim b As Integer
b = 0
boucle:
a = RandomNumber(1, nbphien)
With Sheets("Pharmaciens").Range("A1:A30")
Set x = .Find(a, LookIn:=xlValues)
If x Is Nothing Then GoTo boucle1
GoTo boucle
End With
boucle1:
Range("A2").Offset(b, 0) = a
b = b + 1
If b = nbphien Then GoTo Calendrier
GoTo boucle
Calendrier:
End Sub

Le probleme renonctré est le suivant:

Le programme génère environ 13 ou 14 valeurs différentes comme il faut
et ensuite, même si le nombre généré n'existe pas dans la plage A2 a
A30, il ne va pas sur la boucle1: et continue sur la boucle:

Pourquoi??

Merci a tous pour votre aide

Guillaume

4 réponses

Avatar
LSteph
Bonjour,

..et ca pourrait durer longtemps..!!!

Supposons donc tes pharmaciens en A2:A30 et libre pour numéroter en
B2:B30
cela fait 29 pas 19, mais là n'est pas le souci on va aller de 1 à 29
par un nombre aléatoire.

Sub Macro1()
Dim i As Long, maval
Randomize
With Feuil2.[b2:b30]
.FormulaLocal = "=alea()"
.Copy
.PasteSpecial xlValues

For i = 1 To .Count
maval = WorksheetFunction.Match(WorksheetFunction.Min([b2:b30]),
[b2:b30], 0)
.Replace .Cells(maval).Value, i
Next

End With
End Sub

'LSteph



On 14 mai, 16:43, Guillaume wrote:
Bonjour a tous,

Je voudrais générer un nombre aléatoire compris entre 1 et une vale ur
définie au début de la macro (variable nbphien). Le but étant de g énérer
tous les nombres de 1 à 19 par exemple et de les affecter a personne 1,
personne 2 ... personne 19, la personne n n'ayant pas forcément la
valeur n. Je vous joins le code que j'utilise:

Function RandomNumber(Lowest As Integer, Highest As Integer)
Randomize
RandomNumber = Int(Rnd * (Highest + 1 - Lowest)) + Lowest

End Function

Sheets("Pharmaciens").Select
   Range("A2:A30").Select
   Selection.ClearContents
'Attribution aléatoire d'un numéro à un pharmacien
     Dim nbphien As Integer
     nbphien = InputBox("Combien de pharmaciens participent au to ur de
garde dans ce secteur:", "Saisir le nombre de pharmacien de la zone
géographique concernée")
     Dim a As Integer
     Dim b As Integer
     b = 0
boucle:
     a = RandomNumber(1, nbphien)
     With Sheets("Pharmaciens").Range("A1:A30")
     Set x = .Find(a, LookIn:=xlValues)
     If x Is Nothing Then GoTo boucle1
     GoTo boucle
     End With
boucle1:
     Range("A2").Offset(b, 0) = a
     b = b + 1
     If b = nbphien Then GoTo Calendrier
     GoTo boucle
Calendrier:
End Sub

Le probleme renonctré est le suivant:

Le programme génère environ 13 ou 14 valeurs différentes comme il f aut
et ensuite, même si le nombre généré n'existe pas dans la plage A 2 a
A30, il ne va pas sur la boucle1: et continue sur la boucle:

Pourquoi??

Merci a tous pour votre aide

Guillaume
Avatar
LSteph
..attention ceci va en une seule ligne

maval = WorksheetFunction.Match(WorksheetFunction.Min([b2:b30]),
[b2:b30], 0)


On 14 mai, 17:26, LSteph wrote:
Bonjour,

..et ca pourrait durer longtemps..!!!

Supposons donc tes pharmaciens en A2:A30  et libre pour numéroter en
B2:B30
cela fait 29 pas 19, mais là n'est pas le souci on va aller de 1 à 29
par un nombre aléatoire.

Sub Macro1()
Dim i As Long, maval
Randomize
With Feuil2.[b2:b30]
.FormulaLocal = "=alea()"
.Copy
.PasteSpecial xlValues

For i = 1 To .Count
maval = WorksheetFunction.Match(WorksheetFunction.Min([b2:b30]),
[b2:b30], 0)
.Replace .Cells(maval).Value, i
Next

End With
End Sub

'LSteph

On 14 mai, 16:43, Guillaume wrote:



> Bonjour a tous,

> Je voudrais générer un nombre aléatoire compris entre 1 et une va leur
> définie au début de la macro (variable nbphien). Le but étant de générer
> tous les nombres de 1 à 19 par exemple et de les affecter a personne 1,
> personne 2 ... personne 19, la personne n n'ayant pas forcément la
> valeur n. Je vous joins le code que j'utilise:

> Function RandomNumber(Lowest As Integer, Highest As Integer)
> Randomize
> RandomNumber = Int(Rnd * (Highest + 1 - Lowest)) + Lowest

> End Function

> Sheets("Pharmaciens").Select
>    Range("A2:A30").Select
>    Selection.ClearContents
> 'Attribution aléatoire d'un numéro à un pharmacien
>      Dim nbphien As Integer
>      nbphien = InputBox("Combien de pharmaciens participent au tour de
> garde dans ce secteur:", "Saisir le nombre de pharmacien de la zone
> géographique concernée")
>      Dim a As Integer
>      Dim b As Integer
>      b = 0
> boucle:
>      a = RandomNumber(1, nbphien)
>      With Sheets("Pharmaciens").Range("A1:A30")
>      Set x = .Find(a, LookIn:=xlValues)
>      If x Is Nothing Then GoTo boucle1
>      GoTo boucle
>      End With
> boucle1:
>      Range("A2").Offset(b, 0) = a
>      b = b + 1
>      If b = nbphien Then GoTo Calendrier
>      GoTo boucle
> Calendrier:
> End Sub

> Le probleme renonctré est le suivant:

> Le programme génère environ 13 ou 14 valeurs différentes comme il faut
> et ensuite, même si le nombre généré n'existe pas dans la plage A2 a
> A30, il ne va pas sur la boucle1: et continue sur la boucle:

> Pourquoi??

> Merci a tous pour votre aide

> Guillaume- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -
Avatar
LSteph
..donc pour généraliser à une plage de longueur variable
on nommera la plage à nuuméroter (adjacente aux éléments ou pas)

Sub Macro1()
Dim i As Long, maval

With [maplage]
.FormulaLocal = "=alea()"
.Copy
.PasteSpecial xlValues
For i = 1 To .Count
With WorksheetFunction
maval = .Match(.Min([maplage]), _
[maplage], 0)
End With
.Replace .Cells(maval).Value, i
Next
End With
End Sub

'LSteph

On 14 mai, 16:43, Guillaume wrote:
Bonjour a tous,

Je voudrais générer un nombre aléatoire compris entre 1 et une vale ur
définie au début de la macro (variable nbphien). Le but étant de g énérer
tous les nombres de 1 à 19 par exemple et de les affecter a personne 1,
personne 2 ... personne 19, la personne n n'ayant pas forcément la
valeur n. Je vous joins le code que j'utilise:

Function RandomNumber(Lowest As Integer, Highest As Integer)
Randomize
RandomNumber = Int(Rnd * (Highest + 1 - Lowest)) + Lowest

End Function

Sheets("Pharmaciens").Select
   Range("A2:A30").Select
   Selection.ClearContents
'Attribution aléatoire d'un numéro à un pharmacien
     Dim nbphien As Integer
     nbphien = InputBox("Combien de pharmaciens participent au to ur de
garde dans ce secteur:", "Saisir le nombre de pharmacien de la zone
géographique concernée")
     Dim a As Integer
     Dim b As Integer
     b = 0
boucle:
     a = RandomNumber(1, nbphien)
     With Sheets("Pharmaciens").Range("A1:A30")
     Set x = .Find(a, LookIn:=xlValues)
     If x Is Nothing Then GoTo boucle1
     GoTo boucle
     End With
boucle1:
     Range("A2").Offset(b, 0) = a
     b = b + 1
     If b = nbphien Then GoTo Calendrier
     GoTo boucle
Calendrier:
End Sub

Le probleme renonctré est le suivant:

Le programme génère environ 13 ou 14 valeurs différentes comme il f aut
et ensuite, même si le nombre généré n'existe pas dans la plage A 2 a
A30, il ne va pas sur la boucle1: et continue sur la boucle:

Pourquoi??

Merci a tous pour votre aide

Guillaume
Avatar
LE TROLL
Bonjour,

Pour cmpléter :
La génération de nombres peudo-aléatoires décortiquée :


Dim hasard As integer
dim maximum as integer
dim minimum as integer
minimum = x
maximum = y
Randomize
hasard = Int((maximum - minimum + 1) * Rnd + minimum)


Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Guillaume" a écrit dans le message de
news:
Bonjour a tous,

Je voudrais générer un nombre aléatoire compris entre 1 et une valeur
définie au début de la macro (variable nbphien). Le but étant de générer
tous les nombres de 1 à 19 par exemple et de les affecter a personne 1,
personne 2 ... personne 19, la personne n n'ayant pas forcément la valeur
n. Je vous joins le code que j'utilise:


Function RandomNumber(Lowest As Integer, Highest As Integer)
Randomize
RandomNumber = Int(Rnd * (Highest + 1 - Lowest)) + Lowest

End Function

Sheets("Pharmaciens").Select
Range("A2:A30").Select
Selection.ClearContents
'Attribution aléatoire d'un numéro à un pharmacien
Dim nbphien As Integer
nbphien = InputBox("Combien de pharmaciens participent au tour de
garde dans ce secteur:", "Saisir le nombre de pharmacien de la zone
géographique concernée")
Dim a As Integer
Dim b As Integer
b = 0
boucle:
a = RandomNumber(1, nbphien)
With Sheets("Pharmaciens").Range("A1:A30")
Set x = .Find(a, LookIn:=xlValues)
If x Is Nothing Then GoTo boucle1
GoTo boucle
End With
boucle1:
Range("A2").Offset(b, 0) = a
b = b + 1
If b = nbphien Then GoTo Calendrier
GoTo boucle
Calendrier:
End Sub

Le probleme renonctré est le suivant:

Le programme génère environ 13 ou 14 valeurs différentes comme il faut et
ensuite, même si le nombre généré n'existe pas dans la plage A2 a A30, il
ne va pas sur la boucle1: et continue sur la boucle:

Pourquoi??

Merci a tous pour votre aide

Guillaume