XL 2013 Optimisation de macro + USF à venir

Vincenzozo

XLDnaute Nouveau
Bonjour à tous,

Voilà en résumé mon probleme : j'aimerai automatiser la recopie de valeurs entre un fichier rempli par un fournisseur et celui que j'utilise pour traiter/analyser et imprimer les données.
Il y a une trentaine d'onglets...

Une des première macro que j'ai est globalement celle-ci :
Pour les onglets 1) à 20) (ils sont tous nommés chiffre et parenthèse)

VB:
'Onglet 1)
    Windows("fichier_fournisseur.xlsm").Activate
    Sheets("1)").Select
    Range("D6:J50").Select
    Selection.Copy
    Windows("mon_fichier.xlsm").Activate
    Sheets("1)").Select
    Range("D6").Select
    ActiveSheet.Paste
'Onglet 2)
    Windows("fichier_fournisseur.xlsm").Activate
    Sheets("2)").Select
    Range("D6:J50").Select
    Selection.Copy
    Windows("mon_fichier.xlsm").Activate
    Sheets("2)").Select
    Range("D6").Select
    ActiveSheet.Paste
Je copie toujours la même zone, donc j'imagine qu'il y a moyen d'optimiser ce code qui fonctionne malgré tout...

Avec une boucle j'imagine...

En step 2, je pensais à une USF qui se lance pour que je copie le chemin d'accès du fichier fournisseur et le chemin d'accès de mon fichier... Je vais encore aller consulter Google à ce sujet! :)

Merci d'avance pour votre aide et vos conseils.
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Vincenzozo

VB:
Dim Ws As Workbook, Wb As Workbook  ' déclarer les variables
 
    Set Wb = Windows("fichier_fournisseur.xlsm")
    Set Ws = Windows("mon_fichier.xlsm")

    Wb.Activate

    With Wb
            .Range("D6:J50").Copy
        For i = 1 To .Sheets.Count
           Ws .Sheets(i) .Range("D6").PasteSpecial xlPasteValues
            Application.CutCopyMode = 0
        Next i
    End With
 
Dernière édition:

Vincenzozo

XLDnaute Nouveau
Merci pour ta réponse,
J'avais réussi avec cette boucle...

VB:
Sub Copie_onglets_optimisée()

Dim i As Integer
For i = 1 To 20
  Windows("fichier_fournisseur").Activate
  Sheets(i & ")").Select
  Range("D6:J50").Select
  Selection.Copy
  Windows("mon_fichier").Activate
  Sheets(i & ")").Select
  Range("D6").Select
  ActiveSheet.Paste
Next
End Sub
Ce qui plantait c'était l'espace manquant dans le sheets(i & ")").select... :confused:

Maintenant, le USF... ;)
 

vgendron

XLDnaute Barbatruc
Hello
un essai avec ce code
VB:
Sub Importer()
Set WbSource = Windows("fichier_fournisseur.xlsm")
Set WbDest = Windows("mon_fichier.xlsm")
With WbSource
    For Each ws In .Sheets
        ws.Range("D6:J50").Copy Destination:=WbDest.Sheets(ws.Name).Range("D1")
    Next ws
End With
End Sub

Pour la suite, il faudrait poster un fichier exemple avec l'ébauche que tu as pu faire

oups. j'arrive un peu tard :)
hello @Lone-wolf
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou