VBA: Copie de données d'un fichier vers un autre fichier

spiergili

XLDnaute Nouveau
Bonjour à vous tous,


Je débarque fraichement et plein d'enthousiasme sur ce forum pour vous poser une bete question de débutant VBA. Je crois que ma demande n'est pas trop compliquée (en tout cas à mes yeux de novice):

-D'un coté j'ai un fichier "source" qui change chaque mois avec des données dans des tableaux stables, en d'autres mots qui ont la meme forme chaque mois.
De l'autre coté un fichier "bis" semblable, avec les meme tableaux sous la meme forme, que je vais feeder chaque mois avec le fichier "source".

Il y a 3 onglets à feeder de la sorte pour le fichier "bis" (avec des infos qui proviennent donc de 3 onglets différents du fichier "source")

- Ce que je veux faire c'est installer un bouton sur le fichier "bis" qui permet avec un seul click d'aller chercher les infos sur le fichier "source" (les copier) pour ensuite les coller sur le fichier "bis".


Je ne sais pas si j'ai été assez clair, dans tous les cas j'espère qu'une ame bienveillante avec un esprit éclairé voudra bien m'aider sur cette affaire.

J'ai essayé de faire une macro toute bete mais j'imagine que ce n'est pas suffisant puisque ca n'a pas fonctionné. Et pour de la pure programmation VBA, je suis loin d'etre au point.

Merci d'avance.
 
Dernière édition:

Luki

XLDnaute Accro
Re : VBA: Copie de données d'un fichier vers un autre fichier

Bonjour Spiergilli et bienvenue. :)

Si tu n'as pas encore eu de réponse ( en 1h21'), c'est que ton problème n'est pas forcément si simple, que les intervenants (toujours aussi passionnés et bénévoles qu'au premier jour) ne sont pas dispo dans la minute, ou que ton problème n'a pas été bien compris...

Un peu de patience, éventuellement un exemple de ce que tu as déjà fait (- de 50Ko) et une explication de texte pour moi: que veut dire "feeder"? Et je ne doute pas que tu obtiennes des réponses.

Bonne journée.
 

Luki

XLDnaute Accro
Re : VBA: Copie de données d'un fichier vers un autre fichier

Re,

En lisant ton post, je vois que :
  1. tu veux "alimenter" 3 onglets de ton fichier bis à partir de 3 onglets de ton fichier source.
  2. Je ne connais pas la structure de tes fichiers( combien d'onglets dans chaque fichier?, le fichier source est-il le même chaque mois ou un nouveau chaque mois? veux-tu conserver les onglets de ton fichier bis ou les remplacer chaque mois?
En fonction de ça, tu peux essayer plusieurs choses:
  • copier tes 3 onglets source dans ton classeur bis
  • faire tes manip en utilisant l'enregistreur de macro
  • poster un exemple pour nous puissions nous faire une idée de ce que tu veux
A te lire
 

spiergili

XLDnaute Nouveau
Re : VBA: Copie de données d'un fichier vers un autre fichier

Merci pour ta réponse. C'est vrai que je suis un peu impatient. Je pensais que ma requete n'était pas trop compliquée...

Oui, par feeder j'entends amlimenter.

Pour répondre à tes questions:

- le fichier "source" comporte 3 onglets seulement; le fichier "bis" en comporte bien plus mais il contient entre autres les 3 onglets identiques à ceux du fichier "source"
Le fichier "source" est le meme chaque mois dans sa structure, tout ce qui change étant la valeur des données. Je veux conservers les onglets du fichier "bis" tel quel, je veux juste modifier les infos dans l'onglet. Pour l'instant je le fais manuellement avec un bete copier/coller mais je veux automatiser cette manip pour gagner du temps.

- j'ai tenté de le faire manuellement en enregistrant tout ça avec une macro mais le debug intervient en me signifiant une erreur dans "range().selection".
Je pensais donc qu'il existe p-e une programmation "standard" pour ce genre de manip.

Serait-il utile que je copie la formule de la macro? ou que je laisse mes fichiers? (dans les deux cas il faudra que je change les noms de certaines infos que je ne peux pas laisser trainer comme ca sur le net)

Encore merci pour l'aide.
 

Luki

XLDnaute Accro
Re : VBA: Copie de données d'un fichier vers un autre fichier

Re,

Je t'ai préparé un exemple en zip:
1 classeur source et un classeur bis.

les macros sont dans le classeur bis. La récupération et lancée par un bouton dans une barre d'outils personnalisée. Elle n'est visible que dans le classeur bis.

la macro agit ainsi:
suppression de l'onglet A dans le bis et copie de l'onglet A source vers le bis. Etc...

Vois si ça convient et dis-moi
 

Pièces jointes

  • spiergili.zip
    19.1 KB · Affichages: 381

Luki

XLDnaute Accro
Re : VBA: Copie de données d'un fichier vers un autre fichier

Re,

En PJ le fichier corrigé: il y avait un bug si une des feuilles se trouvait en première position.
 

Pièces jointes

  • spicorrigé.zip
    21.3 KB · Affichages: 695

spiergili

XLDnaute Nouveau
Re : VBA: Copie de données d'un fichier vers un autre fichier

Mille mercis!!!! Quelle générosité!!

Je dis ça mais je n'ai même pas encore regardé le fichier, je vais m'empresser de le faire. On va voir si ça correspond à ce que je voulais.

Entre temps je me suis mis à la formation en ligne de microsoft pour VBA, ça devrait m'aider....
 

spiergili

XLDnaute Nouveau
Re : VBA: Copie de données d'un fichier vers un autre fichier

Génial, ça fonctionne!!!!!

C'est exactement ça!

Je vais tenter d'appliquer ça au boulot lundi et en cas de pépin ou de besoin de modification je viendrai quémander de l'aide à nouveau. Cependant, avec la petite formation VBA que je me suis faite ça devrait jouer.

Merci encore.
 

spiergili

XLDnaute Nouveau
Re : VBA: Copie de données d'un fichier vers un autre fichier

Tout fonctionne comme prévu, j'ai remplacé dans la formule le nom des fichiers que tu avais mis par le nom de mes fichiers.

Maintenant, il y a un "mais" qui résulte du fait que j'ai p-e omis de préciser une chose: une fois que j'ai mis à jour mon fichier "bis" avec les données du fichier "source", les 3 onglets du fichier "bis" (données A, B et C selon ton exemple) sont eux-memes à leur tour liés à trois autres onglets dans le fichier "bis"qui sont en fait une sorte de résumé des données précédentes mais mis en page de façon plus propre qu'à leur état brut.

Ce qui se passe c'est qu'une fois la macro lancée, elle remplace les onglets comme prévu mais du coup les trois autres onglets qui sont liés n'affichent plus l'info et un message d'erreur #REF apparait dans toutes les cellules. A priori mon fichier à ce moment là ne supporte par le changement.

Y'a-t-il une solution à ce problème (supplémentaire)???

Merci d'avance!!!
 

spiergili

XLDnaute Nouveau
Re : VBA: Copie de données d'un fichier vers un autre fichier

Voila, j'ai enlevé toute information confidentielle, j'ai uploadé le fichier sur ce lien:

Box.net - Free Online File Storage, Internet File Sharing, Online Storage, Access Documents & Files Anywhere, Backup Data, Send Files
 

Luki

XLDnaute Accro
Re : VBA: Copie de données d'un fichier vers un autre fichier

Salut,

Corrigé pour passer par copier/des données. Attention, il ne faut pas de lignes vides dans la plage, sinon il faudra modifier la méthode de détection de la plage à copier.

D'autre part, je ne connais pas la quantité de données à traiter. Fais des essais pour voir s'il n'y a pas de problèmes lors de la copie.

Code:
Option Explicit
'=====================
'Macro pour récupérer et remplacer 3 onglets d'un classeur extérieur
'voir aussi dans le module "this workook" l'activation et désactivation de la barre d'outil personnalisée
'==========================================================
Sub Récupération_des_onglets_source()
Dim Source As Workbook, Bis As Workbook
Dim i As Byte
Set Bis = ThisWorkbook

' desactive la mise à jour de l'écran
    Application.ScreenUpdating = False
'==========================================================
'vérifie que le classeurSource est ouvert, sinon demande ouverture et sortie macro
    On Error Resume Next
    Set Source = Workbooks("Source.xls")
    If Source Is Nothing Then MsgBox " Vous devez d'abord ouvrir le fichier Source!": Exit Sub
    On Error GoTo 0
'=============================================================

'Suppression et remplacement des donées de feuilles
   
    With Bis
    
        .Worksheets("A_ca").Rows(1).CurrentRegion.ClearContents
        Source.Sheets("A_ca").Rows(1).CurrentRegion.Copy Destination:=.Worksheets("A_ca").Range("A1")
        
        .Worksheets("A_un").Rows(1).CurrentRegion.ClearContents
        Source.Sheets("A_un").Rows(1).CurrentRegion.Copy Destination:=.Worksheets("A_un").Range("A1")
       
        .Worksheets("Recap").Rows(1).CurrentRegion.ClearContents
        Source.Sheets("Recap").Rows(1).CurrentRegion.Copy Destination:=.Worksheets("Recap").Range("A1")

    End With
    
'===============================================================
    

Application.ScreenUpdating = True

Bis.Activate

End Sub
Ps: de quel côté de la confédération?

A+ :)
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 332
Membres
103 188
dernier inscrit
evebar