macro copier coller

mix770

XLDnaute Impliqué
Bonjour le forum,

j'ai enregistré une macro pour transférer les données d'un tableau annuel vers les lignes de chaque agent, sur un tableau de saisie de présence. Le principe c'est un tableau RTT annuel qui déverse sur la ligne de l'agent de chaque mois.

Sub copier_coller_2()

Range("C18:AG18").Select 'ligne correspondante janvier
Application.CutCopyMode = False
Selection.Copy

Sheets("JANV CONV").Select
Range("C9").Select ' ligne de l'agent sur le mois de janvier
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select
Range("C19:AF19").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("FEVR CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Tableaux_RTT").Select
Range("A1").Select
End Sub

ce n'est pas très propre, avez vous une idée afin de faire plus court sachant que cette opération est à répéter pour les 12 mois et que j'ai 30 agents sur le tableau.
Merci à vous
:)
merci
 

Modeste

XLDnaute Barbatruc
Re : macro copier coller

Bonjour mix770,

On peut difficilement t'aider de manière efficace, si on n'a aucune idée de la façon dont les choses sont agencées dans ton fichier!

Je sais, tu vas nous dire que tes données sont confidentielles ;) ... Tu as mille fois raison, aussi n'aurions-nous besoin que de données anonymes: Travailleur x nous conviendra autant que Jean-Pascal Philippot et s'il habite rue Machin plutôt qu'avenue de la Gare, 118 (2e étage gauche) à Issy-les-Moulineaux, ça ne changera pas grand chose à la solution proposée :)

Es-tu certain, par ailleurs, qu'une formule ne permettrait pas de faire la même chose?
 

mix770

XLDnaute Impliqué
Re : macro copier coller

Bonjour Modeste,

tu as raison, je te fais une extraction des feuilles du fichier pour une meilleure compréhension, pour la confidentialité on est sauvé apple ne propose pas encore d'appli de géolocalisation croisées des données excel :)), enfin... à ma connaissance.

pour une formule, j'ai essayé mais le tableau contient des macro pour détecter des codes et cela provoque des délires dans les éléments, ( =Tableaux_RTT!C18)
 

Pièces jointes

  • test report rtt.xls
    22 KB · Affichages: 41
  • test report rtt.xls
    22 KB · Affichages: 40
  • test report rtt.xls
    22 KB · Affichages: 43

mix770

XLDnaute Impliqué
Re : macro copier coller

Salut le Forum,
j'ai été jusqu'au bout c'est pas top, mais a marche, je suis sur qu'il y a plus simple et propre
si quelqu'un a une idée
merci à vous

Sub copier_coller_2()
'

