XL 2016 Copie de tableaux n fois

ntb

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterai Copier-coller un tableau à côté d'un autre un nombre de fois n, tout en conservant sa mise en forme. J'aimerai que les tableaux que je copie apparaissent à droite du précédent. Lorsque nous cliquons sur le bouton lié à la macro il nous est demandé le nombre de tableaux que l'on souhaiterai avoir en +. En fonction de ce nombr eje souhaiterai également qu'apparaissent le même nombre de tableaux. J'ai essayé de mettre en place une macro mais celle-ci ne fonctionne pas.

Si certains d'entre vous ont des solutions je suis preneuse :)

N'hésitez pas si vous avez des questions

Ci-joint le fichier

Merci ;)
 

Pièces jointes

  • Test-Copie-Tableaux.xlsm
    17.7 KB · Affichages: 15
Solution
Bonjour ntb

Une proposition toute simple a tester :
VB:
Sub NbTableaux()
    Dim n, P As Range, nlig, i
    Dim xCount As Integer
    
    n = Application.InputBox("Nombre de tableaux")
    Set P = Range("B4:D8")
    ncol = P.Columns.Count
    Application.ScreenUpdating = False
    For i = 1 To n - 1
        P.Copy P.Offset(0, i * ncol)
    Next
End Sub

Fred0o

XLDnaute Barbatruc
Bonjour ntb

Une proposition toute simple a tester :
VB:
Sub NbTableaux()
    Dim n, P As Range, nlig, i
    Dim xCount As Integer
    
    n = Application.InputBox("Nombre de tableaux")
    Set P = Range("B4:D8")
    ncol = P.Columns.Count
    Application.ScreenUpdating = False
    For i = 1 To n - 1
        P.Copy P.Offset(0, i * ncol)
    Next
End Sub
 

vgendron

XLDnaute Barbatruc
Hello

avec ce code ca ira mieux
1) il faut déclarer le i comme un long
2) quand on fait un screenupdating = false au début, il ne faut pas oublier de le remettre à true en fin de code
3) le resize a besoin de deux arguments: Ligne et colonnes==> dans ton cas, on ne spécifie pas ligne, MAIS il faut mettre une virgule pour indiquer que l'argument mis correspond à colonne

VB:
Sub NbTableaux()
Dim n, P As Range
Dim nlig, i As Long
Dim xCount As Integer
Application.ScreenUpdating = False
n = Application.InputBox("Nombre de tableaux")
Set P = Range("B4:F9").EntireColumn

ncol = P.Columns.Count


Columns(ncol).Resize(, Columns.Count - ncol).Delete
For i = 1 To n - 1
    P.Copy Destination:=P.Offset(, i * ncol)
Next

Application.ScreenUpdating = True
End Sub
 

ntb

XLDnaute Nouveau
Bonjour ntb

Une proposition toute simple a tester :
VB:
Sub NbTableaux()
    Dim n, P As Range, nlig, i
    Dim xCount As Integer
   
    n = Application.InputBox("Nombre de tableaux")
    Set P = Range("B4:D8")
    ncol = P.Columns.Count
    Application.ScreenUpdating = False
    For i = 1 To n - 1
        P.Copy P.Offset(0, i * ncol)
    Next
End Sub
Super merci ça fonctionne ;)

Des petits détails qui changent tout ahaaa
 

ntb

XLDnaute Nouveau
Hello

avec ce code ca ira mieux
1) il faut déclarer le i comme un long
2) quand on fait un screenupdating = false au début, il ne faut pas oublier de le remettre à true en fin de code
3) le resize a besoin de deux arguments: Ligne et colonnes==> dans ton cas, on ne spécifie pas ligne, MAIS il faut mettre une virgule pour indiquer que l'argument mis correspond à colonne

VB:
Sub NbTableaux()
Dim n, P As Range
Dim nlig, i As Long
Dim xCount As Integer
Application.ScreenUpdating = False
n = Application.InputBox("Nombre de tableaux")
Set P = Range("B4:F9").EntireColumn

ncol = P.Columns.Count


Columns(ncol).Resize(, Columns.Count - ncol).Delete
For i = 1 To n - 1
    P.Copy Destination:=P.Offset(, i * ncol)
Next

Application.ScreenUpdating = True
End Sub
Merci beaucoup pour tes explications, je comprends mieux ;)
 

Discussions similaires