excel 2010-2016 replication de Valeur, par boucle sur plage spécifique

amateur_will

XLDnaute Nouveau
VB:
 ' code qui tire des numéros aléatoires
Dim cell As Range
Dim CopieCell As Range
      Set Plagcell = Feuil2.Range("B2:U2")
           Randomize
        For Each cell In Plagcell
    cell.Value = Int(0 + 9 * Rnd())
Next cell
'----------------------'
Set PosCell = Feuil2.Range("B2") 'position sur 1er valeur
PosCell.Select
    For Each CopieCell In Feuil1.Range("B2", Feuil2.Cells(Feuil2.Columns.Count, "U2").End(xlUp))
             For Each AlimPlag In Array(PlagcellB, PlagcellC, PlagcellD, PlagcellE, PlagcellF, PlagcellG,  PlagcellH,PlagcellI) 'placement des plages spécifiques du tableau
            CopieCell.Value = AlimPlag.Offset(, CInt(AlimPlag)).Value 'affecte la valeur aux plages spécifiques
                Set PosCell = PosCell.Offset(1) 'passe à la cellule suivante pour être affecté
            Next
        Next
End Sub

On commence par boucler sur le contenu de la ligne B2, a U2 ---> apparemment 'plantage ici en type d'erreur 1004 de la ligne ci-dessus.
tu prends la valeurs que tu trouves, et l'affectation se fait ( par l'autre For each AlimPlag..) aux plages définis
CaptureTblCopiePlagCell200718.PNG
Bonjour a tous,
[excel2010-2016]

et merci de vos conseils, dans le code assez simple, que j'essai de faire; mais qui plante

ci-joint la capture d'écran ci-dessus.
dans la plage B2:U2, j'ai généré des chiffres aléatoires.

par ailleurs, je veux les affectés a des plages bien distincts, dans leurs colonnes associées.

mon code est le suivant.

mes affectations:

VB:
affectation des plages.
Sub Num_Aleatoir()
Dim Plagcell As Range, PlagcellB As Range, PlagcellC As Range, PlagcellD As Range, PlagcellE As Range, PlagcellF As Range, PlagcellG As Range
Dim PlagcellH As Range, PlagcellI As Range, PosCell As Range
'-------'
Dim deb_colo As Integer, fin_Colo As Integer, Col As Integer, i As Integer
Dim Feuil2 As Worksheet
Dim AlimPlag As Variant
'--------'
Set Feuil2 = Worksheets("Feuil2")
Set PlagcellB = Feuil2.Range("B3:B7")
Set PlagcellC = Feuil2.Range("C3:C7")
Set PlagcellD = Feuil2.Range("D3:D4", "D8:D10")
Set PlagcellE = Feuil2.Range("E3:E4", "E8:E10")
Set PlagcellF = Feuil2.Range("F3:F4,F8,F11:F12,F14:F15")
Set PlagcellG = Feuil2.Range("G4,G8,G11:G13")
Set PlagcellH = Feuil2.Range("H1,H5,H8,H11:H13")
Set PlagcellI = Feuil2.Range("I3,I5,I8,I11:I12,I14:I15")

mon code plante, quand il doit récupérer, les valeurs de la ligne B2:U2, et les affectés aux différentes plages de cellule que j'ai définis comme ci-dessus

Merci, a pour pistes et ébauches
, puisque je devrais le faire dans plusieurs autres feuilles

cordialement a vous.
 

amateur_will

XLDnaute Nouveau
VB:
 ' code qui tire des numéros aléatoires
Dim cell As Range
Dim CopieCell As Range
      Set Plagcell = Feuil2.Range("B2:U2")
           Randomize
        For Each cell In Plagcell
    cell.Value = Int(0 + 9 * Rnd())
Next cell
'----------------------'
Set PosCell = Feuil2.Range("B2") 'position sur 1er valeur
PosCell.Select
    For Each CopieCell In Feuil1.Range("B2", Feuil2.Cells(Feuil2.Columns.Count, "U2").End(xlUp))
             For Each AlimPlag In Array(PlagcellB, PlagcellC, PlagcellD, PlagcellE, PlagcellF, PlagcellG,  PlagcellH,PlagcellI) 'placement des plages spécifiques du tableau
            CopieCell.Value = AlimPlag.Offset(, CInt(AlimPlag)).Value 'affecte la valeur aux plages spécifiques
                Set PosCell = PosCell.Offset(1) 'passe à la cellule suivante pour être affecté
            Next
        Next
End Sub


Regarde la pièce jointe 1015564 Bonjour a tous,
[excel2010-2016]

et merci de vos conseils, dans le code assez simple, que j'essai de faire; mais qui plante

ci-joint la capture d'écran ci-dessus.


mon code est le suivant.