Range("C18:AG18").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("JANV CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select

Range("C19:AF19").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("FEVR CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Tableaux_RTT").Select

Range("C20:AF20").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("MARS CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select
Range("C21:AF21").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("AVRIL CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select
Range("C22:AF22").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("MAI CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select
Range("C23:AF23").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("JUIN CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select
Range("C25:AF25").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("JUILLET CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select
Range("C26:AF26").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("AOUT CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


Sheets("Tableaux_RTT").Select
Range("C27:AF27").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("SEPT CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select
Range("C28:AF28").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("OCTO CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


Sheets("Tableaux_RTT").Select
Range("C29:AF29").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("NOVE CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select
Range("C30:AF30").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("DECE CONV").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Tableaux_RTT").Select

Range("A1").Select
End Sub
 

Modeste

XLDnaute Barbatruc
Re : macro copier coller

Re-bonjour mix770,

Quelle impatience! ... Mais si tu continues de chercher, en parallèle, on ne peut pas te le reprocher :D

Il y a des inconnues pour nous: comment sait-on que dans ta feuille "RTT", le travailleur concerné est bien celui qui se nomme "Nom 1", dans les feuilles mensuelles?
Avec la seule feuille de janvier, on ne sait pas comment tu as nommé les autres (avec ton dernier code, on en a une idée plus précise!). Tu as tout intérêt, dans ce type de situation, à utiliser des noms de mois qu'Excel reconnaîtra (je t'ai indiqué en feuille "Mois", les noms de mois abrégés, tels qu'ils apparaissent avec un format personnalisé "mmm"). C'est cette syntaxe qu'il faut utiliser pour nommer tes feuilles (suivi de "_conv") avec le code proposé plus bas.
Dans ta feuille "RTT", le fait que tes mois en colonne A sont divisés en deux séries de six oblige aussi à adapter le code (et donc le compliquer un peu)
Si les infos sont à copier en ligne 5, de chaque feuille, essaie le code ci-dessous, dans un module standard:
VB:
Sub dispatcher()
Application.ScreenUpdating = False
With Sheets("tableaux RTT")
    For mois = 1 To 2 'mettre 12 si toutes les feuilles sont présentes
        ligSrc = Application.Match(Format("1/" & mois, "mmmm"), .[A1:A20], 0)
        dercol = .Cells(ligSrc, 33).End(xlToLeft).Column
        .Cells(ligSrc, 2).Resize(1, dercol - 1).Copy
        Sheets(Format("1/" & mois, "mmm") & "_conv").[C5].PasteSpecial Paste:=xlValues
    Next mois
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Je mets tout de même le fichier en pièce jointe.
 

Pièces jointes

  • test report rtt (mix770).xls
    44 KB · Affichages: 41

mix770

XLDnaute Impliqué
Re : macro copier coller

Re,

un vrai sale gosse gâté,
en fait je suis dans la réflexion et je ne me rend pas compte qu"en fait cela peut apparaitre comme de l'impatience ;-)

sur la feuille RTT, en fait les tableaux sont empilés (1 par agent) chaque ligne envoie sur la ligne du nom de l'agent sur le mois concerné. J'adore excel et les macro, mais je suis toujours dans la titouille ou la bidouille, j'admire quand quelqu’un est capable de construire comme vous le faite sur le forum.
je joins le nouveau fichier avec les tableaux empilés si cela peut t'aider et j'essaie de mon coté, et je te dit quoi :))
merci encore à ti
je te fais un retour
Cdt
 

Pièces jointes

  • test report rtt.xls
    54 KB · Affichages: 42
  • test report rtt.xls
    54 KB · Affichages: 42
  • test report rtt.xls
    54 KB · Affichages: 44

mix770

XLDnaute Impliqué
Re : macro copier coller

Modeste,

j'ai essayé mais je n'y arrive pas, de plus a la construction de l'outil il y a beaucoup de croisement et je ne peux plus changer le nom des onglets sans plomber les formules.
si c'est plus simple de déclencher une macro avec un bouton j’achète, quand la saisie est faite, on clic et cela déverse dans les mois.
merci à toi
cdt
 

Modeste

XLDnaute Barbatruc
Re : macro copier coller

Re,

j'ai essayé mais je n'y arrive pas
... et moi j'essaie, mais c'est toujours plus compliqué si l'exemple de départ ne reflète pas la réalité (les tableaux "empilés"). En même temps, je me doute bien que de ton côté tu ne peux pas imaginer les implications (sinon, tu ferais la macro toi-même, à n'en pas douter).

Je venais déposer une autre proposition ... mais je vois ton dernier message ... et donc j'y retourne dès que j'ai 10 minutes!
 

Modeste

XLDnaute Barbatruc
Re : macro copier coller

Re²,

Je ne suis pas certain que tu aies choisi, au départ, la bonne manière de structurer tes données (les tableaux "empilés", des paquets de cellules fusionnées, des noms de feuilles un peu "particuliers", etc) ... et je ne sais pas pourquoi, mais je pressens que l'idée de refaire ne te tente que très modérément ;)
... Au passage, il y avait 29 jours en février 2014, par chez vous!? :eek:

Avec le dernier fichier transmis et en reprenant les noms de feuilles dans ton dernier code, il me semble que ceci devrait fonctionner. Dans le Array au début du code, vérifie tout de même la cohérence avec tes "vraies" feuilles!
VB:
Sub dispatcher()
    tabMois = Array("JANV CONV", "FEVR CONV", "MARS CONV", "AVRIL CONV", "MAI CONV", "JUIN CONV", "JUILLET CONV", "AOUT CONV", "SEPT CONV", "OCTO CONV", "NOVE CONV", "DECE CONV")
    Application.ScreenUpdating = False
    With Sheets("tableaux RTT")
        For ligEmployé = 4 To .Cells(.Rows.Count, 4).End(xlUp).Row Step 50
            For mois = LBound(tabMois) To UBound(tabMois)
                ligSrc = Application.Match(Format("1/" & mois + 1, "mmmm"), .Cells(ligEmployé + 14, 1).Resize(14, 1), 0) + ligEmployé + 13
                dercol = .Cells(ligSrc, 33).End(xlToLeft).Column
                .Cells(ligSrc, 2).Resize(1, IIf(dercol < 2, 1, dercol - 1)).Copy
                ligCible = Application.Match(.Cells(ligEmployé, 4), Sheets(tabMois(mois)).[A:A], 0)
                Sheets(tabMois(mois)).Cells(ligCible, 3).PasteSpecial Paste:=xlValues
            Next mois
        Next ligEmployé
    End With
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
 

mix770

XLDnaute Impliqué
Re : macro copier coller

Modeste,
merci beaucoup
je regarde pour l'intégrer au tableau, et oui tu as raison cela fait 2 ans que je le retravaille pour le faire évoluer se serai un travail considérable, les tableaux que je fais maintenant je ne fais plus certaines erreurs
je reviens vers toi
cordialement
 

mix770

XLDnaute Impliqué
Re : macro copier coller

Bonjour,

question... le sentiment après la haine c'est quoi ? ...

je pense que tu vas me haïr, je n'y arrive pas, de plus j'avais juste copier les cellules pour que tu comprenne le fonctionnement du tableau. J'ai beau regarder ce qui faudrait bouger dans le VBA je ne vois pas.
si tu n'es pas fâché à mort avec moi j'ai exporté les 2 onglets tu as donc la réalité du tableau sous les yeux.
en espérant avoir été pardonné :))

ci dessous les onglets
merci
Roland
 

Pièces jointes

  • test report rtt_2.xls
    139.5 KB · Affichages: 43

Modeste

XLDnaute Barbatruc
Re : macro copier coller

Bonjour,

Mon pauvre ami, la haine est tellement stérile (même si elle a tendance, de nos jours à se répandre et même à devenir un programme politique chez certains!)

Tu vas me dire que je me répète, mais c'est à ce genre de problème (pas la haine, hein!) que je faisais allusion, hier, en disant que tu n'avais pas choisi la bonne manière de structurer tes données au départ.
Ce que tu as changé (en tout cas, ce que j'ai découvert!):
- les noms, en Feuille RTT sont désormais en colonne 5 (au lieu de 4) et commencent en ligne 3 (au lieu de 4 aussi)
- ta feuille se nomme "TABLEAUX_RTT" ... dans ton code, tu fais référence à TABLEAUX[espace]RTT
- en feuille RTT, les noms des mois sont en colonne B et plus en A

VB:
Sub dispatcher()
     tabMois = Array("JANV CONV", "FEVR CONV", "MARS CONV", "AVRIL CONV", "MAI CONV", "JUIN CONV", "JUILLET CONV", "AOUT CONV", "SEPT CONV", "OCTO CONV", "NOVE CONV", "DECE CONV")
     Application.ScreenUpdating = False
     With Sheets("tableaux_RTT")
         For ligEmployé = 3 To .Cells(.Rows.Count, 4).End(xlUp).Row Step 50
             For mois = LBound(tabMois) To UBound(tabMois)
                 ligSrc = Application.Match(Format("1/" & mois + 1, "mmmm"), .Cells(ligEmployé + 14, 2).Resize(14, 1), 0) + ligEmployé + 13
                 dercol = .Cells(ligSrc, 33).End(xlToLeft).Column
                 .Cells(ligSrc, 3).Resize(1, IIf(dercol < 2, 1, dercol - 1)).Copy
                 ligCible = Application.Match(.Cells(ligEmployé, 5), Sheets(tabMois(mois)).[A:A], 0)
                 Sheets(tabMois(mois)).Cells(ligCible, 3).PasteSpecial Paste:=xlValues
             Next mois
         Next ligEmployé
     End With
     Application.CutCopyMode = False
     Application.ScreenUpdating = True
 End Sub

Pas vraiment le temps de mettre en évidence les modifications apportées au code ... cette fois aussi, ça me semble fonctionner ... pour toi-même, l'exercice de repérer les différences et en comprendre la raison (en lien avec mes trois constats, ci-dessus) serait un bon entraînement.
 

mix770

XLDnaute Impliqué
Re : macro copier coller

Re,
je suis épaté par la capacité d'écrire les codes j'aimerai etre capable d'en faire autant, surtout que cela m’intéresse, j'oserai même dire passionne....

au risque de paraitre bête.. le code tu le mets dans un module ? ensuite il dispatche tout seul ou faut il le lié à un bouton ?

je commence à le poser je te tiens informé
merci à toi
 

Discussions similaires

Réponses
2
Affichages
124
Réponses
5
Affichages
134