Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 copier coller des colonnes en fonction de la valeur d'une cellule

Faroyo

XLDnaute Junior
Bonjour,

j'aimerai savoir s'il était possible de façon simple, de copier/coller des colonnes autant de fois que la valeur saisie dans une cellule.
Je m'explique. Dans mon fichier, j'ai deux onglets.
Onglet A, je rentre dans la cellule B1, le nombre de saisie que je vais devoir faire.
Onglet B, feuille contenant les saisies. Cette feuille devrait ou devra contenir autant de tableaux (A1:B9) que la valeur B1 de l'onglet A .
(A1:B9) = tableau de référence. Chaque nouveau tableau sera séparé par une colonne vide

En resume, si Onglet A, B1 = 2, Onglet B = 2 tableau. Si B1 = 4 alors 4 tableau dans Onglet B et ainsi de suite.

Merci pour votre aide

Faroyo
 

Pièces jointes

  • test.xlsx
    11.3 KB · Affichages: 5
Solution
avec ceci
VB:
Sub copietab()

With Sheets("A") 'dans la feuille A
    NbTab = .Range("B1") 'on récupère le nombre de tableaux à créer
End With
If Not IsNumeric(NbTab) Or NbTab = "" Then Exit Sub 'si c'est vide ou pas numérique, on quitte pour éviter des erreur

With Sheets("B") 'dans la feuille B
    Set tablo = .Range("A1:B9") 'on définit la zone qui contient le tableau à copier
    .UsedRange.Offset(, 2).Clear 'usedrange, c'est TOUTE la zone de la feuille qui contient quelque chose: des valeurs, des mises en formes..... offset(,2) pour ne pas effacer les deux premières colonnes
    
    For i = 1 To NbTab
        LastCol = .UsedRange.Columns.Count + 2 'dernière colonne utilisée + 2 pour le décalage
        tablo.Copy...

Faroyo

XLDnaute Junior
C'est tout simple top. Exactement ce qu'il me faut.
Un grand merci vgendron pour votre efficacité.
Une très bonne journée.

Faroyo
Une derrière petite question, y a t'il un moyen d'effacer les colonnes ajoutées avant l’exécution du copier/coller. J'ai ajouté une ligne mais cela ne fonctionne pas à tous les coups.

Merci


VB:
With Sheets("B")

[B][COLOR=rgb(250, 197, 28)]Columns("D:VZ").Delete[/COLOR][/B]

    Set tablo = .Range("A1:B9")
 

vgendron

XLDnaute Barbatruc
avec ceci
VB:
Sub copietab()

With Sheets("A") 'dans la feuille A
    NbTab = .Range("B1") 'on récupère le nombre de tableaux à créer
End With
If Not IsNumeric(NbTab) Or NbTab = "" Then Exit Sub 'si c'est vide ou pas numérique, on quitte pour éviter des erreur

With Sheets("B") 'dans la feuille B
    Set tablo = .Range("A1:B9") 'on définit la zone qui contient le tableau à copier
    .UsedRange.Offset(, 2).Clear 'usedrange, c'est TOUTE la zone de la feuille qui contient quelque chose: des valeurs, des mises en formes..... offset(,2) pour ne pas effacer les deux premières colonnes
    
    For i = 1 To NbTab
        LastCol = .UsedRange.Columns.Count + 2 'dernière colonne utilisée + 2 pour le décalage
        tablo.Copy Destination:=.Cells(1, LastCol)
    Next i
    .Activate
End With
End Sub
 

loloboc

XLDnaute Nouveau
Supporter XLD
bonjour, je me lance pour la toute première fois dans les macros et je dois recopier mon tableau non pas dans la feuille B, mais dans les colonnes suivantes, en laissant une colonne vide entre chaque tableau, comment faire svp ?
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…