Copies multiple

Bonjour à tous,

J'ai un classeur avec une Feuil1 dans laquelle se trouve des données sur 2 colonnes et 483 lignes (entête non comprises) , chacun de ces couples de données sont uniques.

Je cherche un moyen (macro, power query, etc..) pour faire en sorte de copier chacun de ces couples 180 fois sur la Feuil2 . Ma Feuil2 aurait donc 86940 lignes et 2 colonnes, et se présenterait de la manière suivante :

COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.2Ville 1
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.2Ville 1
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.2Ville 1
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.2Ville 1
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.2Ville 1
…... X 180…... X 180
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.3Ville 2
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.3Ville 2
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.3Ville 2
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.3Ville 2
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.3Ville 2
COMPANY > COMPANY.1 > COMPANY.1.1 > COMPANY.1.1.1 > COMPANY.1.1.1.3Ville 2
…... X 180…... X 180

J'ai réussi à créer une macro pour le faire pour la 1ère occurrence, mais je n'arrive pas à répéter l'opération 483 fois.

Vous trouverez le fichier concerné en PJ.

Merci d'avance pour votre aide,

Damien

12aide.xlsm (23.21 Ko)

Bonsoir,

Si j'ai bien compris, je ferais qqch du genre :

Public Sub COPIER_COLLER_PLS_FOIS()
Dim a&, e&, o&, aa As Variant, x$

With Sheets("Feuil1")
aa = .Cells(1, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, .Cells(1, .Columns.Count).End(xlToLeft).Column)
End With

With Sheets("Feuil2")
o = 1
    For a = 2 To UBound(aa)
    x = aa(a, 1)
        For e = o To o + 179
            .Cells(e, 1) = x
        Next e
        o = e
    Next a
End With
End Sub

A plus tard !

Bonjour,

Avec Power Query, donc sans macro.

Dans le fichier joint, pour des soucis de taille du fichier généré, je n'ai dupliqué que 2 fois.

J'ai transformé ta plage en Tableau Structuré (ici, nommé Tableau2)

En modifiant la requête comme ceci :

- Sélectionne une cellule du tableau généré, Clic Droit/Table/Modifier la requête

- Dans la première opération nommée Source, tu as cette fonction :

= Table.Repeat( Excel.CurrentWorkbook(){[Name="TABLEAU2"]}[Content],2)

Tu remplaces le 2 de la fin par 180, puis dans le ruban "Accueil", tu cliques sur "Fermer et Charger", et tu obtiens tes 86940 lignes

Bon courage

Hello !

Super merci beaucoup c'est parfait !

Est-il possible que tu m'explique un peu comment fonctionne cette macro avec 2 ou 3 commentaires ?

Merci d'avance :)

Damien

Re-,

Je crois que tu t'es trompé...

Tu as validé sur ma réponse, tout en demandant des explications sur la macro de "Le Drosophile"

Hello,

Pour les explications du code :

Dim a&            'Pour déclarer un nombre "long"
Dim e&
Dim o&
Dim aa As Variant    'Je m'en sers pour déclarer un tableau
Dim x$             'Pour déclarer une valeur texte
With Sheets("Feuil1")
aa = .Cells(1, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, .Cells(1, .Columns.Count).End(xlToLeft).Column)
'Je déclare le tableau aa qui part de la cellule A1 et qui est redimensionné jusqu'à la dernière ligne et la dernière colonne
'Dernière ligne: .Cells(.Rows.Count, 1).End(xlUp).Row
' Dernière colonne: .Cells(1, .Columns.Count).End(xlToLeft).Column
'Et vue que je précise "with feuil1" j'ai plus besoin d'indiquer la feuille pour délimiter le tableau
End With

With Sheets("Feuil2")
o = 1
    For a = 2 To UBound(aa)    'de la ligne 2 à la dernière ligne du tableau aa
    x = aa(a, 1)                ' j'enregistre la valeur du tableau dans la variable x (qui va changer à chaque fois que "a" change de valeur)
        For e = o To o + 179      ' o est = a 1 au départ, puis prend la valeur de e pour additionner les 180 lignes à chaque fois
            .Cells(e, 1) = x      
        Next e
        o = e
    Next a
End With
End Sub

Re -

Oui effectivement, je n'avais pas vu ta réponse, j'ai cliqué sans faire attention.

Ta solution a l'air aussi géniale ! Mais je n'arrive pas à la reproduire, je n'ai que ces options dans "table" :

image

ai-je loupé une étape ?

Bien à toi,

Damien

Re-,

Ou sinon, dans mon fichier, tu sélectionnes la cellule G2, et dans le ruban "Requête", tu cliques sur "Modifier" :

image

Re-,

J'avais pas fait attention à :

.....Mais je n'arrive pas à la reproduire...

Dans ton fichier original :

- Tu sélectionnes la première cellule de ta plage (A1, peut-être?)

- Tu fais "Insertion/Tableau" - Par défaut, Excel va le nommer "Tableau1" (il n'est généralement pas conseillé de garder ce type de nommage, vaut mieux le renommer par "T_Villes"), par exemple :

image

- Puis, dans le ruban "Données", tu cliques sur "A partir de Tableau ou d'une plage"

image

L'éditeur Power Query va s'ouvrir, et tu auras ceci :

image

Tu supprimes à droite "Type modifié", et dans "Source", tu remplaces par la fonction que j'ai mise dans ma 1ère réponse (en faisant bien attention au nom du Tableau)

Si tu n'y arrives pas, n'hésite pas

Re Cousin Hub,

Merci de ces détails, j'ai parfaitement compris.

Cependant dans ton fichier, les chemins similaires s'affichent à la suite :

image

tandis que dans le mien ils s'affichent par paquets de 180 à la suite...

Peux-tu m'expliquer comment réaliser cette manip de tri ?

Merci d'avance

Re le drosophile ,

Merci de ton détail, c'est très clair ! :)

Cependant ta macro semble copier uniquement la colonne A. Est-il possible de copier la colonne B de la même manière ?

Merci d'avance,

Re-,

Dans mon fichier fourni, il y a une étape supplémentaire, le tri... (à faire comme sous Excel)

Regarde lorsque tu es dans l'éditeur PQ

Salut,

Pour copier la colonne 2, tu peux faire la même chose, en ajoutant une variable pour enregistrer la seconde colonne et l'appliquer à la nouvelle feuille.

Au-delà de deux ou trois colonnes, il peut être plus intéressant de passer par un tableau et de le split sur le nombre de colonne souhaité.

Dans ton cas je ferais quelque chose comme ça :

Public Sub COPIER_COLLER_PLS_FOIS()
Dim a&, e&, o&, aa As Variant, x$, x1$

With Sheets("Feuil1")
aa = .Cells(1, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, .Cells(1, .Columns.Count).End(xlToLeft).Column)
End With

With Sheets("Feuil2")
o = 1
    For a = 2 To UBound(aa)
    x = aa(a, 1): x1 = aa(a, 2)
        For e = o To o + 179
            .Cells(e, 1) = x: .Cells(e, 2) = x1
        Next e
        o = e
    Next a
End With
End Sub

Bonne journée !

Salut,

Merci à vous deux, les deux solutions sont parfaitement viables ! :)

Bonne journée

Rechercher des sujets similaires à "copies multiple"