Macro boucle copier coller automatique

Bonjour,

Je sollicite votre aide svp pour la création d'une macro dont le but est de copier coller en valeurs une liste de données par pays. En fait j'ai deux fichiers : 1-Master 2-Analyse

Dans le fichier Analyse, j'ai une liste de pays qui s'étend de la cellule D4 à D68. Dans le fichier Master, je renseigne le pays(de la cellule D4) en cellule H1, et des valeurs sont calculées cellules J15:L15 du même fichier. Je copie colle ensuite ces valeurs dans le fichier Analyse cellules E4:G4 pour le pays D4, ainsi de suite jusqu'au pays D68.

Je veux svp que la macro puisse en automatique renseigner la cellule H1 du fichier master, fasse le copier coller valeurs, et passe ensuite cellule D5 etc jusqu'à cellule D68 en faisant les copier coller valeurs colonnes E:G. Pourriez vous m'aider svp ?

Merci d'avance.

Cordialement,

Hajar

Bonjour,

Dans le fichier Analyse....................... Dans le fichier Master

est-ce que la feuille (onglet) concernée sur chacun de ces deux fichiers ont le même nom ? quel est t'il ?

Est ce que les deux fichiers sont ouvert ?

Bonjour,

Ta question est très bien détaillée, mais pour y apporter des réponses adaptées, un modèle des deux fichiers est nécessaire.

Cordialement.

un exemple en supposant que les 2 feuilles soient "Feuil1"

Set wk1 = Workbooks("Analyse")
Set wk2 = Workbooks("Master")
Set sh1 = wk1.Sheets("Feuil1")
Set sh2 = wk2.Sheets("Feuil1")

For i = 4 To 68
 sh2.Range("H1").Value = sh1.Range("D" & i).Value
 sh1.Range("E" & i & ":G" & i).Value = sh1.Range("J15:L15").Value
next

Bonjour,

merci pour votre aide. Malheureusement la macro proposée par SabV ne marche pas. Vous trouverez ci-joint les deux fichiers; Les deux onglets ne sont pas nommés de la même manière.

Merci d'avance pour votre aide.

Cordialement,

Hajar

34analyse.xlsx (31.94 Ko)
15master.xlsm (18.15 Ko)

sabv ne t'a pas proposé de macro, mais un exemple de code ! C'est à toi qu'il appartenait d'en faire une macro ! Note-toi que le code qui doit s'exécuter doit toujours se trouver à l'intérieur d'une procédure. Et une procédure, c'est du code organisé placé à l'intérieur d'une déclaration de procédure. Une procédure commence par Sub et se termine par End Sub ou par Function et se termine par End Function. Cela t'évitera de coller du code n'importe où n'importe comment, et à nous d'entendre VBA couiner que ça ne va pas, à l'ouverture !

Ceci dit, ton classeur étant incomplet, il laisse en effet supposer qu'en modifiant le pays en H1, les valeurs se modifient, or rien ne se passe... De toutes façons ta demande est bien axée sur un processus de ce type. Donc voilà un code à tester (on ne le peut pas !). A toi par ailleurs de le rattacher à un bouton ou le lancer de la façon qui te convient, si ça marche.

Sub Analyse()
    Dim rgS As Range, rgP As Range, p$, n%, i%
    With ThisWorkbook.Worksheets("SUMMARY")
        Set rgS = .Range("J15:L15")
        Set rgP = .Range("H1")
    End With
    On Error GoTo noWbk
    With Workbooks("Analyse.xlsx").Worksheets(1)
        On Error GoTo 0
        n = .Cells(.Rows.Count, 4).End(xlUp).Row
        For i = 4 To n
            p = .Cells(i, 4)
            rgP = p: rgS.Calculate
            DoEvents
            .Cells(i, 5).Resize(, 3).Value = rgS.Value
        Next i
    End With
    Exit Sub
noWbk:
    MsgBox "Ouvrir le classeur 'Analyse' !", vbCritical, "Erreur"
End Sub

Cordialement.

42hajar91-master.xlsm (19.07 Ko)

Désolée je suis débutante en macros je m'y connais pas trop.

Merci pour la macro elle fonctionne parfaitement bien.

Bonne journée.

Cordialement,

Hajar

Bonjour,

