Import de données à partir d'un autre classeur
Bonjour à tous,
J'ai reçu une formation en VBA il y a peu mais je suis déjà un peu dépassé par ce que j'essaye de faire qui, me paraissait simple....au début !
Je souhaite faire une macro pour importer chaque trimestre un fichier de données.
- L'idée est d'avoir une boite de dialogue qui me permet de choisir la période que j'importe (Mars, Juin, Septembre, Décembre).
- Une fois celle-ci sélectionner le fichier à importer dont le nom est variable et qui contient l'onglet qui m’intéresse.
- Enfin copier l'intégralité de l'onglet dont le nom est fixe ("Alphablox Export") dans un onglet correspondant à la période sélectionnée (Data Mars, Data Juin, Data Septembre, Data Décembre) de mon classeur d'origine
J'ai aussi besoin à la copie de ne garder que les 6 premier caractères de ma première colonne mais j'ai déjà réussi à le faire je pense pouvoir copier coller le code en dessous de l'autre macro.
Bref faire un copier coller des deux classeurs ouverts (ou pas) avec un nom fixe ça va.... mais étant donnée que l'intérêt et de sélectionner le fichier d'import (qui change de nom) et la période qui définie l'onglet de destination dans mon classeur je viens voir si quelqu'un peut m'aider car la je patauges totalement...
Merci beaucoup à ceux qui m'aideront si jamais j'arrive à faire ça tout seul je mettrais ma réponse.
JB
Pour l'instant voilà ce que j'ai fait sauf que cela ne fonctionne pas...
Sub copy()
Dim Wbk1 As Workbook
'Wbk1 sera mon classeur à selectionner
Dim Period As Sheets
'Se sera l'onglet de destination
Dim X As String
'La période rentrée par inputbox par l'utilisateur (March, June, Septembre, December)
Dim Y As String
'Pour completer le nom de l'onglet
Set Y = " Data"
Set X = Application.InputBox(Prompt, "Enter your Period", Default)
Set Wbk1 = Application.GetOpenFilename
'pour aller chercher le fichier source dont le nom est variable
Set Period = X + Y
Wbk1.Worksheets("Alphablox Export").Range("A1:CC1000") = Workbooks("UV report Initiator").Period.Range("A1:CC1000")
End SubBonjour
Essayes ce code
Sub Recopy() ' Eviter de donner un nom réservé par VBA ( Copy )
Dim X As String ' La période rentrée par inputbox par l'utilisateur (March, June, Septembre, December)
Dim Y As String ' Pour completer le nom de l'onglet
Dim Fichier
Y = " Data"
X = Application.InputBox(Prompt, "Enter your Period", "March")
If X = "" Then Exit Sub
Fichier = Application.GetOpenFilename
If Fichier <> False Then
With Workbooks.Open(Fichier)
With Sheets(X & Y) ' Travail avec la page
' code pour récupérer les infos
.Range("A1:CC1000").copy ThisWorkbook.Sheets("Alphablox Export").Range("A1")
End With
.Close savechanges:=False
End With
End If
End SubSi ce n'est pas bon il faut fournir 2 fichiers : Le principal et un fichier de données
Parfait merci pour ton aide.
J'ai du mal m'exprimer car "Alphablox export" est dans le fichier importé et le "X&Y" dans mon classeur de travail.
J'ai un dernier soucis à régler lors de l'utilisation de la macro (Excel n'a pas assez de ressource etc...) dû au fichier importé qui comporte un graphique (que je ne veux pas récupérer) qui à l'air assez lourd lorsque je supprime celui-ci la macro fonctionne bien. le problème est que ce fichier comportera toujours ce graphique
Sinon voila le code que j'ai mis grâce à ton (importante) aide Banzai64. J'y ai rajouter mon code pour ne retenir que les 6 premiers caractère de ma colonne A.
Si quelqu'un à une idée pour que la macro se concentre uniquement sur les cellules je suis preneur....
Sub Import()
Dim X As String ' La période rentrée par inputbox par l'utilisateur (March, June, Septembre, December)
Dim Y As String ' Pour completer le nom de l'onglet
Dim Fichier
Y = " Data"
X = Application.InputBox(Prompt, "Enter your Period", "March")
If X = "" Then Exit Sub
Fichier = Application.GetOpenFilename
If Fichier <> False Then
With Workbooks.Open(Fichier)
With Sheets("Alphablox Export") ' Travail avec la page
' code pour récupérer les infos
.Range("A1:CC1000").Copy ThisWorkbook.Sheets(X & Y).Range("A1:CC1000")
End With
.Close savechanges:=False
End With
End If
Dim nom As Variant
Dim i As Integer
For i = 2 To 1000
nom = ThisWorkbook.Sheets(X & Y).Cells(i, 1)
ThisWorkbook.Sheets(X & Y).Cells(i, 1).FormulaR1C1 = Left(nom, 6)
Next i
End SubBonsoir
2 fichiers
Manque un . (point) devant
With .Sheets("Alphablox Export") ' Travail avec la pageModifies la ligne correspondante
.Range("A1:CC1000").Copy ThisWorkbook.Sheets(X & Y).Range("A1")Modifies la ligne correspondante
ThisWorkbook.Sheets(X & Y).Cells(i, 1) = Left(nom, 6)Pour le code, j'ai appliquer tes recommandations et t'en remercie.
Ci-joint, les documents que j'utilise le classeur que j'ai débuté aujourd'hui et un exemple de fichier que je cherche à importer.
JB
Merci beaucoup c'est parfait.