automatisation d'une MACRO

  • Initiateur de la discussion Initiateur de la discussion vevery
  • 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 !

vevery

XLDnaute Nouveau
Bonjour,

j'ai une macro que j'ai développé (dans le cadre de mon stage), le problème c'est que tous les matins je modifie 5 lettres et chiffres (voir ci-dessous les lettres et chiffres en gras) et par la suite je lance ma macro.

J'ai besoin de votre aide pour automatiser ma macro à savoir:

-------
.....
'modules à copier coller en remplacant le NUMERO FICHIER SOURCE et COLONNE DE COLLAGE
Set classeurSource = Application.Workbooks.Open("Z:\TableauExportIndexJournalier_113.xls", , True)
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J2:J157").Copy classeurDestination.Sheets("BDD").Range("BX2")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J159:J215").Copy classeurDestination.Sheets("BDD").Range("BX158")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J216:J278").Copy classeurDestination.Sheets("BDD").Range("BX216")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J158").Copy classeurDestination.Sheets("BDD").Range("BX279")
classeurSource.Close False

'modules à copier coller en remplacant le NUMERO FICHIER SOURCE et COLONNE DE COLLAGE
Set classeurSource = Application.Workbooks.Open("Z:\TableauExportIndexJournalier_114.xls", , True)
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J2:J157").Copy classeurDestination.Sheets("BDD").Range("BY2")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J159:J215").Copy classeurDestination.Sheets("BDD").Range("BY158")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J216:J278").Copy classeurDestination.Sheets("BDD").Range("BY216")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J158").Copy classeurDestination.Sheets("BDD").Range("BY279")
classeurSource.Close False

'modules à copier coller en remplacant le NUMERO FICHIER SOURCE et COLONNE DE COLLAGE
Set classeurSource = Application.Workbooks.Open("Z:\TableauExportIndexJournalier_115.xls", , True)
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J2:J157").Copy classeurDestination.Sheets("BDD").Range("BZ2")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J159:J215").Copy classeurDestination.Sheets("BDD").Range("BZ158")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J216:J278").Copy classeurDestination.Sheets("BDD").Range("BZ216")
classeurSource.Sheets("TableauExportIndexJournalier").Cells.Range("J158").Copy classeurDestination.Sheets("BDD").Range("BZ279")
classeurSource.Close False

....

---------------


merci infiniment de l'aide que vous pouvez m'apportez pour terminer cette tâche.
 
Re : automatisation d'une MACRO

Bonjour,

ca manque de précision pour pouvoir t'aider correctement
tu as développé une macro: ok
le pb c'est que tu modifies des chiffres et des lettres (et le compte est bon ;-) ? )
blague à part. tu les modifies ou ces chiffres et lettres? dans la macro elle meme? ou dans la feuille Excel
est ce que la modif que tu fais tous les matins suit une logique particulière?

as tu un bout de fichier (avec la macro tant qu'à faire) pour qu'on puisse avoir une vue plus claire de ton pb?
 
Re : automatisation d'une MACRO

Bonjour vgendron,

merci pour ta réponse.
je m'excuse de ne pas être clair dans mes explications.

Effectivement, tous les matins, j'ouvre ma macro (elle même) et je copie ce paragraphe:


'modules à copier coller en remplacant le NUMERO FICHIER SOURCE et COLONNE DE COLLAGE
Set classeurSource = Application.Workbooks.Open("Z:\TableauExportIndexJ ournalier_113.xls", , True)
classeurSource.Sheets("TableauExportIndexJournalie r").Cells.Range("J2:J157").Copy classeurDestination.Sheets("BDD").Range("BX2")
classeurSource.Sheets("TableauExportIndexJournalie r").Cells.Range("J159:J215").Copy classeurDestination.Sheets("BDD").Range("BX158")
classeurSource.Sheets("TableauExportIndexJournalie r").Cells.Range("J216:J278").Copy classeurDestination.Sheets("BDD").Range("BX216")
classeurSource.Sheets("TableauExportIndexJournalie r").Cells.Range("J158").Copy classeurDestination.Sheets("BDD").Range("BX279")
classeurSource.Close False



Puis je colle et je modifie mes numéros et lettres.

Concernant ce fichier : TableauExportIndexJ ournalier_113.xls, il s'agit d'un fichier Excel généré automatiquement par le serveur tous les matins à 1h40, ce fichier change de numéros:
TableauExportIndexJ ournalier_113.xls, TableauExportIndexJ ournalier_114.xls, TableauExportIndexJ ournalier_115xls......

Voici le lien de mon fichier Excel: http://xls.lu/58vu


merci.
 
Re : automatisation d'une MACRO

Salut,
je n'arrive pas à acceder à ton fichier.(c'est sur un serveur bloqué chez moi). est ce que tu peux le joindre en utilisant le mode avancé (sous la fenetre de post) puis gestion des fichiers?

1) je suppose que ta macro est dans ton fichier destination

2) plutot que de donner le nom du fichier source à ouvrir dans la macro, tu peux utiliser la méthode getopenfilename
Code:
Sub import2()

