OVH Cloud OVH Cloud

Une macro... s'il vous plaît...

29 réponses
Avatar
STEPHANE
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être réalisée
par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier mais qui
est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon totalement
aléatoire, mais en même nombre, dans les colonnes BCDEFGHIJK, à chaque
lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne BCD...

C'est très simple à expliquer, mais il est probable que cela soit plus
complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.

9 réponses

1 2 3
Avatar
STEPHANE
Bonjour Daniel,

La bataille n'est pas tout à fait finie, même si "modeste" m'a proposé une
solution très pratique sans macro pour 1000 lignes. Pour du plus gros je
suis donc preneur...

J'ai testé ta macro:
Au lancement j'ai le message erreur de compilation, erreur de syntaxe. sur
la 1er ligne
" Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer "


As-tu une idée du problème ?

Merci.

Stéphane.

"Daniel" a écrit dans le message de news:

Bonsoir.
J'arrive sans doute après la bataille mais j'ai pondu une macro assez
rapide avec 30000 lignes :

Sub test()
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer
Dim Ligne As Integer
Application.ScreenUpdating = False
Range("B1:M30000").ClearContents
Set Plage = Range("L1:L30000")
For Each c In Plage
c.Value = c.Row
Next c
Randomize
Lim = 30000
For i = 1 To 10
Do While Ctr < 300
Var = ((Lim - 1) * Rnd() + 1)
Ligne = Range("L1").Offset(Var - 1, 0).Value
Cells(Ligne, i + 1) = Cells(Var, 1)
Range("L1").Offset(Var - 1, 0).Delete xlShiftUp
Ctr = Ctr + 1
Lim = Lim - 1
Loop
Ctr = 0
Next i
Application.ScreenUpdating = True
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430eea3a$0$2519$
Bonjour Daniel,

Merci beaucoup de cette aide...très précieuse et qui devrait remplacer
efficacement mes méthodes empiriques.
La macro fonctionne parfaitement sur l'exemple donnée mais...

Deux questions complémentaires :

Question de curiosité
Comme je ne suis par certain de décrypter ta fonction correctement, la
répartition aléatoire fait appelle à une fonction mathématique ou c'est
une astuce de décalage ?

Question sur un problème de mise en ouvre étendu
Ma plage de valeur étudiée est supérieur à 100 lignes, elle peut
atteindre 30 000 lignes. J'ai fait un test avec ta macro en modifiant le
100 dans "Range("B1:K100")"et dans "Set Plage = Range("A1:A100")" par
1000 (pour voir). Je lance la macro, instantanément la répartition semble
se faire au moins sur la première page, mais le sablier reste bloquer et
finalement un message m'indique que le programme ne répond pas dès que je
tente de faire autre chose.
As-tu une idée d'ou vient le problème ?

Vraiment merci de ton aide.

Cordialement.
Stéphane.

"Daniel" a écrit dans le message de news:
uj$
Bonjour.
La macro suivante devrait le faire :
Sub Test()

Dim Plage As Range, c As Range, Compte(9) As Integer, Var As Integer
Range("B1:K100").ClearContents
Var = WorksheetFunction.CountA(Columns(2))
Set Plage = Range("A1:A100")
For Each c In Plage
For i = 2 To 11
Compte(i - 2) = WorksheetFunction.CountA(Columns(i))
Next i
Var = Int(Rnd() * 10) + 1
Do Until Compte(Var - 1) < 10
Var = Int(Rnd() * 10) + 1
Loop
c.Offset(0, Var).Value = c.Value
Next c
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier
mais qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon
totalement aléatoire, mais en même nombre, dans les colonnes
BCDEFGHIJK, à chaque lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit plus
complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.

















Avatar
Daniel
Bonjour.
Cela provient du fait que le ppost a coupé la première ligne :
remplace :
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer
par
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer
Dim Lim As Integer
Cordialement.
Daniel
"STEPHANE" a écrit dans le message de news:
43105d0f$0$2517$
Bonjour Daniel,

La bataille n'est pas tout à fait finie, même si "modeste" m'a proposé une
solution très pratique sans macro pour 1000 lignes. Pour du plus gros je
suis donc preneur...

J'ai testé ta macro:
Au lancement j'ai le message erreur de compilation, erreur de syntaxe. sur
la 1er ligne
" Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer "


