Selectionner un fichier et en copier ses donnees

Bonjour a tous,

Je suis debutant en Macro Excel / VGA, et j'ai un petit probleme. J'ai cherche sur Internet mais je n'ai pas trouve de solution, donc si quelqu'un pouvait m'aider, j'en serais tres heureux...

Je cherche a copier des donnees d'un fichier excel (appelons-le "source") a un autre (appelons-le "results") en utilisant une macro. La macro est situee sur une worksheet ("macro") du fichier "results" mais qui est differente de la worksheet ("data") ou il faut copier les resultats (pas important ?...).

La ou ca se complique, c'est que la macro demande a l'utilisateur (qui peut etre n'importe qui, utilisant n'importe quel ordinateur) de choisir le fichier source par lui-meme dans un dossier quelconque (ou sur son bureau) par une boite de dialogue. Donc on ne peut pas programmer la macro avec un adresse fixe pour le fichier source. Ensuite, quand le fichier est choisit, le copier-coller entre "source" et "results" s'effectue automatiquement et c'est fini.

Pour appeler le fichier "source", je pense utiliser :

Dim source As Variant
source = Application.GetOpenFilename("Please open the file", MultiSelect:=False)

Ensuite j'ai vu sur internet qu'il faudrait utiliser une commande utilisant "

Workbooks.Open data

", mais je ne sais pas comment l'utiliser. Et il faudrait ensuite activer la worksheet sur laquelle ou fait les manipulations avec une autre commande ?

Au debut de la macro je parametre une constante pour la worsheet ("data") ou sera copiee les donnees :

Const RD As String = "Data"

Pour ensuite utiliser definir ou je voudrais copier les donnees, dans quelles cellules etc... :

Worksheets(RD).Cells(1, 2).Value = ???

et c'est la que je ne sais pas quoi ecrire.

Ou bien je dois utiliser les commandes .Copy .Select et .Paste comme je l'ai vu quelque part sur un forum ?

Desole pour le long message ! Et merci par avance pour votre aide.

ps : J'utilise Excel en Anglais...

Salut ami du bout du monde et bienvenue sur le Forum

J'ai essayé d'utiliser ton bout de code que je ne connais pas :

Dim source As Variant
source = Application.GetOpenFilename("Please open the file", MultiSelect:=False)

mais ça bloque chez moi car apparemment je devrais installer une option complémentaire.

Je n'ai pas trop cherché de solution à ce niveau car j'aurais un autre bout de code à te proposer :

Option Explicit

Sub aa()
Dim Fichier_traité As String

Application.Dialogs(xlDialogOpen).Show

Fichier_traité = ActiveWorkbook.Name

'Ici tu places le reste de ton code

Windows(Fichier_traité).Close Savechanges:=False

End Sub

Avec ce code, tu sélectionnes un fichier qui s'ouvre à l'écran, tu enregistres son nom dans une variable, tu peux placer un reste de code à cet endroit et tu refermes enfin le fichier ouvert précédemment tout à la fin.

Est-ce déjà un début de piste ? Si non, merci de joindre ton propre fichier ; ça remplace aisément 36 explications

Cordialement.

Bonjour, merci pour la reponse ! Et desole de la lenteur de la mienne...

Le bout de code marche, mais mon probleme n'etait pas vraiment la, c'etait surtout pour copier les donnees entre les deux fichiers.

Dois-je mettre la feuille qui doit recevoir les infos dans une variable pour l'utiliser ? Et dois-je (re)selectionner a chaque fois chaque feuille pour chaque transfert de donnees ?

En gros, je voudrais faire :

1/ Demander a l'utilisateur de selctionner SOURCE en cliauqnd sur la macro depuis la sheet ABC du ficher RESULTS (ok)

2/ L'utilisateur selectionne le fichier SOURCE (ok)

3/ Copie de certaines infos de SOURCE vers la sheet DATA de RESULTS

Fini

C'est 3/ que je n'arrive pas a faire...

Merci pour ton aide en tous cas !

Re,

C'est très difficile de savoir ce que tu désires car tes informations manquent de précisions et tu n'as toujours pas fourni tes fichiers

Voici deux exemples de codes que tu pourrais placer à l'endroit où j'ai indiqué

'Ici tu places le reste de ton code
ActiveSheet.Range("A1:A20").Copy Destination:=ThisWorkbook.Sheets("Data").Range("A1")

Avec ce code, tu copies les données de la plage A1:A20 de la feuille sur laquelle s’ouvre le fichier visité et les colles dès la cellule A1 de la feuille “Data” de ton fichier de base (celui dans lequel tu as place ton code).

Sheets("Feuil1").Copy After:=Workbooks("Results.xls").Sheets(1)

Avec de deuxième code, tu effectues une copie de la feuille “Feuil1” du fichier visité (pour autant qu’elle existe) et tu la places dans le fichier nommé par exemple "Results.xls" (tu auras alors compris que tu peux faire référence au fichier de base par son nom ou par "ThisWorkbook").

