Copier des données dans un ordre précis sur des classeurs différents
Bonjour,
Je voudrais savoir s'il était possible de copier une plage de données dans un ordre précis.
J'ai un classeur A qui quand on active une macro qui créé un classeur B en créant des colonnes dans ce classeur. Je voudrais que l'utilisateur sélectionne des lignes du classeur A et que la macro copie automatiquement les données du classeur A dans le classeur B. Hors je n'arrive pas à copier une plage de valeurs avec des valeurs copiées dans un ordre précis. La fonction Union range permet de copier des élément mais dans l'ordre des colonnes.
colonnes du classeur A
| Lieu | Date | Prix (euros) | Taille | Volume | Info | A faire ? |
Le classeur B crée possède ces colonnes
| Lieu | Prix | A faire ? | Taille | Date |
Hors lorsque je copie avec union range des valeurs du classeur A dans le classeur B cela me donne le résultat ci-dessous
| Lieu | Prix | A faire ? | Taille | Date |
| Paris | 08/01/2004 | 35,00 € | 500 | oui |
| Marseille | 06/01/2005 | 64,00 € | 300 | non |
| Brest | 08/06/2003 | 50,00 € | oui |
Comment pourrais je faire ?
Mon code est fonctionnel et est en pièce jointe. il me manque juste à modifier la partie du code permettant de copier les valeurs dans un ordre précis pour les mettre dans les colonnes du deuxième classeur.
J'ai cherché longtemps mais je n'ai rien trouvé, et j'apprécierais vraiment un peu d'aide
Merci d'avance
Tout d'abord merci pour ta réponse.
Le problème est que la taille du tableau du deuxième tableau créer dans le deuxième classeur n'est pas fixe, c'est l'utilisateur qui choisit combien
de ligne il veut avec la variable lg. Bout de code présent dans le excel ci-dessous.
For i = 1 To ChoixDuNombreDeProjetDansLeclasseurB
Windows("ClasseurA").Activate ' on se met sur le classeur A
Dim plg As Range
Dim lg As Integer 'créer un objet lg de type integer ( nombre)
'on demande a l'utilisateur de chosir une case
Set plg = Application.InputBox _
("Sélectionner un projet en cliquant sur la ligne du projet, vous pouvez cliquer n'importe où sur la ligne du projet choisi", , , , , , , 8)
' on selectionne la case choisie
plg.Select
'on donne a la varibale lg le numero de la ligne de la case choisie par ex si plg vaut A3 lg vaudra 3
lg = ActiveCell.Row
'on choisit une plage de donnée ou une plage de cellule que l'on veut sur la ligne de la case choisie
Application.CutCopyMode = False
Set Plage = Union(Range("A" & lg), Range("C" & lg), Range("G" & lg), Range("D" & lg), Range("B" & lg))
Plage.Copy
classeur.Activate
' on colle ensuite les donne copié
Range("A" & i + 1).PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Next i
Vois tu ce que je veux dire ? Est il possible d'adapter facilement ton code à cette contrainte ?
Sinon sans passer par les tableaux existe t'il un moyen de copier des plages de valeurs dans un ordre voulu pour le copier dans un autre classeur ?
Car le premier classeur sera souvent modifier souvent avec des colonnes qui s'ajouteront ou seront supprimées etc
Merci d'avance