As-tu une idée du problème ?

Merci.

Stéphane.

"Daniel" a écrit dans le message de news:

Bonsoir.
J'arrive sans doute après la bataille mais j'ai pondu une macro assez
rapide avec 30000 lignes :

Sub test()
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer
Dim Ligne As Integer
Application.ScreenUpdating = False
Range("B1:M30000").ClearContents
Set Plage = Range("L1:L30000")
For Each c In Plage
c.Value = c.Row
Next c
Randomize
Lim = 30000
For i = 1 To 10
Do While Ctr < 300
Var = ((Lim - 1) * Rnd() + 1)
Ligne = Range("L1").Offset(Var - 1, 0).Value
Cells(Ligne, i + 1) = Cells(Var, 1)
Range("L1").Offset(Var - 1, 0).Delete xlShiftUp
Ctr = Ctr + 1
Lim = Lim - 1
Loop
Ctr = 0
Next i
Application.ScreenUpdating = True
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430eea3a$0$2519$
Bonjour Daniel,

Merci beaucoup de cette aide...très précieuse et qui devrait remplacer
efficacement mes méthodes empiriques.
La macro fonctionne parfaitement sur l'exemple donnée mais...

Deux questions complémentaires :

Question de curiosité
Comme je ne suis par certain de décrypter ta fonction correctement,
la répartition aléatoire fait appelle à une fonction mathématique ou
c'est une astuce de décalage ?

Question sur un problème de mise en ouvre étendu
Ma plage de valeur étudiée est supérieur à 100 lignes, elle peut
atteindre 30 000 lignes. J'ai fait un test avec ta macro en modifiant le
100 dans "Range("B1:K100")"et dans "Set Plage = Range("A1:A100")" par
1000 (pour voir). Je lance la macro, instantanément la répartition
semble se faire au moins sur la première page, mais le sablier reste
bloquer et finalement un message m'indique que le programme ne répond
pas dès que je tente de faire autre chose.
As-tu une idée d'ou vient le problème ?

Vraiment merci de ton aide.

Cordialement.
Stéphane.

"Daniel" a écrit dans le message de news:
uj$
Bonjour.
La macro suivante devrait le faire :
Sub Test()

Dim Plage As Range, c As Range, Compte(9) As Integer, Var As Integer
Range("B1:K100").ClearContents
Var = WorksheetFunction.CountA(Columns(2))
Set Plage = Range("A1:A100")
For Each c In Plage
For i = 2 To 11
Compte(i - 2) = WorksheetFunction.CountA(Columns(i))
Next i
Var = Int(Rnd() * 10) + 1
Do Until Compte(Var - 1) < 10
Var = Int(Rnd() * 10) + 1
Loop
c.Offset(0, Var).Value = c.Value
Next c
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier
mais qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon
totalement aléatoire, mais en même nombre, dans les colonnes
BCDEFGHIJK, à chaque lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit plus
complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.





















Avatar
STEPHANE
Merci Daniel.

C'est impeccable, je vais gagner pas mal de temps.

Cordialement
Stéphane.

"Daniel" a écrit dans le message de news:
ePqu$
Bonjour.
Cela provient du fait que le ppost a coupé la première ligne :
remplace :
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer
par
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer
Dim Lim As Integer
Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 43105d0f$0$2517$
Bonjour Daniel,

La bataille n'est pas tout à fait finie, même si "modeste" m'a proposé
une solution très pratique sans macro pour 1000 lignes. Pour du plus gros
je suis donc preneur...

J'ai testé ta macro:
Au lancement j'ai le message erreur de compilation, erreur de syntaxe.
sur la 1er ligne
" Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer "


As-tu une idée du problème ?

Merci.

Stéphane.

"Daniel" a écrit dans le message de news:

Bonsoir.
J'arrive sans doute après la bataille mais j'ai pondu une macro assez
rapide avec 30000 lignes :

Sub test()
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim
As Integer
Dim Ligne As Integer
Application.ScreenUpdating = False
Range("B1:M30000").ClearContents
Set Plage = Range("L1:L30000")
For Each c In Plage
c.Value = c.Row
Next c
Randomize
Lim = 30000
For i = 1 To 10
Do While Ctr < 300
Var = ((Lim - 1) * Rnd() + 1)
Ligne = Range("L1").Offset(Var - 1, 0).Value
Cells(Ligne, i + 1) = Cells(Var, 1)
Range("L1").Offset(Var - 1, 0).Delete xlShiftUp
Ctr = Ctr + 1
Lim = Lim - 1
Loop
Ctr = 0
Next i
Application.ScreenUpdating = True
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430eea3a$0$2519$
Bonjour Daniel,

