Code copier-coller un tableau en fonction d'une cellule
Bonjour,
Je suis nouvelle sur le forum, et j'ai cherché pendant plusieurs heures une solution à mon problème... que je n'ai malheureusement pas trouvé...
Je souhaite écrire une macro qui me permettrait de copier un tableau le nombre de fois défini par une cellule. Je m'explique:
Je mets en place un cahier de recette très simplifié pour un didacticiel.
Les utilisateurs devront indiquer dans la page "identification" le nom du didacticiel, le nombre de séquences et le nombre de grains.
En cliquant sur le bouton "générer le cahier de recette", le tableau de la page "cahier de recette" se copiera le nombre de fois correspondant au nombre de grains indiqués sur la page "identification".
A chaque "coller" le numéro du grain se remplira automatiquement sur toutes les lignes du tableau collé (afin que l'utilisateur puisse remplir le tableau pour chaque grain).
Je joins mon fichier pour que ce soit plus clair.
J'ai réussi à faire le copier coller mais je ne sais pas comment faire ma boucle en fonction de la cellule indiquant le nombre de grains.
Merci beaucoup pour votre aide.
Bonjour et bienvenue sur le forum
Un essai à tester. Te convient-il ?
Bye !
Bonsoir le fil, bonsoir le forum,
j'avais travaillé dessus mais pas eu le temps de finir... Je te propose le code terminé et commenté ci-dessous :
Private Sub Générer_Click()
Dim OI As Worksheet 'déclare la variable OI (Onglet Identification)
Dim OC As Worksheet 'déclare la variable OC (Onglet Cahier de recette)
Dim NB As Byte 'déclare la variable NB (NomBre)
Dim I As Byte 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination)
Set OI = Sheets("Identification") 'définit l'onglet OI
Set OC = Sheets("Cahier de recette") 'définit l'onglet OC
NB = OI.Range("D5") 'définit le nombre NB
If NB = 0 Then Exit Sub 'si NB vaut zéro, sort de la procédure
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
For I = 1 To NB 'boucle de 1 à NB
'définit la cellule de destination DEST
Set DEST = OC.Cells(Application.Rows.Count, 3).End(xlUp).Offset(2, -2)
OC.Range("A6").CurrentRegion.Copy DEST 'copy le tableau autour de A6 dans DEST
DEST.Offset(1, 1).Resize(5, 1).Value = I 'place le numéro du grain dans les 5 lignes du tableau
Next I 'prochaine valeur de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
gmb a écrit :Bonjour et bienvenue sur le forum
Un essai à tester. Te convient-il ?
Bye !
Bonjour GMB
Merci beaucoup d'avoir répondu. Je cherchais plus à avoir le tableau qui se coller sur la même feuille sous lui-même après chaque itération.
A bientôt sur le forum
ThauThème a écrit :Bonsoir le fil, bonsoir le forum,
j'avais travaillé dessus mais pas eu le temps de finir... Je te propose le code terminé et commenté ci-dessous :
Private Sub Générer_Click() Dim OI As Worksheet 'déclare la variable OI (Onglet Identification) Dim OC As Worksheet 'déclare la variable OC (Onglet Cahier de recette) Dim NB As Byte 'déclare la variable NB (NomBre) Dim I As Byte 'déclare la variable I (Incrément) Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination) Set OI = Sheets("Identification") 'définit l'onglet OI Set OC = Sheets("Cahier de recette") 'définit l'onglet OC NB = OI.Range("D5") 'définit le nombre NB If NB = 0 Then Exit Sub 'si NB vaut zéro, sort de la procédure Application.ScreenUpdating = False 'masque les rafraîchissements d'écran For I = 1 To NB 'boucle de 1 à NB 'définit la cellule de destination DEST Set DEST = OC.Cells(Application.Rows.Count, 3).End(xlUp).Offset(2, -2) OC.Range("A6").CurrentRegion.Copy DEST 'copy le tableau autour de A6 dans DEST DEST.Offset(1, 1).Resize(5, 1).Value = I 'place le numéro du grain dans les 5 lignes du tableau Next I 'prochaine valeur de la boucle Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran End Sub
Merci Thauthème c'est parfait!!! et avec les commentaires c'est top je vais même pouvoir comprendre
ThauThème a écrit :Bonsoir le fil, bonsoir le forum,
j'avais travaillé dessus mais pas eu le temps de finir... Je te propose le code terminé et commenté ci-dessous :
Private Sub Générer_Click() Dim OI As Worksheet 'déclare la variable OI (Onglet Identification) Dim OC As Worksheet 'déclare la variable OC (Onglet Cahier de recette) Dim NB As Byte 'déclare la variable NB (NomBre) Dim I As Byte 'déclare la variable I (Incrément) Dim DEST As Range 'déclare la variable DEST (Cellule de DESTination) Set OI = Sheets("Identification") 'définit l'onglet OI Set OC = Sheets("Cahier de recette") 'définit l'onglet OC NB = OI.Range("D5") 'définit le nombre NB If NB = 0 Then Exit Sub 'si NB vaut zéro, sort de la procédure Application.ScreenUpdating = False 'masque les rafraîchissements d'écran For I = 1 To NB 'boucle de 1 à NB 'définit la cellule de destination DEST Set DEST = OC.Cells(Application.Rows.Count, 3).End(xlUp).Offset(2, -2) OC.Range("A6").CurrentRegion.Copy DEST 'copy le tableau autour de A6 dans DEST DEST.Offset(1, 1).Resize(5, 1).Value = I 'place le numéro du grain dans les 5 lignes du tableau Next I 'prochaine valeur de la boucle Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran End Sub
Merci Thauthème c'est parfait!!! et avec les commentaires c'est top je vais même pouvoir comprendre