Tableau VBA et sélection de plusieurs cellules
Bonjour,
Je sollicite votre aide car je cherche depuis plusieurs heures comment sélectionner des cellules d'un tableau créer en vba afin de générer des nombres aléatoire de 1 à 22 dans ces cellules sans répéter 2 fois le même chiffres.
Actuellement j'utilise le code suivant (mais voudrai le modifier comme dans le code plus bas avec l'utilisation d'un tableau vba) pour sélectionner la Feuil5 puis j'ecrie sur les cellules de A1 à A21 un nombre compris entre 1 et 22 qui de plus ne se répète pas.
Ensuite je selectionne le resultat qui se trouve dans les cellules A1 à A14 de la Feuil5 puis les colles dans la Feuil2 sur les lignes C11 à C24.
'-------------------------------------------------------------------------------
Sub generationchiffre()
'-------------------------------------------------------------------------------
Set liste_sheet = Sheets("Feuil5")
Dim plage As Range, cel As Range, alea As Double
' je defini le planing sur 21 jour soit de A1 à A21 je vais generer un nombre aleatoire.
Set plage = Range("A1:A21")
plage.Value = ""
If plage.Count > 22 Then Exit Sub
Randomize
For Each cel In plage
' je genere un nombre de 1 à XX suivant le nombre de plat que j'ai dans la feuil1
1 alea = WorksheetFunction.RandBetween(1, 21)
If Application.CountIf(plage, alea) Then GoTo 1 Else cel = alea
Next
Sheets("Feuil5").Range("A1:A14").Copy
Sheets("Feuil2").Range("C11:C24").PasteSpecial Paste:=xlPasteValues
Sheets("Feuil5").Range("A1:A14").Copy
Sheets("Feuil2").Range("D11:D24").PasteSpecial Paste:=xlPasteValues
Sheets("Feuil5").Range("A1:A14").Copy
Sheets("Feuil2").Range("E11:E24").PasteSpecial Paste:=xlPasteValues
Sheets("Feuil5").Range("A1:A14").Copy
Sheets("Feuil2").Range("F11:F24").PasteSpecial Paste:=xlPasteValues
Sheets("Feuil5").Range("A1:A14").Copy
Sheets("Feuil2").Range("G11:G24").PasteSpecial Paste:=xlPasteValues
Sheets("Feuil5").Range("A1:A14").Copy
Sheets("Feuil2").Range("H11:H24").PasteSpecial Paste:=xlPasteValues
Sheets("Feuil5").Range("A1:A14").Copy
Sheets("Feuil2").Range("I11:I24").PasteSpecial Paste:=xlPasteValues
End SubCi dessous ce que je souhaiterai faire :
A la place d utiliser la feuil5 je créer un tableau tab1 avec 21 cellules.
Je les sélectionnes et inscrit aléatoirement mais nombre dans les cellules.
Puis je sélectionnes 14 cellules du tableau tab1 puis les colles dans la Feuil2
'-------------------------------------------------------------------------------
Sub generationchiffre()
'-------------------------------------------------------------------------------
'déclaration de tableau à 1 dimension soit 22 lignes de 0 à 21
Dim tab1(21) As String
Set liste_sheet = Sheets("tab1(0):tab1(21)")
Dim plage As Range, cel As Range, alea As Double
' je defini le planing sur 21 jour soit de A1 à A21 je vais generer un nombre aleatoire.
Set plage = Range("tab1(0):tab1(21)")
plage.Value = ""
If plage.Count > 22 Then Exit Sub
Randomize
For Each cel In plage
' je genere un nombre de 1 à XX suivant le nombre de plat que j'ai dans la feuil1
1 alea = WorksheetFunction.RandBetween(1, 21)
If Application.CountIf(plage, alea) Then GoTo 1 Else cel = alea
Next
Sheets("tab1").Range("tab1(0):tab1(13)").Copy
Sheets("MenuAleatoire").Range("C11:C24").PasteSpecial Paste:=xlPasteValues
Sheets("tab1").Range("tab1(0):tab1(13)").Copy
Sheets("MenuAleatoire").Range("D11:D24").PasteSpecial Paste:=xlPasteValues
Sheets("tab1").Range("tab1(0):tab1(13)").Copy
Sheets("MenuAleatoire").Range("E11:E24").PasteSpecial Paste:=xlPasteValues
Sheets("tab1").Range("tab1(0):tab1(13))").Copy
Sheets("MenuAleatoire").Range("F11:F24").PasteSpecial Paste:=xlPasteValues
Sheets("tab1").Range("tab1(0):tab1(13))").Copy
Sheets("MenuAleatoire").Range("G11:G24").PasteSpecial Paste:=xlPasteValues
Sheets("tab1").Range("tab1(0):tab1(13))").Copy
Sheets("MenuAleatoire").Range("H11:H24").PasteSpecial Paste:=xlPasteValues
Sheets("tab1").Range("tab1(0):tab1(13)").Copy
Sheets("MenuAleatoire").Range("I11:I24").PasteSpecial Paste:=xlPasteValues
End SubPar avance merci infiniment pour votre aide
Cordialement
bonjour,
Faudrait être plus précis car on ne sait pas trop sur quel pied danser : 21 ou 22 ?
de 0 à 21 effectivement ça fait 22
par contre de A1 à A21 le compte est pas bon...
Je suis donc parti sur 21.
Cette macro fait un tirage de 1 a 21 sur la feuille 5 :
Sub Tir21()
Dim tablo(1 To 21), i%, j%, x%, a
Application.ScreenUpdating = False
Randomize
For i = 1 To 21
tablo(i) = i
Next
'permutation
For i = 21 To 1 Step -1
x = Int(((i) * Rnd) + 1)
j = tablo(x)
tablo(x) = tablo(i)
tablo(i) = j
Next
Worksheets("Feuil5").Range("A1:A" & 21) = Application.Transpose(tablo)
End SubPour copier une plage sur une autre plage :
Sub CopColV()
Dim a
a = Worksheets("Feuil5").Range("A1:A14").Value
Worksheets("Feuil2").Range("C11:C24") = a
Worksheets("Feuil2").Range("D11:D24") = a
End SubAvec ça tu devrais pouvoir adapter...
A+
Bonjour,
Merci pour votre aide malheureusement ce n'est pas ce que je cherche a faire. La code en première partie fonctionne deja ce que je cherche à faire c est utiliser un Dim tab1(21) As String et de m en servir à la place de la feuil5.
Concernant le nombre cela n'a pas d importance 21 ou 22.
Par avance merci pour votre aide
bonjour,
Une solution :
Sub Tir21()
Dim Tablo(1 To 21), i%, j%, x%, a
Application.ScreenUpdating = False
Randomize
For i = 1 To 21
Tablo(i) = i
Next
'permutation
For i = 21 To 1 Step -1
x = Int(((i) * Rnd) + 1)
j = Tablo(x)
Tablo(x) = Tablo(i)
Tablo(i) = j
Next
For i = 1 To 14
Worksheets("Feuil2").Range("C" & 10 + i) = Tablo(i)
Next
End SubA+
Merci infiniment galopin01 !
Ca fonctionne parfaitement, je peux enfin générer mes repas de la semaine aléatoirement et prévoir ensuite les courses en conséquence.
Je joints mon fichier au cas ou cela intéresserai un passant
Merci encore une fois pour ton aide galopin01