Merci beaucoup de cette aide...très précieuse et qui devrait remplacer
efficacement mes méthodes empiriques.
La macro fonctionne parfaitement sur l'exemple donnée mais...

Deux questions complémentaires :

Question de curiosité
Comme je ne suis par certain de décrypter ta fonction correctement,
la répartition aléatoire fait appelle à une fonction mathématique ou
c'est une astuce de décalage ?

Question sur un problème de mise en ouvre étendu
Ma plage de valeur étudiée est supérieur à 100 lignes, elle peut
atteindre 30 000 lignes. J'ai fait un test avec ta macro en modifiant
le 100 dans "Range("B1:K100")"et dans "Set Plage = Range("A1:A100")"
par 1000 (pour voir). Je lance la macro, instantanément la répartition
semble se faire au moins sur la première page, mais le sablier reste
bloquer et finalement un message m'indique que le programme ne répond
pas dès que je tente de faire autre chose.
As-tu une idée d'ou vient le problème ?

Vraiment merci de ton aide.

Cordialement.
Stéphane.

"Daniel" a écrit dans le message de news:
uj$
Bonjour.
La macro suivante devrait le faire :
Sub Test()

Dim Plage As Range, c As Range, Compte(9) As Integer, Var As
Integer
Range("B1:K100").ClearContents
Var = WorksheetFunction.CountA(Columns(2))
Set Plage = Range("A1:A100")
For Each c In Plage
For i = 2 To 11
Compte(i - 2) = WorksheetFunction.CountA(Columns(i))
Next i
Var = Int(Rnd() * 10) + 1
Do Until Compte(Var - 1) < 10
Var = Int(Rnd() * 10) + 1
Loop
c.Offset(0, Var).Value = c.Value
Next c
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier
mais qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon
totalement aléatoire, mais en même nombre, dans les colonnes
BCDEFGHIJK, à chaque lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit
plus complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.

























Avatar
STEPHANE
MERCI A TOUS LES CONTRIBUTEURS DE CE FIL QUI M'ONT PERMIS AU FINAL de
TROUVER 2 SOLUTIONS, MOI QUI N'EN ESPERER QU'UNE.

Stéphane.

"STEPHANE" a écrit dans le message de news:
430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier mais
qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon totalement
aléatoire, mais en même nombre, dans les colonnes BCDEFGHIJK, à chaque
lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit plus
complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.





Avatar
Laurent Daures
Bonjour,
voici une macro qui me semble convenir :

Sub zaza()
'Range("plage").ClearContents
For i = 1 To 100
retour:
Randomize
x = Int(Rnd() * 30000) + 1
y = Int(Rnd() * 10) + 1
z = Cells(x, y).Address
If Range(z).Value > 0 Then
GoTo retour
End If
Range(z).Value = i
Next
End Sub

Amicalement
Sitting Hoax

"STEPHANE" a écrit dans le message de news:
43105d0f$0$2517$
Bonjour Daniel,

La bataille n'est pas tout à fait finie, même si "modeste" m'a proposé une
solution très pratique sans macro pour 1000 lignes. Pour du plus gros je
suis donc preneur...

J'ai testé ta macro:
Au lancement j'ai le message erreur de compilation, erreur de syntaxe. sur
la 1er ligne
" Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer "


As-tu une idée du problème ?

Merci.

Stéphane.

"Daniel" a écrit dans le message de news:

Bonsoir.
J'arrive sans doute après la bataille mais j'ai pondu une macro assez
rapide avec 30000 lignes :

Sub test()
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer
Dim Ligne As Integer
Application.ScreenUpdating = False
Range("B1:M30000").ClearContents
Set Plage = Range("L1:L30000")
For Each c In Plage
c.Value = c.Row
Next c
Randomize
Lim = 30000
For i = 1 To 10
Do While Ctr < 300
Var = ((Lim - 1) * Rnd() + 1)
Ligne = Range("L1").Offset(Var - 1, 0).Value
Cells(Ligne, i + 1) = Cells(Var, 1)
Range("L1").Offset(Var - 1, 0).Delete xlShiftUp
Ctr = Ctr + 1
Lim = Lim - 1
Loop
Ctr = 0
Next i
Application.ScreenUpdating = True
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430eea3a$0$2519$
Bonjour Daniel,

