XL 2013 Optimisation de macro + USF à venir

  • Initiateur de la discussion Initiateur de la discussion Vincenzozo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Vincenzozo

XLDnaute Junior
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.
 
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:
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... 😕

Maintenant, le USF... 😉
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
547
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
861
Réponses
5
Affichages
477
Retour