Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

super merci merci et encore merci.

j'aurai deux questions (question de confort):

1- A ce stade, c'est super, mais une question de sécurité, comment dire à la Macro ne pas copiée les données si elles sont identiques à la colonne précédente.

2- est ce qu'on peut automatisé cette macro à savoir:
- en manuelle comme telle est le cas. rien a changer.
- en automatique, si je laisse le fichier ouvert, dans ce cas la tous les jours du lundi au vendredi à 9h00, la macro se lance automatique.

merci pour ton aide.
 
Re : automatisation d'une MACRO

Salut Vevery,
faché moi? bien sur que non, c'est juste que j'étais pris sur autre chose

1) tu ne veux pas coller les data quand elles sont identiques à la colonne précédente.
les data c'est TOUTE la colonne ou juste quelques lignes?

2) automatiser une macro en manuel??? comprend pas . si tu veux pas qu'elle travaille. suffit de pas la lancer.. ou alors, j'ai pas pigé la subtilité
en automatique. si je me rappelle un des premiers post: tu veux que la macro se lance toute seule à une certaine heure de la journée, une fois par jour, tous les jours: à ce moment la. elle va chercher le bon fichier et fait le boulot.. c'est ca?
 
Re : automatisation d'une MACRO

Bonjour vgendron,

désolé de ma réponse tardive, j'avais écris mon message mais il n'a pas été posté ...bzr....

Je sais que tu n'est pas fâché.. je plaisante... 🙂

par rapport a tes questions:

1) les date c'est TOUTE la colonne.

je veux savoir par rapport a ta macro, si les data sont toutes identiques, dire à la macro de ne pas coller ces données ou bien dire à la macro qu'il envoi un message (style msgbox): attention ses données sont identiques à la colonne précédente, et ce que vous voulez les copiez quand même? .


2) automatiser une macro en manuel??? ne pas prendre en compte cette ligne.

en automatique. si je me rappelle un des premiers post: tu veux que la macro se lance toute seule à une certaine heure de la journée, une fois par jour, tous les jours: à ce moment la. elle va chercher le bon fichier et fait le boulot.. c'est ca? : oui c'est exacte, dire à la macro qui se lance automatiquement (bien évidement, le le fichier sera ouvert a ce moment là) et ce du lundi au vendredi à 9h00.

voila, voila, j’espère que je suis claire.

dans l'attenet des tes lires.

merci
 
Re : automatisation d'une MACRO

bon. voici pour le point 1

si il y a une seule data différente, ca ne te demande rien et ca copie
Code:
Sub suitemacro()

Dim WbSource, WbDestination As Workbook
Dim DataIdentique As Boolean


'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").Cells(2, Columns.Count).End(xlToLeft).Column
WbSource.Activate
WbSource.Sheets("TableauExportIndexJournalier").Cells.Range("J2:J157").Select
  
'vérification de la présence d'une data nouvelle ou pas
With WbSource
    DataIdentique = True
    i = 0
    For Each ele In Sheets("TableauExportIndexJournalier").Range("J2:J157")
        If ele <> WbDestination.Sheets("BDD").Cells(2 + i, lastcol - 1) Then
            DataIdentique = False
        End If
        i = i + 1
    Next ele
    
    i = 0
    For Each ele In Sheets("TableauExportIndexJournalier").Range("J159:J215")
        If ele <> WbDestination.Sheets("BDD").Cells(158 + i, lastcol - 1) Then
            DataIdentique = False
        End If
        i = i + 1
    Next ele
    i = 0
    For Each ele In Sheets("TableauExportIndexJournalier").Range("J216:J278")
        If ele <> WbDestination.Sheets("BDD").Cells(216 + i, lastcol - 1) Then
            DataIdentique = False
        End If
        i = i + 1
    Next ele
    i = 0
    For Each ele In Sheets("TableauExportIndexJournalier").Range("J158")
        If ele <> WbDestination.Sheets("BDD").Cells(279 + i, lastcol - 1) Then
            DataIdentique = False
        End If
        i = i + 1
    Next ele
    
    If DataIdentique = True Then
        rep = MsgBox("les datas sont les memes que la colonne précédente, voulez vous les copier quand meme?", vbYesNo)
    End If
    If rep = 6 Or DataIdentique = False Then
        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)
    End If
  WbSource.Close False
End With
  
End Sub
 
Re : automatisation d'une MACRO

pour ce qui est du point 2.. la. je ne vais pas savoir t'aider..
d'après ce que j'ai pu lire, il faut utiliser l'évènement Workbook_Open avec la fonction application.onTime..
mais ca impose que le fichier soit ouvert tous les jours. cad qu'il faut le fermer tous les soirs et le réouvrir le matin.
dans ce cas la.. pourquoi ne pas simplement lancer la macro en cliquant sur un bouton dès que le fichier est ouvert.
 
Re : automatisation d'une MACRO

pour le 1er point, comment dire... C'est génial, super... merci.
Concernant le 2ème point, effectivement si la personne est capable de fermer et réouvrir le fichier le lendemain, elle peut lancer en même temps la macro, surtout elle est presque automatisée par rapport à la version initiale.