mes affectations:

VB:
affectation des plages.
Sub Num_Aleatoir()
Dim Plagcell As Range, PlagcellB As Range, PlagcellC As Range, PlagcellD As Range, PlagcellE As Range, PlagcellF As Range, PlagcellG As Range
Dim PlagcellH As Range, PlagcellI As Range, PosCell As Range
'-------'
Dim deb_colo As Integer, fin_Colo As Integer, Col As Integer, i As Integer
Dim Feuil2 As Worksheet
Dim AlimPlag As Variant
'--------'
Set Feuil2 = Worksheets("Feuil2")
Set PlagcellB = Feuil2.Range("B3:B7")
Set PlagcellC = Feuil2.Range("C3:C7")
Set PlagcellD = Feuil2.Range("D3:D4", "D8:D10")
Set PlagcellE = Feuil2.Range("E3:E4", "E8:E10")
Set PlagcellF = Feuil2.Range("F3:F4,F8,F11:F12,F14:F15")
Set PlagcellG = Feuil2.Range("G4,G8,G11:G13")
Set PlagcellH = Feuil2.Range("H1,H5,H8,H11:H13")
Set PlagcellI = Feuil2.Range("I3,I5,I8,I11:I12,I14:I15")



Merci, a pour pistes et ébauches
, puisque je devrais le faire dans plusieurs autres feuilles

cordialement a vous.

biensur mes affectations, sont avant mes boucles de copies.

merci
 

amateur_will

XLDnaute Nouveau
bonsoir,
j'ai un peu chercher, par rapport a ma boucle de copie pour un test, et visiblement sur les 3 plage d'affectations, elle ne respecte pas les copies.
comme vous pouvez le voir dans la capture d'écran,

en test sur les 3 plages de débuts, j'ai

VB:
Sub Copie3Plag()
Dim i%, Plag(), c As Range, PlagcellB As Range, PlagcellC As Range, PlagcellD As Range
Dim cell1 As Range, cell2 As Range, PosCell As Range, PlagCell As Range, CntPlag As Integer

Set PlagcellB = Range("B3:B7")
Set PlagcellC = Range("C3:C7")
Set PlagcellD = Range("D3:D4", "D8:D10")
Set PosCell = Range("B2") 'position sur 1er valeur
Set PlagCell = Range("B2:U2")

Plag = Array(PlagcellB, PlagcellC, PlagcellD)
For CntPlag = LBound(Plag) To UBound(Plag)
   PosCell.Select
      For Each cell1 In PlagCell
           Randomize
                cell1.Value = Int(0 + 9 * Rnd())
                    If IsNumeric(cell1.Value) = True Then
                       Plag(CntPlag).Value = cell1.Value
                            ActiveCell.Offset(0, 1).Select
                              CntPlag = CntPlag + 1
                              End If
                    Next cell1
              Next CntPlag
End Sub

en colonne B, pour la valeur 5, je devrais avoir copie en B3:B7
en colonne B, pour la valeur 8, je devrais avoir copie en C3:C7
en colonne B, pour la valeur 1, je devrais avoir copie en ("D3:D4", "D8:D10")

voila, ci une personne peut m'éclairer, , a une idée de la façon dont je peux m'y prendre... ( cela est un test sur 3 plages )
mais dans l'autre réponse, que j'ai mise, je dois le faire à l'identique sur 8 plages ( capture d'écran plus haut)

merci de votre aide.







CaptureErreuboucle20072018.PNG
biensur mes affectations, sont avant mes boucles de copies.

merci

rebonjour,

j'ai un peu chercher sur mon code, ci-joint la capture d'ecran
 

amateur_will

XLDnaute Nouveau
Bonsoir le fil, le forum

@amateur_will
Regardes un peu les autres discussions, et note combien de fois on dit au demandeur qu'aux images on préfère les fichiers Excel
:rolleyes:

Depuis le jeudi 17 août 20017, tu ne t'en étais pas aperçu :eek: :eek: ?


salut staple1600,

vraiment, je suis navré de cette gourde dans le post, en question.

j'ai vraiment pas fait attention , qui fallait le fichier Excel.

ok c'est retenu pour une prochaine fois , et merci
 

Pièces jointes

  • TestBoucle20072018.xlsm
    26.6 KB · Affichages: 17

job75

XLDnaute Barbatruc
Bonjour amateur_will, JM,

C'est vraiment en effet du travail d'amateur.

Il y a 20 cellules dans la plage B2:U2.

Après avoir rempli ces 20 cellules je comprends que vous voulez copier les valeurs, mais pour les mettre où ?

Car il n'y a que 15 cellules dans la plage [B3:B7,C3:C7,D3: D4,D8: D10].