La deuxième étape du processus est de récupérer les données collées dans le fichier analyse, de créer un fichier pour chaque pays en reprenant les données collées. Exemple: le premier pays dans la liste du fichier Analyse est "Austria", il va ouvrir le fichier "Envoi pays", renseigner le pays Austria dans la cellule B10, récupérer les données du fichier Analyse cellules E4:G4, les coller dans le fichier "Envoi pays" cellules "D10:F10" et la même chose cellules I4:K4 du fichier Analyse dans le fichier "Envoi.." cellules G10:I10, enregistrer sous "Envoi pays_Austria" et ainsi de suite pour tous les pays en personnalisant à chaque fois le nom du fichier "Envoi pays_"Pays de la cellule B10". Vous trouverez ci-joint les supports pour mieux comprendre ainsi que le chemin du dossier ou il doit enregistrer.

C:\Users\hajar\Desktop\Pays

merci beaucoup d'avance !

Cordialement,

Hajar

16analyse.xlsx (32.47 Ko)

Désolé ! mais là je ne te suis pas !

La deuxième étape du processus est de récupérer les données collées dans le fichier analyse, de créer un fichier pour chaque pays en reprenant les données collées.

1) Je te fais remarquer que tu ne trouveras dans mon code aucun Copy, ni aucun Paste ! Autrement dit les données ne sont ni copiées, ni collées, on a fait autrement !! Il faut se départir de ce mauvais réflexe ne consistant qu'à voir du copier-coller partout et ignorer le reste... Il est au contraire souhaitable de n'avoir recours au copier-coller que lorsqu'on ne peut faire autrement !

2) Je ne vois pas de raison de procéder en 2 étapes ! On a les données en main, on peut procéder simultanément à une opération complémentaire à partir des données sources.

Tu pouvais signaler cela avant !

J'espère que tu n'as pas d'autres suppléments en réserve. Je n'apprécie pas outre mesure les opérations à tiroirs qu'on ouvre à chaque fois qu'on croit que c'est fini. J'aime bien savoir où je vais dès le départ et m'appuyer sur une conception d'ensemble prenant en compte tous les éléments pour atteindre l'objectif final dans les meilleures conditions.

Bonjour,

Il serait appréciable de tenir compte du fait que certains utilisateurs ont recours à ce type de forum car justement ils ne sont pas aussi "avancés" que vous, et donc il serait peut être plus sympa de rester courtois et de respecter les différences de niveaux des utilisateurs qui sollicitent votre aide.

Je l'avoue je suis nulle en macro, et donc je ne peux pas deviner que les deux étapes peuvent se faire "simultanément" et "dès le début", sinon j'aurais demandé l'aide complète dès le début.

Votre aide est fortement appréciée dans tous les cas.

Cordialement,

Hajar

Bonjour,

Je ne crois être discourtois en te faisant remarquer que tu aurais pu indiquer que ta question ne se limitait pas à ce qui était indiqué au départ. Je ne te demande nullement de savoir comment on pouvait procéder ou non, mais seulement de donner une vue d'ensemble de la finalité de ton projet, de façon que l'on puisse y travailler en ayant une vue d'ensemble des objectifs visés...

Ni non plus en t'indiquant ce que j'apprécie ou non dans le travail que je peux accomplir sur le forum... Il me paraît bien légitime de l'exprimer le cas échéant.

Par ailleurs, j'entends bien que mes interventions ne soient pas inutiles et fassent progresser les personnes avec qui je travaille. Ce qui me fait ne jamais négliger les explications et autres informations qui me paraissent utiles à fournir. Au cas particulier, je t'en livre deux, et même trois d'un certain point de vue.

Une sur le copier-coller, et chaque fois que quelqu'un ne commence par vouloir copier ou coller chaque fois qu'il a des données à mettre d'un endroit à un autre, je considère cela comme un progrès considérable !

En deux, oui, il y a beaucoup de choses que l'on peut faire simultanément, et il n'y a pas lieu de s'en priver lorsque c'est possible, mais il faut disposer de tous les éléments pour voir la façon dont on peut les regrouper, donc en parler au départ, ou au moins les évoquer, de façon qu'ils puissent être pris en compte dès le départ.

Et en 3e lieu, implicitement, que ce qui est le plus important dans la réalisation d'un projet, ce n'est pas le code, c'est la conception globale et articulée avant de s'attaquer à la réalisation, c'est elle qui conditionne l'efficacité de ce qu'on va réaliser et la qualité du code qui soutiendra les fonctionnalités voulues. Ce que l'on n'a pas prévu au départ, ne pourra jamais s'intégrer dans les meilleures conditions, par la suite, on ne fait qu'ajouter des rustines. Il convient même de prévoir les évolutions futures pour en tenir compte dans la réalisation actuelle afin que le moment venu on puisse les ajouter de façon qu'elles s'intègrent harmonieusement...