j'ai une dernière question au niveau du 1er point (peut être une question débile... lol):

Pourquoi tu as divisés la plage J2:J278 en plusieurs fois ("J2:J157"), ("J159:J215"), ("J216:J278" et ("J158").


--------
DataIdentique = True
i = 0
For Each ele In Sheets("TableauExportIndexJournalier").Range("J2:J157")
If ele <> WbDestination.Sheets("BDD").Cells(2 + i, lastcol - 1) Then
DataIdentique = False
End If
i = i + 1
Next ele

i = 0
For Each ele In Sheets("TableauExportIndexJournalier").Range("J159:J215")
If ele <> WbDestination.Sheets("BDD").Cells(158 + i, lastcol - 1) Then
DataIdentique = False
End If
i = i + 1
Next ele
i = 0
For Each ele In Sheets("TableauExportIndexJournalier").Range("J216:J278")
If ele <> WbDestination.Sheets("BDD").Cells(216 + i, lastcol - 1) Then
DataIdentique = False
End If
i = i + 1
Next ele
i = 0
For Each ele In Sheets("TableauExportIndexJournalier").Range("J158")
If ele <> WbDestination.Sheets("BDD").Cells(279 + i, lastcol - 1) Then
DataIdentique = False
End If
i = i + 1
----

je te remercie pour ton aide.
 
Re : automatisation d'une MACRO

j'ai copié la macro, elle m’envoie le message "les datas sont les memes que la colonne précédente, voulez vous les copier quand même?" mais pas au premier coup. c-a-d, je lance ma macro, elle copie les données qui sont les mêmes que précédentes données (aucune alerte), par contre pour la deuxième fois, je reçois bien un message d'alerte.
merci
 
Re : automatisation d'une MACRO

Ca marche, j'ai supprimé les -1 dans la partie : 'vérification de la présence d'une data nouvelle ou pas










Sub suitemacro()

Dim WbSource, WbDestination As Workbook
Dim DataIdentique As Boolean


'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").Cells(2, Columns.Count).End(xlToLeft).Column
WbSource.Activate
WbSource.Sheets("TableauExportIndexJournalier").Cells.Range("J2:J157").Select

'vérification de la présence d'une data nouvelle ou pas
With WbSource
DataIdentique = True
i = 0
For Each ele In Sheets("TableauExportIndexJournalier").Range("J2:J157")
If ele <> WbDestination.Sheets("BDD").Cells(2 + i, lastcol ) Then
DataIdentique = False
End If
i = i + 1
Next ele

i = 0
For Each ele In Sheets("TableauExportIndexJournalier").Range("J159:J215")
If ele <> WbDestination.Sheets("BDD").Cells(158 + i, lastcol ) Then
DataIdentique = False
End If
i = i + 1
Next ele
i = 0
For Each ele In Sheets("TableauExportIndexJournalier").Range("J216:J278")
If ele <> WbDestination.Sheets("BDD").Cells(216 + i, lastcol ) Then
DataIdentique = False
End If
i = i + 1
Next ele
i = 0
For Each ele In Sheets("TableauExportIndexJournalier").Range("J158")
If ele <> WbDestination.Sheets("BDD").Cells(279 + i, lastcol) Then
DataIdentique = False
End If
i = i + 1
Next ele

If DataIdentique = True Then
rep = MsgBox("les datas sont les memes que la colonne précédente, voulez vous les copier quand meme?", vbYesNo)
End If
If rep = 6 Or DataIdentique = False Then
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)
End If
WbSource.Close False
End With

End Sub
 
Re : automatisation d'une MACRO

Hello

à ta question
Pourquoi tu as divisé la plage J2:J278 en plusieurs fois ("J2:J157"), ("J159:J215"), ("J216:J278" et ("J158").

je te retourne la question ;-)
j'ai repris ta décomposition du tout début..
et je me suis jamais posé la question. enfin si, mais je me suis dit que tu avais une bonne raison..

apparemment c'est la ligne 158 qui te genes?

C'est normal qu'en colonne BA tu aies une ligne de plus que les colonnes précédentes?
 
Re : automatisation d'une MACRO

En fait, c'est la ligne 215, que j'ai supprimé car il s'agit d'un compteur qui a été supprimé.
donc on peut tout regroupé alors? je sais que je suis nul.... 🙂
 

Pièces jointes

Re : automatisation d'une MACRO

Re
Je viens de regarder tes fichiers;
si tu regroupes, il va y avoir des décalages entre les lignes..donc, la séparation a du être pensée de telle sorte que les bonnes data soient collées dans la bonne ligne.
pour le vérifier par toi meme: copie colle la colonne B du fichier export dans une colonne du fichier BDD et fait la comparaison ligne à ligne entre les références compteur. et Ref Interne
tu verras alors que le découpage correspond aux endroits ou les deux colonnes diffèrent

donc. mieux vaut ne pas y toucher pour le moment..
après le jour ou ton fichier d'export est modifié, cette macro devra être adaptée..
Il y a possibilité par exemple, de rechercher la bonne ligne pour chaque data.. suffit de prendre la Ref Compteur comme critère de recherche.
 
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…