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 SubAucune 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 SubAttention 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 SubUn grand merci à toi Dan pour m'avoir aiguillé sur la bonne voie