Merci beaucoup de cette aide...très précieuse et qui devrait remplacer
efficacement mes méthodes empiriques.
La macro fonctionne parfaitement sur l'exemple donnée mais...

Deux questions complémentaires :

Question de curiosité
Comme je ne suis par certain de décrypter ta fonction correctement,
la répartition aléatoire fait appelle à une fonction mathématique ou
c'est une astuce de décalage ?

Question sur un problème de mise en ouvre étendu
Ma plage de valeur étudiée est supérieur à 100 lignes, elle peut
atteindre 30 000 lignes. J'ai fait un test avec ta macro en modifiant le
100 dans "Range("B1:K100")"et dans "Set Plage = Range("A1:A100")" par
1000 (pour voir). Je lance la macro, instantanément la répartition
semble se faire au moins sur la première page, mais le sablier reste
bloquer et finalement un message m'indique que le programme ne répond
pas dès que je tente de faire autre chose.
As-tu une idée d'ou vient le problème ?

Vraiment merci de ton aide.

Cordialement.
Stéphane.

"Daniel" a écrit dans le message de news:
uj$
Bonjour.
La macro suivante devrait le faire :
Sub Test()

Dim Plage As Range, c As Range, Compte(9) As Integer, Var As Integer
Range("B1:K100").ClearContents
Var = WorksheetFunction.CountA(Columns(2))
Set Plage = Range("A1:A100")
For Each c In Plage
For i = 2 To 11
Compte(i - 2) = WorksheetFunction.CountA(Columns(i))
Next i
Var = Int(Rnd() * 10) + 1
Do Until Compte(Var - 1) < 10
Var = Int(Rnd() * 10) + 1
Loop
c.Offset(0, Var).Value = c.Value
Next c
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier
mais qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon
totalement aléatoire, mais en même nombre, dans les colonnes
BCDEFGHIJK, à chaque lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit plus
complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.





















Avatar
jps
et moi qui n'en connaître aucune, puis-je te demander e ne pas nous crier
dessus, stéhane, même si c'est pour exprimer ton immense satisfaction et tes
remerciements chaleureux....?
jps

"STEPHANE" a écrit dans le message de
news:4311de71$0$2516$
MERCI A TOUS LES CONTRIBUTEURS DE CE FIL QUI M'ONT PERMIS AU FINAL de
TROUVER 2 SOLUTIONS, MOI QUI N'EN ESPERER QU'UNE.

Stéphane.

"STEPHANE" a écrit dans le message de
news:

430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier mais
qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon
totalement


aléatoire, mais en même nombre, dans les colonnes BCDEFGHIJK, à chaque
lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit plus
complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.









Avatar
Laurent Daures
Bonjour,
cela pourrait-il convenir ?

Sub zaza()
'Range("plage").ClearContents
For i = 1 To 100
retour:
Randomize
x = Int(Rnd() * 30000) + 1
y = Int(Rnd() * 9) + 2
z = Cells(x, y).Address
If Range(z).Value > 0 Then
GoTo retour
End If
'valeurs dans la colonne A
Range(z).Value = Cells(i, 1)
Next
End Sub

Amicalement
Sitting Hoax

"STEPHANE" a écrit dans le message de news:
43105d0f$0$2517$
Bonjour Daniel,

La bataille n'est pas tout à fait finie, même si "modeste" m'a proposé une
solution très pratique sans macro pour 1000 lignes. Pour du plus gros je
suis donc preneur...

J'ai testé ta macro:
Au lancement j'ai le message erreur de compilation, erreur de syntaxe. sur
la 1er ligne
" Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer "


As-tu une idée du problème ?

Merci.

Stéphane.

"Daniel" a écrit dans le message de news:

Bonsoir.
J'arrive sans doute après la bataille mais j'ai pondu une macro assez
rapide avec 30000 lignes :

