Bonjour à toutes et à tous,
Dans une feuille de calcul j'ai un premier TS qui est nommé t_Recap et qui est la source des données.
Dans une deuxième feuille j'ai un deuxième TS qui est nommé t_Import et qui est la destination.
t_Import comporte moins de colonnes que t_Recap, ils ont en communs les colonnes suivantes :
t_Recap (A) = t_Import (A) - Code agent
t_Recap (B) = t_Import (B) - NOM Prénom
t_Recap (C) = t_Import (C) - Date
t_Recap (J) = t_Import (D) - Total heures matin
t_Recap (K) = t_Import (E) - Total heures après-midi
t_Recap (L) = t_Import (F) - Total heures soir
t_Recap (M) = t_Import (G) - Total heures jour
t_Recap (N) = t_Import (H) - Total heures Sup
t_Recap (O) = t_Import (I) - Nbre de plages
t_Recap (P) = t_Import (J) - Commentaires
J'ai fait la macro suivante avec l'enregistreur de macros mais elle ne fonctionne que pour la ligne 2.
Ce que je souhaite mettre en place avec votre aide, c'est une macro qui me copie à partit du TS source et colle les données dans le TS destination à partir de la ligne 2 et jusqu'à la fin du TS et seulement les colonnes définies ci-dessus.
Pourriez-vous m'aider à mettre ça en place s'il vous plaît ?
Je vous en remercie par avance
Ensuite, je mettrai en place un code pour imprimer le TS t_Import.
VB:
Sub CopierColler()
'
' CopierColler Macro
Range("A2:C2,J2:P2").Select
Range("t_Recap[TOTAL Heures matin]").Activate
Selection.Copy
Sheets("Imp_Pointage").Select
Range("t_Import[Code agent]").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Sub CopierColler()
If Not [t_Import].ListObject.DataBodyRange Is Nothing Then [t_Import].Delete
Intersect([t_Recap], [t_Recap].Parent.Range("A:C,J:P")).Copy [t_Import].Cells(1)
End Sub
On constate que les formules sont remplacées par leurs valeurs.
Alors autant pousser "la logique" jusqu'au bout ...
Pourquoi faire un TS autant s'en passer et faire une macro "ordinaire"
Perso un TS est fait pour s'affranchir de sa position sur la feuille et quelque soit la feuille sur laquelle le TS se trouve.
(Je n'ai pas parlé de l'ordre des colonnes mais bien de la position sur la feuille)
Je supprime les données du tableau source car une fois édité il n'a plus lieu d'être.
Les colonnes D à I servent de contrôle mais n'ont aucune importante pour l'édition de la feuille.
Perso
Pour moi une macro écrites pour un TS devrait fonctionner si tu déplaces les TS
Le code de la version 15b ne remplit pas ses conditions.
Le code ne copie pas les infos si tu déplaces les TS de chaque feuille car le code n'est pas écrit complètement pour un TS
Faire ce test avec toutes les solutions que l'on ta proposé : Déplace ou tu veux les 2 TS y compris sur une autre feuille et lance la macro de toutes les différentes versions que l'on ta proposé !!!!
Tu verras bien les macros qui sont écrites 100% pour des TS
Alors autant pousser "la logique" jusqu'au bout ...
Pourquoi faire un TS autant s'en passer et faire une macro "ordinaire"
Perso un TS est fait pour s'affranchir de sa position sur la feuille et quelque soit la feuille sur laquelle le TS se trouve.
(Je n'ai pas parlé de l'ordre des colonnes mais bien de la position sur la feuille)
Peut être mais n’empêche que le code de ton fichier 15b n'est pas un code complètement écrit pour un TS maintenant si cela te vas moi aussi et je maintiens mes propos de mes différents post que je te laisse relire .....
TFB essaye ceci sur les différentes versions post # 2,4,8,9,10,11,12 et suivant (je me suis arrêté à la 1ere page) mais évidement on peut faire les pages suivantes
Faire ce test avec toutes les solutions que l'on ta proposé : Déplace ou tu veux les 2 TS y compris sur une autre feuille et lance la macro de toutes les différentes versions que l'on ta proposé !!!!
Je précise que déplacer veut aussi dire déplacer en "latéral" en clair mets les différents TS n'importe ou au milieu de la feuille (colonne A ou Z ou ZZ.... et ligne 1 ou 10 ou 100 ....)
Bah pour compléter mon post #31, si l'on tient à pouvoir déplacer le tableau source on utilisera :
VB:
Sub CopierColler()
If Not [t_Import].ListObject.DataBodyRange Is Nothing Then [t_Import].Delete
With [t_Recap]
Union(.Columns("A:C"), .Columns("J:P")).Copy [t_Import].Cells(1)
If Not .ListObject.DataBodyRange Is Nothing Then .Delete
End With
End Sub