Transfert de données d'un classeur à un autre en fonction d'une celulle

Julie1

XLDnaute Nouveau
Bonjour,

Je vous expose mon problème. j'ai créer un fichier X. Dans ce fichier j'ai :
Colonne A : Date de début (exemple A2 : 10/02/2011, pareil A3, A4...)
Colonne B : Date de fin (exemple B2 : 15/02/2011, pareil pour B3, B4...)
Colonne C: total (en fonction de l'exemple : 6 jours)

j'ai également dans la cellule D1 : nom du fichier source

Jusque la tout vas bien.
Maintenant les données que j'ai rentré en colonnes A et B provienne d'un autre fichier que je nommerai fichier Y. Je souhaiterais faire ceci : lorsque je tape dans D1 le nom de mon fichier source (donc ici Y), qu'il soit copier automatiquement dans les colonne A et B du fichier X les données des colonnes F et G du fichier Y.
petit point en plus le fichier source de données peut changer, c'est à dire que j'ai plusieurs fichiers sources, et en fonction du nom du fichier indiqué en D1, les copié/coller sont différent. Si je tape en D1 le nom du fichier H, je veux qu'il aille chercher les données du fichier H (pareil colonnes F et G du fichier H à coller dans les colonnes A et B du fichier X).


Possibilités :
j'ai pensé faire une liaison entre les deux fichiers mais comme le fichier source change, je ne pourrais pas mettre ma condition du nom du fichier en D1. j'ai quelque notions de macro (je sais faire un enregistrement par exemple) mais je ne pense pas que ca va nous aider. Je pense que la seul solution est VBA (auquel je n'ai aucune notion :s )

Voila j'espère avoir été clair. je ne sais pas si c'est réalisable.

Merci pour votre aide
 
Dernière édition:

Zon

XLDnaute Impliqué
Re : Transfert de données d'un classeur à un autre en fonction d'une celulle

Bonsoir,

Bienvenue sur XLD, ton projet est réalisable.

Veux tu participer d'une façon pédagogique ou une solution toute faite ?

'on ouvre le fichier
Set WkbSource = Workbooks.Open(thisworkbook.path & "\" & [D1]

with wbksource
with .sheets(1)

etc


A+++
 

Julie1

XLDnaute Nouveau
Re : Transfert de données d'un classeur à un autre en fonction d'une celulle

Premièrement merci pour ce retour :)
une réponse pédagogique me plairait, comme ça je me familiariserai avec le langage VBA :)

Merci d'avance pour votre aide ^^
 

Zon

XLDnaute Impliqué
Re : Transfert de données d'un classeur à un autre en fonction d'une celulle

Salut,

Dans ton cas , l'enregistreur de macro va faire les 3/4 du boulot:

Pour ouvrir le fichier exemple.xls voilà ce qu'il nous dit:

Code:
Sub Macro1()
' Macro1 Macro
' Macro enregistrée le 14/08/2012 par GP2593
'

    Workbooks.Open Filename:="C:\Mes Documents\exemple.xls"
End Sub

ensuite on enregistre le copier coller du fichier exemple vers Classeurjulie



Code:
Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 14/08/2012 par GP2593
'

'
    Windows("exemple.xls").Activate
    Range("F6:G34").Select
    Selection.Copy
    Windows("ClasseurJUlie.xls").Activate
    Range("A1").Select
    ActiveSheet.Paste
End Sub


Pour répondre à ta demande voilà un exemple de mise en vba avec des variables
On remarque que beaucoup d'instrcutions VBA sont assez intuitive si on parle un anglais scolaire.
Dans même module , on écrit en "dur"

'Les variables permettent d'associer un nom à une valeur ou un objet


Code:
Sub CopierDonnees()
 Dim Classeur As Workbook '
 Dim NomFichier As String '


NomFichier = Range("D1") ' ou [D1], cells(1,4)
'On stocke directement la valuer de D1 dans nomfichier


'instruction qui s'écrit comme cela en VBA
'en ouvrant le classeur exemple , on en profite
'pour l 'assigner à la variable Classeur
'Set Classeur = Workbooks.Open("C:\Mes Documents\exemple.xls")
'nous on va remplacer "C:\Mes Documents\exemple.xls" par la valeur de D1 qui elle même
' est stockée dans nomficher

Code:
Set Classeur = Workbooks.Open(NomFichier)
 
 Classeur.Sheets(1).[F6:G34].Copy ThisWorkbook.Sheets("Feuil1").[A2]
ici on stocke la référence de l'objet classeur, c'est pour cela qu'on utilise Set

'on peut ensuite fermer le fichier que l'on vient d'ouvrir
Code:
Classeur.Close 
End Sub

'ASTUCES
'Pour copier sur la 1 ere cellule vide de la colonne A,
'on se servira [A65536].end(xlup)(2)
'on peut faire de même pour la plage source...avec Range([F6],[A65536].end(xlup))



Il reste à voir ce qu'il se passe si on se trompe en saisissant le nom complet du ficher exemple

VBA va nous envoyer un erreur 1004, donc je te laisse le soin de chercher dans l'aide pour savoir utiliser on error resume next.

Il y a d'autres pistes d'amélioration pour l'ulisateur du programme.

N'hésites surtout pas à poser tes questions.


A+++
 

Julie1

XLDnaute Nouveau
Re : Transfert de données d'un classeur à un autre en fonction d'une celulle

Bonjour,

Merci pour cette réponse.

J'ai pratiquement tout compris dans la première macro on donne le chemin pour ouvrir le fichier exemple.xls donc à ce moment il n'y a pas encore de variable qui fait qu'en changeant la valeur de D1 dans classeurjulie .xls il ouvre le fichier correspondant. Avec la dernière partie de la dernière macro, la on introduit la variable nomfichier qui du coup ouvrira le fichier correspondant a la valeur D1... mais il ne se passe rien lorsque je met en D1 exemple.xls???
J'ai raté quelque chose?
 

Zon

XLDnaute Impliqué
Re : Transfert de données d'un classeur à un autre en fonction d'une celulle

Salut,

exemple.xls est un fichier que tu dois avoir créer.

pour ouvrir un fichier il faut son nom complet c'est à dire son chemin : c:\Mondossier\monclasseur.xls

Enfin si tes fichiers sont tous dans le même répertoire, en D1 on saisira exmple.xls on affectera comme suit

NomFichier = "C:\Ledossiereznquestion\"& Range("D1").



Mon post n'est pas trés clair, donc en résumé

J'ai fait une partie Macro1 et Macro2 avec l'neregistereur de macro dans un classeur nommé classeurjulie.xls pour te montrer qu'il nous donnait les instructions à adapter.


Mais c'est la procédure copiedonnees dans laquelle j'introduis la notion de variable qu'il faudra utiliser.


A+++
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote