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.

10 réponses

1 2 3
Avatar
Daniel
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
MPi
Salut,

Ceci devrait faire ce que tu souhaites
Il s'agit de charger un tableau avec les valeurs de la colonne A et inscrire
les données dans les 10 colonnes à droite, une à la fois, tout en vérifiant
si le nombre a déjà été entré dans la même colonne ou sur la même ligne.
Lorsqu'on inscrit une valeur, on doit modifier cette valeur dans le tableau
pour ne pas l'utiliser une 2e fois. Ici, je mets -1

Option Explicit

Sub départ()
Dim Tablo(99), Valeur
Dim I As Integer, J As Integer

Columns("B:K").ClearContents

'initialiser le générateur de nombres aléatoires
Randomize

For I = 2 To 11
'remplir un tableau avec les valeurs de la colonne A
For J = 1 To 100
Tablo(J - 1) = Range("A" & J)
Next

For J = 1 To 100
'rechercher une valeur aléatoire qui n'a pas été utilisée
Do
Valeur = Int((100 * Rnd))
Loop Until Tablo(Valeur) <> -1

'Vérifier si la valeur a déjà été entrée dans cette colonne
If Not IsInColonne(Tablo(Valeur), I) Then
'Vérifier si la valeur a déjà été entrée sur cette ligne
If Not IsInLigne(Tablo(Valeur), J) Then
'Inscrire la valeur
Cells(J, I) = Tablo(Valeur)
'Mettre -1 une fois la valeur utilisée
Tablo(Valeur) = -1
Else
J = J - 1
End If
Else
J = J - 1
End If
Next
Next
End Sub

Function IsInColonne(Nb, Col) As Boolean
Dim Recherche

Set Recherche = Columns(Col).Find(Nb, LookAt:=xlWhole)
If Not Recherche Is Nothing Then IsInColonne = True

End Function

Function IsInLigne(Nb, Ligne) As Boolean
Dim Recherche

Set Recherche = Rows(Ligne).Find(Nb, LookAt:=xlWhole)
If Not Recherche Is Nothing Then IsInLigne = True

End Function

Michel
"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
Philippe
Oula,

à écrire c'est difficile. Y-a-t-il pas moyen de contourner ce code en :

- recopiant ta colonne A en B

- dans B : pour compteur = 1 à 500 : échanger de place des celulles 2 à 2
dont le choix est fait à partir de la fonction aléatoire (ex : B2 devient B30
et B30 devient B2)

En gros, ca consiste en la recopie des données puis à mettre un grand coup
de shaker (comme ca on contourne la difficulté). pour le compteur de 1 à 500,
tu peux même mettre plus gros si tu trouves que l'on n'a pas assez secouer !

Philippe.

Philippe.




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
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
1. Non, c'est une question de décalage.
2. La macro n'est pas conçue pour de grandes plages de données. Elle
calcule la colonne de manière aléatoire, puis vérifie que le nombre de
valeurs de cette colonne est inférieure à 10, sinon, elle recommence le
processus. Pour de grandes plages, ça peut être très long. Il faut réécrire
la macro. Le plus simple est de travailler colonne après colonne et de
choisir aléatoirement les 10 cellules à copier.
Je dois m'absenter pour une bonne partie de l'après-midi. Si personne n'a
répondu, je la reprendrai.
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
Bonjour Michel,

Merci tout d'abord pour ce long développement.

Mais quand je lance la macro, pour 50 ligne en A, une colonne de valeur
s'inscrit en B et le sablier reste bloquer, le programme ne répond plus ?!
J'ai essayé avec 10 lignes 100 lignes, le problème est identique.

Ma demande correspond assez bien à ce que Daniel a fait un peu plus haut, à
la réserve qu'il me faut pouvoir traiter une colonne d'au moins 1000 lignes
voir beaucoup plus si possible.

Ex :
J'ai 3000 lignes en A je souhaite que les valeurs se répartissent de façon
aléatoire en 10 colonnes à droite de A sur 300 lignes.

Merci si tu peux étudier de nouveau la question. Et Merci encore, même si tu
ne le peux pas.

Stéphane.

"MPi" a écrit dans le message de news:
YuBPe.41608$
Salut,

Ceci devrait faire ce que tu souhaites
Il s'agit de charger un tableau avec les valeurs de la colonne A et
inscrire
les données dans les 10 colonnes à droite, une à la fois, tout en
vérifiant
si le nombre a déjà été entré dans la même colonne ou sur la même ligne.
Lorsqu'on inscrit une valeur, on doit modifier cette valeur dans le
tableau
pour ne pas l'utiliser une 2e fois. Ici, je mets -1

Option Explicit

Sub départ()
Dim Tablo(99), Valeur
Dim I As Integer, J As Integer

Columns("B:K").ClearContents

'initialiser le générateur de nombres aléatoires
Randomize

For I = 2 To 11
'remplir un tableau avec les valeurs de la colonne A
For J = 1 To 100
Tablo(J - 1) = Range("A" & J)
Next

For J = 1 To 100
'rechercher une valeur aléatoire qui n'a pas été utilisée
Do
Valeur = Int((100 * Rnd))
Loop Until Tablo(Valeur) <> -1

'Vérifier si la valeur a déjà été entrée dans cette colonne
If Not IsInColonne(Tablo(Valeur), I) Then
'Vérifier si la valeur a déjà été entrée sur cette ligne
If Not IsInLigne(Tablo(Valeur), J) Then
'Inscrire la valeur
Cells(J, I) = Tablo(Valeur)
'Mettre -1 une fois la valeur utilisée
Tablo(Valeur) = -1
Else
J = J - 1
End If
Else
J = J - 1
End If
Next
Next
End Sub

Function IsInColonne(Nb, Col) As Boolean
Dim Recherche

Set Recherche = Columns(Col).Find(Nb, LookAt:=xlWhole)
If Not Recherche Is Nothing Then IsInColonne = True

End Function

Function IsInLigne(Nb, Ligne) As Boolean
Dim Recherche

Set Recherche = Rows(Ligne).Find(Nb, LookAt:=xlWhole)
If Not Recherche Is Nothing Then IsInLigne = True

End Function

Michel
"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,

Ok, si tu peux suivre le fil du coin de l'oeil. Si je n'ai pas d'autre
solution je ferais avec ce que tu m'as donné, ce qui est déjà bien mieux que
ce que j'avais.

Cordialement

Stéphane.

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

1. Non, c'est une question de décalage.
2. La macro n'est pas conçue pour de grandes plages de données. Elle
calcule la colonne de manière aléatoire, puis vérifie que le nombre de
valeurs de cette colonne est inférieure à 10, sinon, elle recommence le
processus. Pour de grandes plages, ça peut être très long. Il faut
réécrire la macro. Le plus simple est de travailler colonne après colonne
et de choisir aléatoirement les 10 cellules à copier.
Je dois m'absenter pour une bonne partie de l'après-midi. Si personne n'a
répondu, je la reprendrai.
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
Bonsoir Philippe,

C'est une solution, mais dans la pratique de mon étude de répartition de
nombre, j'ai une colonne A qui peut faire jusqu'à 30 000 lignes. Donc le
copiage est fastidieux et je sais de quoi je parle car c'est justement celui
ci que j'utilise faute de mieux. Et c'est ainsi que je me suis mis à rêver
d'une automatisation totale ;o)...

Stéphane.

"Philippe" a écrit dans le message de
news:
Oula,

à écrire c'est difficile. Y-a-t-il pas moyen de contourner ce code en :

- recopiant ta colonne A en B

- dans B : pour compteur = 1 à 500 : échanger de place des celulles 2 à 2
dont le choix est fait à partir de la fonction aléatoire (ex : B2 devient
B30
et B30 devient B2)

En gros, ca consiste en la recopie des données puis à mettre un grand coup
de shaker (comme ca on contourne la difficulté). pour le compteur de 1 à
500,
tu peux même mettre plus gros si tu trouves que l'on n'a pas assez secouer
!

Philippe.

Philippe.




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
Re...
Dans ta macro comment peut -on faire un reset pour remettre à zéro les 10
colonnes à droite de celle de A. Supprimer et je relance la macro donne "un
programme qui ne réponds pas".

Merci

Stéphane.

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

1. Non, c'est une question de décalage.
2. La macro n'est pas conçue pour de grandes plages de données. Elle
calcule la colonne de manière aléatoire, puis vérifie que le nombre de
valeurs de cette colonne est inférieure à 10, sinon, elle recommence le
processus. Pour de grandes plages, ça peut être très long. Il faut
réécrire la macro. Le plus simple est de travailler colonne après colonne
et de choisir aléatoirement les 10 cellules à copier.
Je dois m'absenter pour une bonne partie de l'après-midi. Si personne n'a
répondu, je la reprendrai.
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
LSteph
Bonjour Stephane,
..je vois que tu as d'autres réponses, mais comme j'avais préparé ceci:

'****
Sub testal()
Dim c As Range
Dim did As Boolean
Dim myc As String

Application.ScreenUpdating = False

did = False
[b1:k100].ClearContents
On Error Resume Next
For Each c In Range("a1:a100").Cells


Do
myc = Columns(Int((10 * Rnd) + 2)).EntireColumn.Address
If Range(myc).SpecialCells(xlCellTypeBlanks).Count > 65525 Then
c.Offset(0, Range(myc).Column - 1).Value = c
did = True
Else
did = False
End If
Loop While did = False
Next


End Sub
'****


'lSteph



"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