A noter que pour ces deux opérations il ne serait normalement pas absolument nécessaire d’ouvrir le fichier visité si c’était toujours le même.

Si tu désires effectuer d’autres transferts d’un fichier à l’autre, FOURNIS-NOUS TES FICHIERS et des explications exactes.

Amicalement.

Salut,

Merci pour la reponse ! C'est exactement ce que je cherchais

Copier le fichier "source" dans une sheet du fichier "results" est une tres bonne idee. Ca facilite tout ! Les copies se font sans probleme, et ensuite on a just a ferme le sheet cree par "source" et c'est fini.

Voici en gros mon code "fini", si ca peut aider quelqu'un d'autre :

Const RD As String = "RawData"
Const SH As String = "Sheet1"
Private cond As Integer
Private incr As Integer
Dim source As String
Option Explicit

Sub test()

cond = 0
Application.Dialogs(xlDialogOpen).Show  'pour choisir le fichier source

source = ActiveWorkbook.Name

Sheets("Sheet1").Copy After:=ThisWorkbook.Sheets(1)

'je cherche a copier les donnees dans le fichier "results" a partir de la premiere ligne vide, mais cela changera a chaque utilisation
incr = 2
While Worksheets(RD).Cells(incr, 1).Value <> ""
incr = incr + 1
Wend

If Worksheets(SH).Cells(2, 1).Value = "Paris" Then
             Worksheets(RD).Cells(incr, 1).Value = "Paris"
             cond = 1
ElseIf Worksheets(SH).Cells(2, 1).Value = "Tokyo" Then
             Worksheets(RD).Cells(incr, 1).Value = "Tokyo"
             cond = 1
ElseIf Worksheets(SH).Cells(2, 1).Value = "Osaka" Then
             Worksheets(RD).Cells(incr, 1).Value = "Osaka"
             cond = 1
End If

' si la valeur de la deuxieme ligne / premiere colonne de "Source" n'est pas "Paris", "Tokyo" ou "Osaka", on ne fait rien et on affiche un message d'erreur
If cond = 0 Then
MsgBox "The file you selected isn't good", vbExclamation, "Error"
End If

' copie des donnees....
If cond = 1 Then
Worksheets(RD).Cells(incr, 4).Value = Worksheets(SH).Cells(2, 4)
Worksheets(RD).Cells(incr, 5).Value = Worksheets(SH).Cells(2, 5)
Worksheets(RD).Cells(incr, 6).Value = Worksheets(SH).Cells(2, 6)
Worksheets(RD).Cells(incr, 7).Value = Worksheets(SH).Cells(2, 7)
Worksheets(RD).Cells(incr, 16).Value = Worksheets(SH).Cells(2, 16)
End If

' pour fermer le sheet cree par "source" sans afficher de message d'erreur
Application.DisplayAlerts = False
Worksheets(SH).Delete
Application.DisplayAlerts = True

Worksheets(RD).Select

Windows(source).Close Savechanges:=False

End Sub

Bon ce n'est pas encore fini, j'ai encore pas mal de conditions a definir et de manipulations a programmer, mais le principal est la.

Ma derniere question :

Avec la commande

Application.Dialogs(xlDialogOpen).Show

comment fait-on pour afficher un message d'erreur si quand la fenetre de choix s'affiche on ne selectionne rien et on clique sur "annuler" ?

Merci d'avance !

ps : Desole pour le retard de ma reponse, mais je me connecte sur ce site depuis le boulot. Je n'ai pas pu le faire vendredi et hier (lundi) c'etait ferie...

がとうあり!(du verlan Japonais )

Merci pour la reponse.

Et merci pour l'idee de la comparaison.

Mais juste une chose :

If ActiveWorkbook.Name = ThisWorkbook.Name Then
    MsgBox ("Aucun fichier n'a été sélectionné, la macro est interrompue")
    Exit Sub
Else
    Fichier_traité = ActiveWorkbook.Name
    MsgBox ("Le fichier choisi se nomme : " & Fichier_traité)
    ' Tu peux placer ici le reste de ton code et finir par ....
   Windows(Fichier_traité).Close Savechanges:=False
End If

Vu que si la condition du IF est atteinte on sort du Sub, est-ce qu'on pourrait ne pas mettre le ELSE ? Et avoir donc ceci :

If ActiveWorkbook.Name = ThisWorkbook.Name Then
    MsgBox ("Aucun fichier n'a été sélectionné, la macro est interrompue")
    Exit Sub
End If

Fichier_traité = ActiveWorkbook.Name
MsgBox ("Le fichier choisi se nomme : " & Fichier_traité)
 ' Tu peux placer ici le reste de ton code et finir par ....
 Windows(Fichier_traité).Close Savechanges:=False

Juste par curiosite car c'est un detail...

Yvouille a écrit :

Voici une possibilité

sous-entendant qu'il doit bien avoir 30 ou 40 autres possiblités, dont la tienne

Si tu effectues un test et que ça passe, c'est que ton code est bon

Amicalement.

Ok !

En tous cas, merci pour l'aide

Rechercher des sujets similaires à "selectionner fichier copier donnees"