ClasseurSource = Application.GetOpenFilename("Excel File (*.xls,*.xls")
If ClasseurSource <> False Then
    Workbooks.Open ClasseurSource
End If

End Sub

ainsi, au lancement de ta macro, cette ligne va t'ouvrir l'interface classique pour aller selectionner le fichier à ouvrir
tu peux meme le paramétrer (je crois) pour que l'interface s'ouvre automatiquement dans le bon répertoire: la. faut jouer de la touche F1


3) je suppose également que les colonnes que tu modifies à chaque fois, c'est pour donner à la macro la derniere ligne vide dans laquelle coller les data?
comme je vois aussi que tu as 4 lignes différentes, il faudrait que l'on voit ton fichier destination pour en comprendre la structure.
genre. entre BX2 et BX158, il y a peut etre des entetes de tableau? ce qui permettrait de modifier la macro pour qu'elle détecte toute seule les bonnes lignes destinations
 
Dernière édition:
Re : automatisation d'une MACRO

merci pour ta réponse.
le but est que cette macro soit automatisée. et même par la suite la faire démarrer automatiquement en ouvrant juste le fichier déstination (serai génial).

voici les deux fichiers.
 

Pièces jointes

Re : automatisation d'une MACRO

Re
essaie avec ce code
Code:
Sub suitemacro()
Dim ClasseurSource, ClasseurDestination As Workbook

 'définir le classeur destination
 Set ClasseurDestination = ThisWorkbook
 NomDestination = ClasseurDestination.Name
 
 'définir le classeur source en l'ouvrant
 NomClasseurSource = Application.GetOpenFilename("Excel File (*.xls,*.xls")
If NomClasseurSource <> False Then
    Workbooks.Open NomClasseurSource
    Set ClasseurSource = ActiveWorkbook
    NomSource = ClasseurSource.Name
End If

 
 'afficher tete de colonnes
 RangeA1 = "Ref compteur"
 RangeB1 = "Désignation"
 Workbooks(NomDestination).Activate
 

   'modules à copier coller en remplacant le NUMERO FICHIER SOURCE et COLONNE DE COLLAGE
  'Set classeurSource = Application.Workbooks.Open("D:\YSAHAL\Bureau\MACRO\TableauExportIndexJournalier_123.xls", , True)
  'Détection de la dernière colonne de l'onglet BDD fichier destination
  lastcol = ClasseurDestination.Sheets("BDD").Range("JT2").End(xlToLeft).Column
  
Workbooks(NomSource).Sheets("TableauExportIndexJournalier").Cells.Range("J2:J157").Copy Destination:=Workbooks(NomDestination).Sheets("BDD").Cells(2, lastcol)
Workbooks(NomSource).Sheets("TableauExportIndexJournalier").Cells.Range("J159:J215").Copy Destination:=Workbooks(NomDestination).Sheets("BDD").Cells(158, lastcol)
Workbooks(NomSource).Sheets("TableauExportIndexJournalier").Cells.Range("J216:J278").Copy Destination:=Workbooks(NomDestination).Sheets("BDD").Cells(216, lastcol)
Workbooks(NomSource).Sheets("TableauExportIndexJournalier").Cells.Range("J158").Copy Destination:=Workbooks(NomDestination).Sheets("BDD").Cells(279, lastcol)
  ClasseurSource.Close False
  
  
End Sub
 
Re : automatisation d'une MACRO

Code:
Sub suitemacro()

Dim WbSource, WbDestination As Workbook

'définir le classeur destination
Set WbDestination = ThisWorkbook
 
'définir le classeur source en l'ouvrant
NomClasseurSource = Application.GetOpenFilename("Excel File (*.xls,*.xls")
If NomClasseurSource <> False Then
    Set WbSource = Workbooks.Open(NomClasseurSource)
End If

 
'afficher tete de colonnes
RangeA1 = "Ref compteur"
RangeB1 = "Désignation"

WbDestination.Activate
'modules à copier coller en remplacant le NUMERO FICHIER SOURCE et COLONNE DE COLLAGE
'Set classeurSource = Application.Workbooks.Open("D:\YSAHAL\Bureau\MACRO\TableauExportIndexJournalier_123.xls", , True)

'Détection de la dernière colonne de l'onglet BDD fichier destination
lastcol = WbDestination.Sheets("BDD").Range("JT2").End(xlToLeft).Column
WbSource.Activate
WbSource.Sheets("TableauExportIndexJournalier").Cells.Range("J2:J157").Select
  
With WbSource
    Sheets("TableauExportIndexJournalier").Range("J2:J157").Copy WbDestination.Sheets("BDD").Cells(2, lastcol + 1)
    Sheets("TableauExportIndexJournalier").Range("J159:J215").Copy WbDestination.Sheets("BDD").Cells(158, lastcol + 1)
    Sheets("TableauExportIndexJournalier").Range("J216:J278").Copy WbDestination.Sheets("BDD").Cells(216, lastcol + 1)
    Sheets("TableauExportIndexJournalier").Range("J158").Copy WbDestination.Sheets("BDD").Cells(279, lastcol + 1)
  WbSource.Close False
End With
  
End Sub

suffit de modifier l'indice de la colonne
 
- 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

Retour