Pb copie tables FormulaLocal

bonjour,

je rencontre une difficulté avec la copie de tables.

Ci-dessous le code, c'est une application test que j'ai faite pour tenter de comprendre ce qui bloque, le blocage est sur l''instruction en dernière ligne: "Erreur execution 424, object requis" . Les lignes qui précédent sont pour aider à la mise au point, elles passent sans problème. L'objectif est de copier les formules du Tableau14 vers Tableau135

Pour simplifier le test, les tableaux sont réduits à 1 colonne, Tableau14: C10:C23 (titre en C9) , Tableau135: J25:J38 (titre en J24).

Contenu Tableau14: en C10: =G10 jusqu'en C23: =G23 .

Contenu souhaité en Tableau135: en J25: =G10 jusqu'en J38: =G23

Merci d'avance pour votre aide

Michel

Bonjour,

il manque le code et/ou le fichier

Bonjour,

Sans grande conviction !...

Cdlt.

3mpostic.xlsm (19.32 Ko)
Public Sub Insert_formulas()
    Range("Tableau14").Cells(1).FormulaR1C1 = "=RC[4]"
    Range("Tableau135").Cells(1).FormulaR1C1 = "=R[-15]C[-3]"
End Sub

Public Sub Clear_data()
    Range("Tableau14").ListObject.DataBodyRange.ClearContents
    Range("Tableau135").ListObject.DataBodyRange.ClearContents
End Sub

Bonjour Jean-Eric,

sans fichier, c'est balèze ! tu dois être devin

la question que je me pose, c'est comment sont faites ces formules ? si elles sont en références tableau structuré je crains qu'elles restent "accrochées" au tableau source

L'objectif est de copier les formules du Tableau14 vers Tableau135

sinon, pour copier je ferais

Range("Tableau14[colonne1]").Copy Destination:=Range("Tableau135[colonne1]")

où colonne1 est le libellé de la première colonne

ou bien
ActiveSheet.ListObjects("Tableau14").ListColumns(1).Range.Copy Destination:=ActiveSheet.ListObjects("Tableau135").ListColumns(1).Range

bonjour,

voici le code, désolé pour le loupé lors de l'envoi (il s'était passé des choses bizarres, je pensais avoir rectifié)

Sub testCopy_table()

MsgBox (Range("c10").FormulaLocal)

ListObjects("Tableau14").Range.Select

ListObjects("Tableau135").Range.Select

ListObjects("Tableau14").DataBodyRange.Copy _

Destination:=ListObjects("Tableau135").DataBodyRange

ListObjects("Tableau14").DataBodyRange.FormulaLocal.Copy _

Destination:=ListObjects("Tableau135").DataBodyRange.FormulaLocal

End Sub

Rappel du descriptif:

Le blocage est sur l''instruction en dernière ligne: "Erreur execution 424, object requis" .

Les lignes qui précédent sont pour aider à la mise au point, elles passent sans problème. L'objectif est de copier les formules du Tableau14 vers Tableau135

Pour simplifier le test, les tableaux sont réduits à 1 colonne, Tableau14: C10:C23 (titre en C9) , Tableau135: J25:J38 (titre en J24).

Contenu Tableau14: en C10: =G10 jusqu'en C23: =G23 .

Contenu souhaité en Tableau135: en J25: =G10 jusqu'en J38: =G23

Ce code vise à créer le tableau 135 comme le "backup" du tableau14: un utilisateur peut après avoir changé qq chose dans le tableau14 demander à revenir à la valeur initiale, c'est là que l'on fera FormulaLocal.Copy de tableau135 vers tableau14.

Merci d'avance pour votre aide, et encore désolé du loupé du message initial.

cordialement

Michel

Merci, c'est un peu plus clair mais ce n'est quand même pas un fichier.

G10 et G23 ne font donc pas partie du tableau. Est-ce qu'il s'agit d'un autre tableau ?

Est-ce que la proposition, de Jean-Eric te convient, il semble avoir bien deviné de quelles formules il s'agissait ... je ne vais pas y travailler si la réponse a été donnée !

Bonjour,

Toujours un peu confus !...

Si on a un tableau14 avec des formules issues de la plage G10:G23, et que l'on sauvegarde tableau14 dans tableau135.

Pour restaurer les données, on doit modifier la plage G10:G23 ?

A te relire.

Cdlt.

Bonjour à tous les 2

A ce stade, un fichier semble nécessaire pour lever le voile sur un certain nombre d'interrogations ...

bonjour,

pour faire suite à vos dernières contributions, ce qui a été posté pour l'instant ne résout pas le problème (ce qui se comprend bien, car ma demande manquait de précision). Voici le fichier joint(j'espère que le système informatique de mon entreprise ne va pas le bloquer, sinon j'y reviendrai ce soir...).

Cordialement

Michel

.....suite de mon message ce matin: je vois que le fichier n'est pas passé, j'imagine bloqué par l'informatique de mon entreprise

=> j'y reviens ce soir depuis mon PC perso.

Cordialement

Avec 2 feuilles, on finit par se mélanger les pinceaux !

Sur Feuil1 (2), ceci marche très bien et recopie les formules (en relatif). Pas besoin de recopier les FormulaLocal