Et ceci est une question ne relevant ni d'Excel ni de VBA mais à caractère tout à fait général, et ne nécessite aucune connaissance préalable particulière.

Ceci étant pour la suite, il y a quelques points à éclaircir :

1) dans la première phase, tu me fais transférer une plage de 3 cellules sur Analyse, celle-ci correspond à la zone Total et 2016 sur Analyse...

2) il s'agit ensuite de transférer 2 plages (total) sur le fichier pays (2016 et 2017). D'où vient 2017, qui n'y est pas au départ ?

3) en outre, sur la feuille pays il y a 4 plages, outre les 2 indiquées, les plages charges, on en a une sur le fichier de départ, mais pas sur Analyse ?

4) Avec 2 classeurs en présence, je suis parti de la considération que les 2 seraient ouverts, à partir du moment où le nombre s'accroît, se pose le problème de les ouvrir au fil des besoins, donc de l'identifications des dossiers dans lesquels les uns et les autres se trouvent ? (sachant qu'on peut définir facilement les chemins à partir de celui du classeur principal...)

5) Je n'ai pas perçu clairement si les classeurs pays préexistaient ou devaient être créés au fur et à mesure à partir d'un modèle ?

Il y a donc toute un série de questions à préciser pour éviter de partir à la dérive.

Cordialement et bonne journée.

Bonjour,

Merci pour cette clarification.

Alors pour le projet je dispose de deux fichiers qui se trouvent sous le même dossier, "Analyse" et "Envoi pays". Bien sûr on suppose que la première macro a déjà tourné et on dispose des données dans le fichier Analyse.

désolée j'ai oublié de préciser qu'à la base j'ai deux fichiers "Master" pour la première macro, un pour 2016 et un pour 2017, et j'ai donc dupliqué la macro dans le deuxième fichier Master 2017, d'où les deux pavés de données.

Pour la partie charges ne vous en souciez pas j'ajouterai une formule de calcul par la suite.

Enfin les fichiers pays n'existent pas mais doivent être créés en automatique à partir de la base du fichier Analyse;

A votre disposition pour toute info complémentaire.

Merci.

Cordialement,

Hajar

On peut reprendre les charges à partir des Master, et l'ensemble peut être fait à partir d'un Master, 2017 par exemple. A partir du moment où tu utilises VBA, tu n'as pas intérêt à avoir des formules, surtout pour créer des liens entre classeurs...

Je dois m'absenter. On précise tout ça dans la soirée...

Merci; Est ce qu'en parallèle je peux te demander un énorme service ? C'est un besoin plus urgent que le précédent et je voulais savoir si tu avais peut être la solution; En fait je dois faire un sommaire automatique sous PPT. J'ai trouvé une superbe macro qui m'a aidée, mais je ne voudrais prendre dans le sommaire que certaines diapos où j'ai des gros titres. Y a til moyen de préciser dans le code si par exemple il voit dans le titre de la diapo un titre en gras taille 18 il le prend sinon il passe à la diapo suivante ? ci-dessous le code qui fonctionne.

Merci d'avance pour toute aide !

Sub TablesMatière()

On Error Resume Next

Dim MonCustomLayout As PowerPoint.CustomLayout

Dim SI As Slide, tm As Slide, z As TextRange, NSI As Single

Dim t As String

Dim Pres As Presentation

Set Pres = PowerPoint.ActivePresentation

Set MonCustomLayout = Pres.SlideMaster.CustomLayouts.Item(PowerPoint.PpSlideLayout.ppLayoutText)

Set SI = Pres.Slides.AddSlide(2, MonCustomLayout)

SI.Shapes.Title.TextFrame.TextRange.Text = "Sommaire"

Set z = SI.Shapes(2).TextFrame.TextRange

'Set NSI = Pres.Slides(2).SlideIndex

For NSI = 2 To Pres.Slides.Count

'récupère le texte du titre de la diapo d'index NSI

t = NSI & " " & Pres.Slides(NSI).Shapes(1).TextFrame.TextRange.Text

'Affiche à la fin du texte la valeur de t et lui rajoute un retour à la ligne

z.Paragraphs.InsertAfter (t & Chr(13))

'z.Text = "essai pour voir" & Chr(13)

'z.Paragraphs.InsertAfter ("réussi" & Chr(13))

