Copier données d'une feuille et coller dans un tableau via bouton macro

Bonjour,

je souhaiterais copier les données d'une feuille d'un classeur pour les coller dans un tableau d'un autre classeur.

Mon soucis c'est que le presse papier ne conserve pas les données le temps de coller.

Comment je pourrais mettre ces données dans une variable pour les coller dans le tableau.

J'ai essayé avec variable mais les données se colle que dans une cellule du tableau.

Je bloque un peu

Merci

Sub Pourdebon_coller()

Range("Tableau_pourdebon").ListObject.DataBodyRange.Delete

On Error Resume Next

Range("Tableau_pourdebon[Date de création]").Select
ActiveSheet.Paste

If Err > 0 Then

Application.GoTo [A6], True
MsgBox ("Copier la commande !")

End If

On Error GoTo 0

End Sub

Bonjour,

C'est compliqué car ça manque d'infos mais il y a plein de façons de faire. Pour rester sur votre code pour l'instant, je pense que c'est la suppression du tableau qui annule le mode copier coller :

Sub Pourdebon_coller()

Range("Tableau_pourdebon").Delete
'ICI COPIER
Range("Tableau_pourdebon[Date de création]").Paste

End Sub

Il faut mettre la ligne de copie au bon endroit.

Cdlt,

Bonjour Fabrice, bonjour le forum,

Peut-être comme ça (à adapter) :

Sub Pourdebon_coller()
Dim OT As Worksheet 'déclare la variable OT (Onglet du Tableau)
Dim OD As Worksheet 'déclare la variable OT (Onglet de la Date)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)

Set OT = Worksheets("Feuil1") 'définit l'onglet OT (à adapter à ton cas)
Set OD = Worksheets("Feuil2") 'définit l'onglet OD (à adapter à ton cas)
Set TS = OT.ListObjects("Tableau_pourdebon") 'définit le tableau structuré TS
TS.DataBodyRange.Delete 'efface les données du tableau structuré
On Error Resume Next 'qu'est ce qui pourrait provoquer une erreur ?
'renvoie la valeur de la cellule A1 (à adapter à ton cas) de l'onglet OD dans la colonne "Date de création" de TS
Range("Tableau_pourdebon[Date de création]").Value = OD.Range("A1").Value
If Err > 0 Then
    Application.GoTo [A6], True
    MsgBox ("Copier la commande !")
End If
On Error GoTo 0
End Sub

Bonsoir,

merci pour vos réponses.

Effectivement je n'ai pas mi assez d'info.

En fait mon rituel est de télécharger un fichier "Orders-1" afin de récupérer des commandes à traiter pour le travail. (Commence toujours par orders et un chiffre -nombre de téléchargements-)

Jusqu’à présent je copie et colle manuellement.

J'aimerai simplifier un peu le process avec un bouton pour coller ce fichier dans le tableau du fichier "monfichier".

Même s'il faut toujours le copier manuellement. Quoique si il était possible d'importer des donnés d'un classeur ouvert qui commence toujours par le même mot, je suis preneur)

Une fois dans ce tableau, je le travaille avec power query pour le trier à ma sauce.

Et c'est la que je peine avec le presse papier qui se vide dès que j’exécute une macro avant.

8orders.xlsx (113.88 Ko)
9monfichier.xlsx (17.48 Ko)

Bonjour,

Voici un essai de code qui ne fonctionne que sur le premier fichier "orders" (qui doit être fermé !) trouvé dans les téléchargements. Il est renommé une fois le collage effectué. S'il y a plusieurs fichiers à traiter, il faut relancer la macro.

Les données sont donc collées en valeur à la suite du "Tableau_pourdebon".

Sub test()

sdossier = environ("USERPROFILE") & "\Downloads\" 'emplacement
sfichier = dir(sdossier & "orders*.xls*") 'récup nom fichier d'après modèle
snewname = sdossier & format(Now, "YYMMDD HHMM") & " traité " & sfichier 'prepa nouveau nom

'test de l'existence - sortie avec message ou affectation du nom exact (du 1er fichier correspondant)
if sfichier = "" then
    msgbox "fichier introuvable": exit sub
else
    sfichier =  sdossier & sfichier
end if

'fichier orders : ouverture - récupération valeurs sauf en-têtes - fermeture
with workbooks.open(sfichier)
    with .sheets(1).usedrange
        t = .offset(1, 0).resize(.rows.count - 1, .columns.count)
    end with
    .close true
end with

'fichier principal : collage en 1ere ligne non vide du tableau
with thisworkbook.sheets("pour_de_bon").range("Tableau_pourdebon")
    nvl = .rows.count - application.countblank(.columns(1)) + 1
    .cells(nvl, 1).resize(ubound(t), ubound(t, 2)) = t
end with

name sfichier as snewname 'fichier renommé

end sub

Cdlt,

Bonjour,

ce code fonctionne impeccablement, c'est même plus que ce que j'attendais.

Merci

Lors du renommage du fichier, peut on le placer dans le même dossier source "download", pour le moment il s'entregistre dans "Documents" ?

Et j'ai voulu le renommer avec l'heure car si je le télécharge plusieurs fois dans la journée, le code bug vu qu'un dossier déjà transformé porte le même nom.

Mais je me retrouve avec 00 00 au lieu de l'heure.

snewname = Format(Date, "dd-mm-yyyy hh-mm") & " traité " & sfichier 'prepa nouveau nom

Merci encore pour l'aide

Bonjour toutes et tous

coucous: 3GB et Thauthème

@Fabrice0501

les deux petits points ': ' à tester

snewname = Format(Date, "dd-mm-yyyy hh:mm") & " traité " & sfichier 'prepa nouveau nom

crdlt,

André

Bonjour à tous,

Oui, ajouter l'heure est une très bonne idée ! Merci André d'être intervenu .

Pour le dossier, c'est un oubli de ma part. Je vais éditer le code en y modifiant cette ligne :

snewname = sdossier & format(date, "YYMMDD HHMM") & " traité " & sfichier 'prepa nouveau nom

Je laisse en général l'année devant pour avoir un tri chrono automatique.

Cdlt,

Bonsoir,

merci pour vos réponses.

Le fichier s'enregistre bien dans le même fichier.

En ce qui concerne l'heure, j'ai remplacé "date" par "Now"

snewname = sdossier & format(Now, "YYMMDD HHMM") & " traité " & sfichier 'prepa nouveau nom

Merci , problème résolu

Bonjour toutes et tous,

Merci du retour Fabrice0501, bien vu ^^

crdlt,

André

Rechercher des sujets similaires à "copier donnees feuille coller tableau via bouton macro"