Option Explicit
Sub testCopy_table()
    MsgBox (Range("c10").FormulaLocal) ' pour info seulement
    ListObjects("Tableau14").DataBodyRange.Copy _
        Destination:=ListObjects("Tableau135").DataBodyRange
End Sub

Si tu veux pinter sur les mêmes valeurs, alors il faut mettre les $ dans tes formules initiales.

Du coup, ceci appelé et écrit dans Feuil1 fonctionne bien

Option Explicit
Sub testCopy_table()
    ListObjects("Tableau1").DataBodyRange.Copy _
       Destination:=ListObjects("Tableau13").DataBodyRange
End Sub

Pour ce qui est de ceci :

testcopy

écrit dans un module, l'élément qui te manque est la feuille quand on le lance de Feuil1 (2)

Donc dans ton module, précise la feuille ... Sheets("Feuil1").Select

Option Explicit

Sub copy_table1()
    Sheets("Feuil1").Select
    Range("Tableau1").Select
    Selection.Copy
    Range("E25").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End Sub

J'ai réaffecté les macros aux bons boutons dans les bonnes feuilles ...

Bonjour,

Je n'ai pas ouvert les fichiers, mais ceci devrait faire aussi l'affaire.

Cdlt.

Public Sub Test()
'sans en-tête
Range("Tableau14").Copy Destination:=Range("Tableau135")
'ou
'Range("Tableau135").Value = Range("Tableau14").Value
End Sub

re-bonjour,

je reviens sur le sujet après avoir analysé vos réponses et continuer à explorer de mon côté.

La copie de formules en relatif ne répond pas à mon besoin. J'aurais pu aller vers la solution des $ comme suggéré, mais comme je fais un ajout sur une appli qui contient déjà ce genre de fonction sans les $, je voulais comprendre ce qui m'échappe lorsque je tente de reproduire ce qui semble déjà fonctionner.

Par ailleurs, je réalise que mon fichier avec plusieurs feuilles correspondant à la progression de mes tests n'a pas aidé, je serais à l'avenir plus rigoureux sur la comm dans le forum. J'exécute mes programmes de test en mode débug, je ne passe plus par le bouton.

Du coup, je vous joins une version allégée du fichier, avec juste 1 feuille et pas de bouton, le code est en feuil1.

J'ai trouvé une solution satisfaisante, voir fichier joint, mais je n'ai pas compris pourquoi l' écriture de formule avec Copy Destination fonctionne en copie simple, mais ne fonctionne pas si FormulaLocal. (extraits ci-dessous et code complet dans fichier joint) => si quelqu'un comprend ce qui bloque ça m'intéresse pour info.

ListObjects("Tableau1").DataBodyRange.Copy _

Destination:=ListObjects("Tableau13").DataBodyRange ' ça copie les formules en relatif, OK vu l'instruction.

'ListObjects("Tableau1").DataBodyRange.FormulaLocal.Copy _

Destination:=ListObjects("Tableau13").DataBodyRange.FormulaLocal ' !!!! donne erreur 424 !!!!

ListObjects("Tableau13").DataBodyRange.FormulaLocal = ListObjects("Tableau1").DataBodyRange.FormulaLocal ' c'est OK,

Merci à vous

Cordialement

je n'ai pas compris pourquoi l' écriture de formule avec Copy Destination fonctionne en copie simple, mais ne fonctionne pas si FormulaLocal.

'ListObjects("Tableau1").DataBodyRange.FormulaLocal.Copy _

Destination:=ListObjects("Tableau13").DataBodyRange.FormulaLocal ' !!!! donne erreur 424 !!!!

Copy fonctionne avec une cellule, c'est-à-dire un objet, alors que FormulaLocal n'est pas un objet, c'est un attribut de l'objet cells. Mais copy ....destination possède aussi des méthodes particulières (pastespecial) pour copier ce que l'on souhaite https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.pastespecial

Voilà, il ne faut pas confondre objet, attribut et méthode. La méthode copy s'adresse à des objets comme cellule pas à leurs attributs comme valeur, format etc. , pour cela il faut préciser la méthode pastespecial

merci Steelson,

ta réponse est bien au cœur de ma problématique depuis le début, je vais la relire plusieurs fois et creuser pour apprendre car je ne suis pas familier de ces nuances.

Super pour la réactivité

Cordialement

Michel

Aujourd'hui les langages de programmation sont dits POO, programmation orientée objet, contrairement au Fortran ou au Basic (pour ceux ayant connu l'ORIC par exemple).

Tu trouveras ici un excellent article https://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet#Objet_(attributs_et_m%C3%A9thodes) sur les objets, attributs et méthodes.

En html on parle de DOM Document Object Model.

En ce qui concerne excel : https://docs.microsoft.com/fr-fr/office/vba/language/concepts/getting-started/understanding-objects-properties-methods-and-events mais c'est un peu succinct !

L'un des problèmes que l'on rencontre avec VBA c'est sa relative tolérance : on écrit souvent Range("A1") pour son contenu alors qu'il faudrait écrire Range("A1").Value (et cela occasionne parfois des erreurs dans le scripting.dictionary).

bonjour,

merci pour les explications et liens, je vais pouvoir approfondir ce sujet où je ne suis pas bien à l'aise au départ.

Cordialment

Michel

Rechercher des sujets similaires à "copie tables formulalocal"