'Je rajoute un lien qui pointe sur le slide correspondant

'z.Paragraphs(z.Paragraphs.Count).ActionSettings(ppMouseClick).Hyperlink.SubAddress = sli.SlideID & ",,"

Next NSI

End Sub

Bonsoir,

Je suppose que c'est là que ça se joue :

t = NSI & " " & Pres.Slides(NSI).Shapes(1).TextFrame.TextRange.Text

Les éléments que j'ai surligné ne relèvent pas d'Excel... La macro est une macro Powerpoint.

Si c'est là que se joue ton test cela devrait peut-être pouvoir aller ainsi :

With NSI & " " & Pres.Slides(NSI).Shapes(1).TextFrame.TextRange
    If .Font.Size = 18 And .Font.Bold = True Then
        t= .Text
        '(suite de ton code)
    End If
End With

Sous toute réserve, n'ayant jamais travaillé sur le modèle objet PPT.

Merci pour ton aide mais ça me remet le même sommaire qu'avant, càd avec tous les titres.

Ce n'est pas grave je vais essayer de creuser. Je reviens à ma première demande de macro

Merci !

Cordialement,

Hajar

Bonsoir, ou Bonjour,

Je crois que je viens de voir qu'en fait la zone à tester devrait être là où tu mets le texte, dans z, et non t. J'ai un peu de mal à tout suivre car je n'identifie pas ce que représentent toutes les variables...

Pour l'autre macro, je vois dès que possible.

Une modification un peu extensive de la macro précédente permettra de boucler l'opération en un seul jet...

  • Ouvre classe Analyse
  • Ouvre Classeur Master A-1 (nom à préciser), (chemin à préciser pour les 2)
  • Initie boucle sur Analyse :
  • - pays : l'affecte sur Master et Master A-1
  • - récupère résultats sur Master et Master A-1
  • - Ouvre Envoi pays : lui affecte nom pays, résultats A et A-1, le sauvegarde sous nom pays et le ferme
  • - Complète analyse
et passe au pays suivant.

La macro garde la même structure, on fait juste un peu plus de choses à chaque tour...

A+

Bonsoir,

Une première mouture (non testée, évidemment). J'espère donc ne pas m'être planté dans les références...

Sub AnalyseEnvoiPays()
    Dim wsA As Worksheet, wsAnt As Worksheet, wsAna As Worksheet, wbEnv As Workbook
    Dim chDos$, p$, n%, i%
    chDos = "C:\Users\hajar\Desktop\Pays\"
    Application.ScreenUpdating = False
    Set wsAna = Workbooks.Open(chDos & "Analyse.xlsx").Worksheets(1)
    Set wsAnt = Workbooks.Open(ThisWorkbook.Path & "\Master2016.xlsm").Worksheets("SUMMARY")
    Set wsA = ThisWorkbook.Worksheets("SUMMARY")
    n = wsAna.Cells(.Rows.Count, 4).End(xlUp).Row
    For i = 4 To n
        p = wsAna.Cells(i, 4)
        wsAnt.Range("H1") = p: wsAnt.Calculate
        wsA.Range("H1") = p: wsA.Calculate
        DoEvents
        Set wbEnv = Workbooks.Open(chDos & "Envoi pays_.xlsx")
        With wbEnv.Worksheets(1)
            .Range("B10") = p
            .Range("D10:F10").Value = wsAnt.Range("J15:L15").Value
            .Range("D14:F14").Value = wsAnt.Range("J17:L17").Value
            .Range("G10:I10").Value = wsA.Range("J15:L15").Value
            .Range("G14:I14").Value = wsA.Range("J17:L17").Value
        End With
        wbEnv.SaveAs chDos & "Envoi pays_" & p & ".xlsx"
        wbEnv.Close
        With wsAna
            .Range("E" & i & ":G" & i).Value = wsAnt.Range("J15:L15").Value
            .Range("I" & i & ":K" & i).Value = wsA.Range("J15:L15").Value
        End With
    Next i
End Sub

Pour Analyse et Envoi pays_, j'ai pris le chemin communiqué.

Pour Master2016, il faudra déjà ajuster le nom, et j'ai considéré qu'il était dans le même dossier que Master2017. Il faudra donc rectifier si ce n'est pas le cas.

Il n'est peut-être pas inutile non plus de vérifier que les références de plages sont les bonnes...

Cordialement.

Tu avais abandonné le sujet !?

Rechercher des sujets similaires à "macro boucle copier coller automatique"