Etendre une plage par macro en fonction d'un chiffre demandé

Bonjour

Je vous explique mon probleme. j'ai decidé de me coller à la simplification des plannings de mon agence. J'avance bien mais j'ai un ensemble de macro assez lourdingue que j'aimerais simplifier.

Je bosse dans une boite qui engage bcp de saisonniers pdt l'été et j'aimerais pvr avoir une macro permettant de modifier la taille de mon tableau en fonction du nombre (à la hausse ou à la baisse) de saisonniers.

Je joins un tableau et ce que je souhaiterais obtenir c'est que l'intégralité des données et mise en forme de A5:R14 soit décalée vers le bas (créant ainsi une ligne supplémentaire pour un nv saisonnier). J'ai déjà crée la macro pour ça mais là où cela se corse et que le décalage doit se faire d'autant de fois que le chiffre indiqué en U5.

De plus, le decalage doit se faire à partir de la fin du tableau. En gros si j'ai déjà 6 saisonniers dans le tableau et que je veux en rajouter 1 de plus, le decalage doit imperativement se faire à parti du 6eme saisonnier et non pas du 1er.

Je ne sais pas si c'est super clair :s

Merci d'avance pour toute aide

La macro que j'utilise pour le decalage vers le bas

Range("A4:r13").Select
Selection.AutoFill Destination:=Range("A4:r23"), Type:=xlFillDefault
Rows("7:12").EntireRow.Hidden = True
Range("d4:e6").ClearContents
Range("f4:g6").ClearContents
Range("h4:i6").ClearContents
Range("j4:k6").ClearContents
Range("l4:m6").ClearContents
Range("n4:o6").ClearContents
Range("p6:q6").ClearContents
Range("A136").Select 

Bonjour,

Code à essayer

Sub test()
'Dan le 15/03/2012
For i = 1 To Range("U5").Value
    dlg = Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
    Range("A4:r13").Copy Range("A" & dlg) 
Next
Rows("7:12").EntireRow.Hidden = True
Range("d4:q6").ClearContents
End Sub

Aucune copie ne sera faite si tu ne complètes pas la cellule U5 bien sûr

Si ok, merci de cliquer sur le V vert à coté du bouton EDITER pour cloturer le fil

Amicalement

Merci Dan pour ta reponse

Ton code est TRES prometteur. Il y a juste un soucis supplémentaire. Je n'en avais pas parlé dans ma première question pour éviter d'embrouiller tout le monde avec qq chose de trop compliqué.

En fait comme tu as vu, avec ma macro je cache 6 lignes (qui seront remplies de formules et que l'utilisateur ne doit pas voir, surtt que je fais référence à sa mère plusieurs fois dans ces formules). L'idéal serait que la macro cache ces 6 lignes pour chaque ligne de saisonniers rajouté. Pour compliquer un peu, il y a des contenus de cases qui doivent être effacés également pour chaque ligne.

Une idée de ce que je dois rajouter dans la macro?

Merci d'avance

re,

Essaie comme ceci

Sub test()
'Dan le 15/03/2012
Dim i As Byte
Dim dlg As Integer
For i = 1 To Range("U5").Value
dlg = Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
Range("A4:r13").Copy Range("A" & dlg)
Range("A" & dlg - 2 & ":" & "R" & dlg - 7).EntireRow.Hidden = True
Next
Range("d4:q6").ClearContents
End Sub

Attention aux lignes fusionnées. A éviter au maiximum si tu as du code comme ici

Défusionne A13 à C13 avant d'utiliser le code

Amicalement

Je me suis dit... pourquoi s'embêter à demander à l'utilisateur un nb de personne à ajouter? Autant qu'il appuie sur le stupide bouton autant de fois qu'il a besoin de cases supplementaires, ce faignant.

J'ai donc modifié ta macro pour qu'elle fasse cela et qu'elle se bloque à un moment pour éviter que le tableau fasse plus d'une page.

J'ai aussi modifié les lignes qui sont cachées mais je pense que je n'avais pas été assez clair sur ce que je voulais réellement.

Sub test()

    'Dan le 15/03/2012
    Dim dlg As Integer
    If range("u2") = 14 Then MsgBox _
           "Il ne peut y avoir plus de 14 personnes", vbInformation: Exit Sub
    dlg = Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
    Range("A4:s13").Copy Range("A" & dlg)
    Range("A" & dlg + 3 & ":" & "s" & dlg + 8).EntireRow.Hidden = True
    Range("A" & dlg + 9).Value = ""
    Range("D" & dlg & ":" & "E" & dlg + 2).Value = ""

End Sub

Un grand merci à toi Dan pour m'avoir aiguillé sur la bonne voie

Rechercher des sujets similaires à "etendre plage macro fonction chiffre demande"