Comportement aléatoire de fichiers

Bonjour

J ai une question rapide (celle ci n aura pas être pas de réponse mais je tente..)

Je dispose d un fichier À et d un fichier B

Je copie une feuille de À dans B.

Pour le faire rien de plus simple, j'utilise l'instruction copy before:=

Le problème est le suivant :

Depuis À j ouvre B et j exécute l'instruction précédente de copie d une feuille et ça plante avec une erreur du type automation, l'objet s est déconnecté de ses clients...

Bon.. Par contre quand je me rend manuellement dans B et que je quitte B via un bouton retour qui ferme B avec l instruction workbooks (".. xlsm"). Close savechanges:=true et bien depuis A je peux exécuter cette copie sans aucune erreur.... Et terminer la procédure en fermant B depuis A le fait d aller et de sortir manuellement du classeur B ne provoque pas d erreur de copie de feuille depuis À.

Je précise qu'il n y a aucune protection sur mes, deux classeurs.... Mais la je pige plus rien...

Auriez vous rien qu'une petite idée sur ce chaos ?

En vous remerciant par avance.

Bonjour Rocket, bonjour le forum,

Difficile de te répondre sans voir le code... Quand tu travailles avec deux classeurs, Il te faut spécifier systématiquement le nom du classeur avant de parler d'un onglet ou utiliser des variables. Si depuis À tu ouvres B, tu peux utiliser un code du style :

Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)

Set CS = ThisWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets("Feuil1") 'définit l'onglet source  OS (à adapter à ton cas)
Set CD = Workbooks.Open(xxx) 'définit le classeur destination CD (en l'ouvrant) ou xxx = le chemin et le nom du classeur destination
OS.Copy before:=CD.Worksheets(1) 'copie l'onglet souce du classeur source et le colle avant le premier onglet du classeur destination

Merci pour cette réponse ThauTheme, je vais essayer et vous tenir au courant

J avais dans mon code j avais simplement utilisé l 'instruction :

Workbooks("A. xlsm"). Sheets("nom"). copy Before:=
Workbooks("B. xlsm"). Sheets(1)

bonsoir , test effectués avec votre proposition ...excel a rencontré un probleme et ca plante et tout ferme ...

par contre en faisant un aller et retour sur le classeur de destination (ouverture et fermeture simple ) ...ca marche et aucun message d'erreur , la j'avoue etre depassé par le fait ..je pensais que tout pouvais s'expliquer en vba ...mais là je tombe sur une premiere merci d'avoir répondu ThauThème

Re,

Workbooks("A.xlsm").Sheets("nom").copy Before:=
Workbooks("B.xlsm").Sheets(1)

J'imagine qu'il n'y avait pas les nombreux espaces et qu'il était comme au-dessus... Ce code était parfait puisque les classeurs et les onglets étaient correctement spécifiés. Si tu mets les fichiers en pièce jointe on pourra peut-être trouver le pourquoi du comment....

à force de chercher comme un dingue j'ai fini par trouver une parade , j'ai logé une instruction "malicieuse" dans le thisworkbook pour la fermeture du fichier de destination ce qui rend les choses equivalentes à une manip ouverture fermeture manuelle du coup la procedure de copie de A vers B obéit parfaitement et plus de crash

Bonjour,

il est si top secret que ça ton code pour préférer mettre la poussière sous le tapis au risque qu'elle ressorte un jour ?

Tu ferais mieux de suivre les conseils de TauTheme...

Tu es toujours sur 2010 comme l'indique ton profil ?

eric

bonjour eriiic , oui en fait le fichier comporte des données "un peu sensible " je ne me vois pas le mettre à dispo du forum pour qu'il soit telechargé par quiconque ...

..mais j'ai pu trouver une parade un peu laborieuse ...mais elle marche en vous remerciant quand meme pour votre interet a ce fil

Les données ça s'anonymise facilement...

Et dans ton cas on s'en moque, le code suffit pour voir si qq chose de choquant t'aurait échappé (et la version excel)

Rechercher des sujets similaires à "comportement aleatoire fichiers"