Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

jonhdoe1

XLDnaute Nouveau
Bonjour à tous,

Pour un reporting en particulier qui demande beaucoup de copier/coller (donc source d'erreurs) je souhaiterais trouver une macro qui me permettrait rapidement de copier des données d'un fichier source vers un fichier cible.

Afin de faciliter la compréhension de ma problématique j'ai joint un petit fichier excel qui illustre ce que je cherche à obtenir.

Pour cet exemple je n'ai copié que les données de Janvier à Mars.

Bref voici ce que je n'arrive pas à traduire en langage VBA:

1. Les colonnes cibles => en gris sur l'onglet cible
2. Une boucle pour chaque bloc d'éléments => l'arrêt de la boucle se fera quand on passe au mois suivant
3. Copie de la plage de données sélectionnées (en gris) grâce à la boucle
4. Coller sur la feuille "cible" les uns à la suite des autres => les montants qui sont décalés d'une colonne lorsqu'on passe au mois suivant doivent être sur la colonne H dans la cible.

Problème, c'est que j'ai un peu de mal à traduire tout ça en code vba... je bloque notamment sur le fait de mettre tous les montants de tous les mois de la source (Janvier colonne S, Février colonne T, Mars colonne U, etc... sur la colonne H de l'onglet cible.

Plutôt que de vous mettre du code farfelu, je vous ai juste mis le fichier xls pour exemple avec la source et la cible (Janvier à Mars). La cible étant le résultat que je cherche à obtenir.

J'espère n'avoir pas trop été brouillon sinon je suis disponible pour en discuter.

Merci bcp de votre aide,

John.
 

Pièces jointes

  • Macros.xlsm
    226.9 KB · Affichages: 70
  • Macros.xlsm
    226.9 KB · Affichages: 73
  • Macros.xlsm
    226.9 KB · Affichages: 71

Yohan

XLDnaute Occasionnel
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

salut cela te convient-il pour le coup c'est u peu barbare comme écriture mais bon ???
 

Pièces jointes

  • Macros.xlsm
    232.6 KB · Affichages: 103
  • Macros.xlsm
    232.6 KB · Affichages: 106
  • Macros.xlsm
    232.6 KB · Affichages: 80

job75

XLDnaute Barbatruc
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

Bonjour jonhdoe1, bienvenue sur XLD, salut Yohan,

Dans le fichier joint j'ai mis 4 feuilles cibles, une par trimestre.

Cette macro est à placer dans le ThisWorkbook :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If UBound(Split(Sh.Name, " à ")) <> 1 Then Exit Sub
Dim F As Worksheet, n&, colaux As Range, r As Range, a
Application.ScreenUpdating = False
Sh.Rows("2:" & Sh.Rows.Count).Delete 'RAZ
Set F = Sheets("Source " & Right(Sh.Name, 4)) 'feuille source
n = Month("1 " & Split(Sh.Name, " à ")(0)) '1er mois du trimestre
Set colaux = F.UsedRange.Columns(F.UsedRange.Columns.Count + 1).Cells
colaux.FormulaR1C1 = "=LN(AND(RC18<>"""",MONTH(RC18)>=" & n & ",MONTH(RC18)<" & n + 3 & "))"
If Application.CountIf(colaux, 0) Then
  Set r = colaux.SpecialCells(xlCellTypeFormulas, 1) 'cellules filtrées
  '---copie des colonnes (S pour le format) ---
  a = Array("D", "A", "J", "K", "C", "R", "S") 'colonnes sources
  For n = 0 To UBound(a)
    Intersect(r.EntireRow, F.Columns(a(n))).Copy Sh.Cells(2, n + 2)
  Next
  Intersect(r.EntireRow, F.[AH:AH]).Copy Sh.[L2]
  Intersect(r.EntireRow, F.[G:G]).Copy Sh.[M2]
  '---remplissage de la colonne H---
  colaux.FormulaR1C1 = "=SUM(RC19:RC30)"
  colaux = colaux.Value
  r.Copy colaux(1, 2)
  Sh.Cells(2, "H").Resize(r.Count) = colaux(1, 2).Resize(r.Count).Value
End If
colaux.Resize(, 2).EntireColumn.Delete
End Sub
La macro s'exécute quand on active une feuille.

Nota 1 : les dates en colonne R de la feuille source peuvent être dans n'importe quel ordre.

Nota 2 : la colonne auxiliaire colaux est utilisée pour 2 formules.

Edit : j'avais oublié les colonnes Code (AH) et Product Line (G)

A+
 

Pièces jointes

  • Copie des trimestres(1).xlsm
    212.2 KB · Affichages: 257
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

Bonjour le fil, le forum,

Dans les feuilles cibles je suppose que les colonnes en jaune A I J K sont destinées à recevoir des formules.

Il ne sera pas difficile de les entrer, par exemple pour la colonne A :

Code:
Sh.[A2].Resize(r.Count).FormulaR1C1 = "=XXXXXXX" 'la formule
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

Bonjour jonhdoe1, le forum,

Il faut savoir que sur de très grands tableaux il peut y avoir des problèmes si les plages à copier sont constituées d'un grand nombre de zones disjointes.

Dans ce cas il faut procéder à un tri préalable pour regrouper les dates.

En fin de traitement l'ordre initial est rétabli :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If UBound(Split(Sh.Name, " à ")) <> 1 Then Exit Sub
Dim F As Worksheet, n&, colaux1 As Range, colaux2 As Range, r As Range, a
Application.ScreenUpdating = False
Sh.Rows("2:" & Sh.Rows.Count).Delete 'RAZ
Set F = Sheets("Source " & Right(Sh.Name, 4)) 'feuille source
n = Month("1 " & Split(Sh.Name, " à ")(0)) '1er mois du trimestre
Set colaux1 = F.UsedRange.Columns(F.UsedRange.Columns.Count + 1).Cells
colaux1(1) = 1: colaux1.DataSeries 'numérotation des lignes
F.UsedRange.Sort F.[R1], xlAscending 'tri ascendant sur les dates
Set colaux2 = colaux1.Offset(, 1)
colaux2.FormulaR1C1 = "=LN(AND(RC18<>"""",MONTH(RC18)>=" & n & ",MONTH(RC18)<" & n + 3 & "))"
If Application.CountIf(colaux2, 0) Then
  Set r = colaux2.SpecialCells(xlCellTypeFormulas, 1) 'cellules filtrées
  '---copie des colonnes (S pour le format) ---
  a = Array("D", "A", "J", "K", "C", "R", "S") 'colonnes sources
  For n = 0 To UBound(a)
    Intersect(r.EntireRow, F.Columns(a(n))).Copy Sh.Cells(2, n + 2)
  Next
  Intersect(r.EntireRow, F.[AH:AH]).Copy Sh.[L2]
  Intersect(r.EntireRow, F.[G:G]).Copy Sh.[M2]
  '---remplissage de la colonne H---
  colaux2.FormulaR1C1 = "=SUM(RC19:RC30)"
  colaux2 = colaux2.Value
  r.Copy colaux2(1, 2)
  Sh.Cells(2, "H").Resize(r.Count) = colaux2(1, 2).Resize(r.Count).Value
End If
colaux2.Resize(, 2).EntireColumn.Delete
F.UsedRange.Sort colaux1 'rétablit l'ordre initial
colaux1.EntireColumn.Delete
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Copie des trimestres avec tris(1).xlsm
    213.1 KB · Affichages: 51
Dernière édition:

jonhdoe1

XLDnaute Nouveau
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

salut cela te convient-il pour le coup c'est u peu barbare comme écriture mais bon ???

Bonjour Yohan, Job75, Le forum,

Désolé de répondre un peu tard (malade) mais merci pour à vous pour votre aide c'est génial.

Etant donné mon niveau total débutant j'aurais souhaité avoir des commentaires pour m'aider dans ma compréhension si çà ne vous gêne pas.

Yohan, c'est un détail mais sur le fichier que tu as renvoyé la 2ème ligne est vide et les données sont remplies à partir de la 3ème ligne. Comment faire pour remplir les données dès la 2ème ligne?

Job75, l'idée de spliter le tableau en trimestre est bonne mais j'ai besoin d'une cible unique car je souhaite répéter cette action de plusiers onglets sources vers un seul onglet cible.

J'ai joint un exemple pour illustrer avec 2 sources et 1 cible. (j'ai dû effacer des données du 1er fichier afin de pouvoir uploader).

La question est: Est ce possible de faire ce copier de plusieurs onglets vers un seul onglet cible?

Si oui comment faire pour sélectionner des mois en particulier (Par exemple Janvier). Et ensuite les copier dans la cible?

J'espère que j'ai pas été trop brouillon dans mon explication.

Merci encore et à bientôt.

Julien
 

Pièces jointes

  • Macros test-2.zip
    100.8 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

Bonjour jonhdoe1, le forum,

Il est parfaitement incohérent d'avoir 2 feuilles sources.

Regardons bien le fichier.

Les colonnes A à J et N de la feuille Source(Closed Jan à Mars) sont strictement identiques aux colonnes I à R et V de la feuille Source (Active Jan à Mars).

Mais a priori rien n'empêche qu'elles soient modifiées dans une feuille et pas dans l'autre.

Que pourra-t-on faire pour les colonnes D E G L de la feuille Cible s'il y a la moindre différence (surtout sur "Close Date") ?

Je ne vous suivrai pas dans cette incohérence, désolé

A+
 

jonhdoe1

XLDnaute Nouveau
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

Bonjour le Forum, Bonjour Job75,

Effectivement c'est une erreur de ma part. Comme je l'ai expliqué j'ai dû effacer des lignes pour "aminicir" mon fichier et j'ai dû me tromper en supprimant des colonnes.

Les 2 fichiers sources sont identiques.

Ce que je recherche c'est:
1. copier/coller les données de la première source dans la cible (Pas de problème de ce côté).
2.Et ensuite copier/coller dans la cible les données de la deuxième source à la suite des premières.

(Je renvoie une version corrigée du fichier posté hier ainsi que la macro de l'étape 1.).

Pour autant avoir deux cibles n'est pas incohérent car en faisant des recherches j'ai trouvé un post où c'était possible mais j'ai du mal à l'appliquer sur la macro du fichier. Le lien est ci dessous avec tous les détails:

https://www.excel-downloads.com/threads/probleme-de-copier-coller-et-donglets.69900/

Merci à tous pour votre aide.
 

Pièces jointes

  • Macros test-2.xlsm
    119 KB · Affichages: 103

job75

XLDnaute Barbatruc
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

Re,

Vous voulez des suggestions ? Alors créez une seule feuille source.

Seules les valeurs des colonnes janv-13 févr-13 mars-13 étant différentes dans les 2 feuilles sources, faites 2 colonnes pour chacun de ces mois dans la nouvelle feuille source.

Dans la feuille Cible il faudra aussi dédoubler les colonnes Sales.

A+
 

jonhdoe1

XLDnaute Nouveau
Re : Macro pour copier/coller montants de plusieurs colonnes sur une colonne cible

Merci Job75 mais ce n'est pas ce que je recherche.

Ce que je veux faire: copier/coller des données de mes 2 onglets dans un seul. Mais l'un à la suite de l'autre.

Le post ci dessous prouve que c'est possible.

https://www.excel-downloads.com/thr...et-meme-si-pas-meme-nombre-de-donnees.190059/

Du coup j'apprécierai vraiment si quelqu'un avait d'autres idées.

Merci à tous
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 864
dernier inscrit
abderrashmaen