Sub test()
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer
Dim Ligne As Integer
Application.ScreenUpdating = False
Range("B1:M30000").ClearContents
Set Plage = Range("L1:L30000")
For Each c In Plage
c.Value = c.Row
Next c
Randomize
Lim = 30000
For i = 1 To 10
Do While Ctr < 300
Var = ((Lim - 1) * Rnd() + 1)
Ligne = Range("L1").Offset(Var - 1, 0).Value
Cells(Ligne, i + 1) = Cells(Var, 1)
Range("L1").Offset(Var - 1, 0).Delete xlShiftUp
Ctr = Ctr + 1
Lim = Lim - 1
Loop
Ctr = 0
Next i
Application.ScreenUpdating = True
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430eea3a$0$2519$
Bonjour Daniel,

Merci beaucoup de cette aide...très précieuse et qui devrait remplacer
efficacement mes méthodes empiriques.
La macro fonctionne parfaitement sur l'exemple donnée mais...

Deux questions complémentaires :

Question de curiosité
Comme je ne suis par certain de décrypter ta fonction correctement,
la répartition aléatoire fait appelle à une fonction mathématique ou
c'est une astuce de décalage ?

Question sur un problème de mise en ouvre étendu
Ma plage de valeur étudiée est supérieur à 100 lignes, elle peut
atteindre 30 000 lignes. J'ai fait un test avec ta macro en modifiant le
100 dans "Range("B1:K100")"et dans "Set Plage = Range("A1:A100")" par
1000 (pour voir). Je lance la macro, instantanément la répartition
semble se faire au moins sur la première page, mais le sablier reste
bloquer et finalement un message m'indique que le programme ne répond
pas dès que je tente de faire autre chose.
As-tu une idée d'ou vient le problème ?

Vraiment merci de ton aide.

Cordialement.
Stéphane.

"Daniel" a écrit dans le message de news:
uj$
Bonjour.
La macro suivante devrait le faire :
Sub Test()

Dim Plage As Range, c As Range, Compte(9) As Integer, Var As Integer
Range("B1:K100").ClearContents
Var = WorksheetFunction.CountA(Columns(2))
Set Plage = Range("A1:A100")
For Each c In Plage
For i = 2 To 11
Compte(i - 2) = WorksheetFunction.CountA(Columns(i))
Next i
Var = Int(Rnd() * 10) + 1
Do Until Compte(Var - 1) < 10
Var = Int(Rnd() * 10) + 1
Loop
c.Offset(0, Var).Value = c.Value
Next c
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier
mais qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon
totalement aléatoire, mais en même nombre, dans les colonnes
BCDEFGHIJK, à chaque lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit plus
complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.





















Avatar
STEPHANE
L'émotion...sans doute....

Stéphane.

"jps" a écrit dans le message de news:
eUBDqn%
et moi qui n'en connaître aucune, puis-je te demander e ne pas nous crier
dessus, stéhane, même si c'est pour exprimer ton immense satisfaction et
tes
remerciements chaleureux....?
jps

"STEPHANE" a écrit dans le message de
news:4311de71$0$2516$
MERCI A TOUS LES CONTRIBUTEURS DE CE FIL QUI M'ONT PERMIS AU FINAL de
TROUVER 2 SOLUTIONS, MOI QUI N'EN ESPERER QU'UNE.

Stéphane.

"STEPHANE" a écrit dans le message de
news:

430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier
mais
qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon
totalement


aléatoire, mais en même nombre, dans les colonnes BCDEFGHIJK, à chaque
lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit plus
complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.












Avatar
STEPHANE
Bonsoir Laurent,

Navré, je réponds avec un peu de retard mais le fil est long et je n'avais
pas eu le temps de tester.
Merci, ta macro fonctionne et me permet de traiter 30000 lignes rapidement.
Il faudrait que je me mette un peu au VBA....

Cordialement

Stéphane.


"Laurent Daures" <http://cerbermail.com/?GSQ36o9bFb> a écrit dans le message
de news: Or6AQs%
Bonjour,
cela pourrait-il convenir ?

Sub zaza()
'Range("plage").ClearContents
For i = 1 To 100
retour:
Randomize
x = Int(Rnd() * 30000) + 1
y = Int(Rnd() * 9) + 2
z = Cells(x, y).Address
If Range(z).Value > 0 Then
GoTo retour
End If
'valeurs dans la colonne A
Range(z).Value = Cells(i, 1)
Next
End Sub

Amicalement
Sitting Hoax

