Bonjour Fabrice, Bonjour à tous et toutes,
Ben... Je suppose que ton tableau est vide à l'origine ? puisque tu veux des copies dedans... Donc pour que VBA trouve la fin du tableau il faut une balise !!! (même si elle se trouve dans une autre colonne...) à préciser ???
Si tout est vide il peut s'agir d'une cellule avec un format... Quoique dans ce cas on sait déjà la plage à couvrir... (dans ce cas la Valeur de Max peut être initialisée directement, exemple ton tableau fini en Ligne 500, il suffit de :
- Changer => X = (65536 - Ligne - 24) / 24 |PAR|=> X = (500 - Ligne - 24) / 24
Pour s'arréter pile (pour compléter les dernières cellules n'étant qu'une fraction en dessous de 24) il faudrait une nouvelle variable style "Dif"
Voici une nouvelle version (vite faite pendant mon café !)
Sub Copie24XNet()
depart = InputBox("Entrez la cellule de départ svp", "ADRESSE DE LA 1er CELLULE", A1)
Range(depart).Select
Ligne = Selection.Row
Col = Selection.Column
Table = 500
X = (Table - Ligne - 24) / 24
Max = Application.WorksheetFunction.RoundDown(X, 0)
Dif = Table - 24 - (Max * 24)
Range(Selection, Selection.Offset(23, 0)).Select
Selection.Copy
For Collage = 1 To Max
Cells(Ligne, Col).Select
Selection.Offset(24, 0).Select
ActiveSheet.Paste
Ligne = Ligne + 24
Next Collage
Cells(Ligne, Col).Select
Range(Selection, Selection.Offset(Dif - 1, 0)).Select
Selection.Copy
Selection.Offset(24, 0).Select
ActiveSheet.Paste
MsgBox "Vos 24 lignes ont été copiées " & Max & " de Fois ! Plus " & Dif & " lignes..."
Range(depart).Select
Application.CutCopyMode = False
End Sub
Pour que cette macro ne tourne qu'en colonne A il suffit de :
- Virer => Col = Selection.Column
- Changer => Cells(Ligne, Col).Select |PAR|=> Cells(Ligne, 1).Select
Voilà Fabrice, ce devrait être plus "propre"
Bonne Journée
@+Thierry