Prenez le temps de nous dire ce que vous voulez faire plutôt que d'écrire des codes qui n'ont aucun sens.

A+
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, amateur_will, job75

En attendant les précisions pour mieux comprendre la problèmatique
Si, (dans un premier temps), il s'agit d'avoir en B2:U2 des chiffres "aléatoires" entre 1 et 9
Voici deux façons de faire
VB:
Sub RemplirA()
Dim i&
Randomize 1600
For i = 2 To 21
Cells(2, i) = Int((9 - 1 + 1) * Rnd + 1)
Next
End Sub
Sub RemplirB()
[B2:U2] = "=RANDBETWEEN(1,9)": [B2:U2].Value = [B2:U2].Value
End Sub
 

amateur_will

XLDnaute Nouveau
bonjour a job75, et staple600 et merci d'avoir pris part a mon post.

pour te répondre job75, effectivement je sais que c'est du code d'amateur; mais il y a eu une recherche quand même, de mon coté à faire quelque chose. tu ne penses pas....
ensuite j'ai pris le temps, a exposé ma problématique.. regarde mon poste des le début; et comme je dis dans mon titre; je cherche à associer les valeurs aléatoire, aux plages spécifique que j'ai définis...regarde plus bien plus haut.. ,ton regards c'était posé sur les 15 cellules que tu évoquais, je disais bien, que c'était un test de copie..parce que il y en n'avais bien plus... quand tu remontes au début de mon poste je veux associés les valeurs aux plage spécifiques suivantes.--->

Code:
Set PlagcellB = Range("B3:B7")
Set PlagcellC = Range("C3:C7")
Set PlagcellD = Range("D3:D4,D8:D10")
Set PlagcellE = Range("E3:E4,E8:E10")
Set PlagcellF = Range("F3:F4,F8,F11:F12,F14:F15")
Set PlagcellG = Range("G4,G8,G11:G13")
Set PlagcellH = Range("H1,H5,H8,H11:H13")
Set PlagcellI = Range("I3,I5,I8,I11:I12,I14:I15")

je sais aussi, que je ne suis pas autant chevronné, que vous tous sur se site, mais si je suis là, c'est de voir le principe de base, et de continuer de mon coté.
en faite la job75, et staple600 c'est la réplication aux plages qui me posait problème.
staple600 j'ai vu ton code a tirer les nombres, c'est gentils, puisque je dois aussi prendre le chiffre 0, soit tirage de 0 à 9..mais de mon coté c'est bon
1) les chiffres sont tirés dans B2 à U2 cela me fait 21 tirages, donc 21; soit jusqu'à U soit Set PlagcellU=Range("U.......") jusqu'à la PlageU
2) et je les copies, aux plages ci-dessus spécifiques.
---> j'ai mis de PlacellB à PlagcellI pour exemple; pour voir votre principe code de copie; et je continuerais de mon coté; jusqu'à U
mes 8 plages de prises de B à I, sont en exemple, car j'ai 13 plages suplémentaires déjà définis, que je vais rajouté suivant votre méthode employée.
-->c'est vos exemples que j'utiliserais, que j'adapterais, pour les 10 autres feuilles,
cordialement
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, amateur_will, job75

@amateur_will
Je pense que plus ça va, plus cela devient abscons pour moi.
VB:
Sub EntraveQueDalle()
Dim Plage
Set Plage = _
Range("B3:B7,C3:C7,D3:D4,D8:D10,E3:E4,E8:E10,F3:F4,F8,F11:F12,F14:F15,G4,G8,G11:G13,H1,H5,H8,H11:H13,I3,I5,I8,I11:I12,I14:I15")
With Plage
.Formula = "=RANDBETWEEN(0,9)"
.Value = .Value
End With
End Sub

Peut-être que si tu ajoutais dans ton classeur un onglet RESULTAT (fait manuellement), on y verrait plus clair
(En tout cas, ce serait le cas pour moi ;) )
 

amateur_will

XLDnaute Nouveau
rebonsoir,

merci de vos réponses

déjà staple600 ce n'est pas abscons pour toi , dans la mesure ou le code que j'ai fait de mon coté, à finis par fonctionner, en l'ajustant avec des exemples; ceci-dit je ne connaissais pas cette methode : "=RANDBETWEEN(0,9)":
comme quoi, on n'apprend tous les jours. je vais m'en inspirer, et économiser 2 lignes, merci de cette piste
pas du tout, le classeur que j'ai mis était uniquement pour tester le code, l'original, il n'y a pas d'onglet résultat, les chiffres doivent apparaitre dans leurs plages respectives, mieux élaborer avec plusieurs boutons d'actions que je n'avais pas mis.
et job75, c'est vraiment pas cool de votre part, de considérer les gens comme vous le faites. je sais il y a plus compliqués.

post résolus