"STEPHANE" a écrit dans le message de
news: 43105d0f$0$2517$
Bonjour Daniel,

La bataille n'est pas tout à fait finie, même si "modeste" m'a proposé
une solution très pratique sans macro pour 1000 lignes. Pour du plus gros
je suis donc preneur...

J'ai testé ta macro:
Au lancement j'ai le message erreur de compilation, erreur de syntaxe.
sur la 1er ligne
" Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim As
Integer "


As-tu une idée du problème ?

Merci.

Stéphane.

"Daniel" a écrit dans le message de news:

Bonsoir.
J'arrive sans doute après la bataille mais j'ai pondu une macro assez
rapide avec 30000 lignes :

Sub test()
Dim Ctr As Integer, Plage As Range, c As Range, Var As Integer, Lim
As Integer
Dim Ligne As Integer
Application.ScreenUpdating = False
Range("B1:M30000").ClearContents
Set Plage = Range("L1:L30000")
For Each c In Plage
c.Value = c.Row
Next c
Randomize
Lim = 30000
For i = 1 To 10
Do While Ctr < 300
Var = ((Lim - 1) * Rnd() + 1)
Ligne = Range("L1").Offset(Var - 1, 0).Value
Cells(Ligne, i + 1) = Cells(Var, 1)
Range("L1").Offset(Var - 1, 0).Delete xlShiftUp
Ctr = Ctr + 1
Lim = Lim - 1
Loop
Ctr = 0
Next i
Application.ScreenUpdating = True
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430eea3a$0$2519$
Bonjour Daniel,

Merci beaucoup de cette aide...très précieuse et qui devrait remplacer
efficacement mes méthodes empiriques.
La macro fonctionne parfaitement sur l'exemple donnée mais...

Deux questions complémentaires :

Question de curiosité
Comme je ne suis par certain de décrypter ta fonction correctement,
la répartition aléatoire fait appelle à une fonction mathématique ou
c'est une astuce de décalage ?

Question sur un problème de mise en ouvre étendu
Ma plage de valeur étudiée est supérieur à 100 lignes, elle peut
atteindre 30 000 lignes. J'ai fait un test avec ta macro en modifiant
le 100 dans "Range("B1:K100")"et dans "Set Plage = Range("A1:A100")"
par 1000 (pour voir). Je lance la macro, instantanément la répartition
semble se faire au moins sur la première page, mais le sablier reste
bloquer et finalement un message m'indique que le programme ne répond
pas dès que je tente de faire autre chose.
As-tu une idée d'ou vient le problème ?

Vraiment merci de ton aide.

Cordialement.
Stéphane.

"Daniel" a écrit dans le message de news:
uj$
Bonjour.
La macro suivante devrait le faire :
Sub Test()

Dim Plage As Range, c As Range, Compte(9) As Integer, Var As
Integer
Range("B1:K100").ClearContents
Var = WorksheetFunction.CountA(Columns(2))
Set Plage = Range("A1:A100")
For Each c In Plage
For i = 2 To 11
Compte(i - 2) = WorksheetFunction.CountA(Columns(i))
Next i
Var = Int(Rnd() * 10) + 1
Do Until Compte(Var - 1) < 10
Var = Int(Rnd() * 10) + 1
Loop
c.Offset(0, Var).Value = c.Value
Next c
End Sub

Cordialement.
Daniel
"STEPHANE" a écrit dans le message de
news: 430e44f6$0$2522$
Bonsoir,

Sujet : étude de répartition aléatoire.

Je souhaiterais faire une simulation qui ne peux, je pense, qu'être
réalisée par macro, ce qui est hors de ma portée.
Peut-être pourriez-vous m'aider ?

J'ai en A une colonne de valeur dont le nombre de ligne peut varier
mais qui est toujours pair.
Ex: A1 à A100 j'ai en BCDEFGHIJK 10 colonne vides.

Je souhaite que les Valeurs en A1:A100 se répartissent de façon
totalement aléatoire, mais en même nombre, dans les colonnes
BCDEFGHIJK, à chaque lancement de la macro.
Je retrouverais donc dans mon exemple 10 valeurs dans chaque colonne
BCD...

C'est très simple à expliquer, mais il est probable que cela soit
plus complexe à réaliser...

Merci en tout cas de votre aide ou de vos infos.

Stéphane.

























1 2 3