Bonjour à tous !
Essayant depuis hier d'automatiser le transfert de données d'un classeur vers un autre (le premier est généré automatiquement par un logiciel de mesure, le second a un format bien défini qui permet une fois envoyé à un système de cartographie de rajouter les informations du tableau sur la carte).
Le bouton qui active la macro en question est situé dans le second classeur sur la page "TraitementJournalier" qui une fois activé demande à l'utilisateur de saisir la première ligne qu'il souhaite remplir (les données étant classé par date, on les ajoute à la suite ligne par ligne, chaque ligne correspondant à une date), et ensuite de sélectionner le classeur d'où il souhaite récupérer les données , qui seront donc en théorie ajouté à la suite des précédentes (ou écrasées si l'utilisateur a choisi de remplir en premier une ligne déjà remplie). Le classeur contenant d'office les données collectées dispose du même modèle à chaque fois.
J'ai remarqué que si je choisi un fichier Excel n'ayant jamais été ouvert au moment ou on me le demande, alors il va s'ouvrir comme prévu par mon code, mais à la fin du traitement les données n'ont pas été envoyées du tout dans le tableur "cible".
En revanche, si je relance la macro en ayant déjà le tableur "source" ouvert, alors cela va marcher sans soucis. De la même façon, si j'enregistre le tableau "cible", sans ne rien modifier, pas même le nom, que je le ferme, et que je relance la macro alors il se rouvrira comme avant mais cette fois-ci la copie des données aura été effectuée.
Je pense avoir identifié que le problème est que quand je lance une première fois le programme, il met trop de temps à charger les données du tableur "source" et donc se contente de transférer des cases vides avant de finir l'ouverture du tableur source. En revanche, si il est ouvert ou l'a déjà été, l'ouverture est instantanée et la copie des données l'est également.
Pour solutionner ça j'ai essayé deux approches :
- Insérer une temporisation : cela n'a pas marché et le tableur "source" restait en chargement tout le long de ma temporisation
- Une technique "désespoir" ou je faisais directement en VBA :
- Ouvrir le tableur source
- Sauvegarder le tableur source
- Fermer le tableur source
- Rouvrir le tableur source
Tout ça dans le but de reproduire ce qui pour l'heure fonctionne (mais est bien trop vilain pour être optimal) à savoir lancer le tableur cible, lancer une première fois la macro, constater que la feuille source s'ouvre bien mais que les données n'ont pas été recopiées dans la feuille cible, sauvegarder le tableur source sans l'avoir modifié et relancer la macro une seconde fois, pour ce coup ci avoir tout au bon endroit.
Néanmoins là non-plus ça ne marche pas...
Je vous ai déjà laissé un bon pavé donc j'évite peut-être de mettre directement un gros bloc de code un peu indigeste, si vous avez déjà été confrontés à ce problème peut-être en connaitrez-vous d'office la raison. Par ailleurs si vous souhaitez voir une partie de mon code qui vous fait douter je vous la transmettrai sans problèmes !
Merci à tous pour votre aide !
Pierre
Partager