Macro qui duplique des lignes (déjà prête, à améliorer)

Bonjour,

Je vous laisse le fichier test ci-joint qui vous illustrera mieux ma demande.

Dans une feuille Excel "Base", j'ai une liste de métiers (médecin, consultant, directeur...), avec le nombre de personnes demandé par jour travaillé (colonnes avec dates sur l'année 2020). Ces métiers sont dispatchés par projet.

Dans l'objectif d'optimiser une saisie sur un logiciel, j'ai une macro qui me réalise une duplication de lignes de métiers sur une autre feuille « Duplication », en fonction du maximum de personnes à affecter dans l'année. Exemple, dans une seule ligne de la feuille "Base", j'ai :

  • Colonne Projet = France,
  • Colonne Métier = Médecin,
  • Colonne Calendrier 04/01/2020 : J'ai "2" qui travaillent le 04/01/2020,
  • Colonne Calendrier 11/01/2020 : J'ai "4" qui travaillent le 11/01/2020,
La Macro va venir dans la feuille "Duplication", me mettre 4 lignes "Médecin" (car c'est le nombre maximal que j'aurai à affecter dans l'année 2020).

La Macro est déjà inclus dans le fichier. Là, il s'agit uniquement d'un fichier simplifié, mais mon vrai fichier contient plus de lignes que ça (allant jusqu'à 500 lignes des fois). Quand je lance la Macro, elle m'affiche le process à l'écran, et elle prend plus de temps quand il s'agit d'un gros document.

Peut-on l'optimiser s'il vous plaît ?

Je vous remercie.

Bonne journée.

Aydounette.

Salut Aydounette,

Voici un lien pour t'aider à rendre l'exécution de ta macro plus rapide !

Dans la partie Mettre à Off tout ce qui peut être mis à Off! je te conseil simplement de mettre dans ton cas :

Application.ScreenUpdating = False

Au début de ton code.

Ensuite, qui n'est pas précisé dans le lien, je te déconseille fortement d'utiliser des copié/collé en VBA. Cela ralentit énormément l'exécution de ta macro ! Alors oui c'est pratique car cela copie également la mise en forme, mais je te conseille plutôt de faire comme cela pour copier tes données :

    Dim CopyRange As Range
    Dim PasteRange As Range

    Set CopyRange = ThisWorkbook.Worksheets("TA_FEUILLE").Range("TA_PLAGE") 'La plage de données que tu veux copier
    Set PasteRange = ThisWorkbook.Worksheets("TA_FEUILLE").Range("TA_PLAGE") 'La plage de cellules où tu veux coller
    PasteRange.Value2 = CopyRange.Value2 'Copie /colle les données

    Set CopyRange = Nothing 'Vide la variable - À mettre à la fin de ta macro
    Set PasteRange = Nothing 'Vide la variable - À mettre à la fin de ta macro

Et ensuite tu réalises ta mise en forme en VBA. Cela sera bien plus efficace et propre.

Bonne chance !

Bonne journée,

Baboutz

Bonjour Baboutz,

Je vous remercie pour avoir pris le temps de consulter ma Macro.

Je vous avoue que je ne suis pas du tout experte en VBA. Le code que j'ai utilisé, je l'ai trouvé, un peu compris et l'ai modifié pour qu'il s'adapte à mon fichier.

Sinon (honte à moi ), je ne sais pas encore vraiment construire un vrai bloc de code.

J'ai mis ça comme ça mais ça n'a pas marché :

Sub CopieEnDuplication26()

Dim CopyRange As Range

Dim PasteRange As Range

Set CopyRange = ThisWorkbook.Worksheets("Base").Range([B6], [E6]) 'La plage de données que tu veux copier

Set PasteRange = ThisWorkbook.Worksheets("Duplication").Range([A6], [D6]) 'La plage de cellules où tu veux coller

PasteRange.Value2 = CopyRange.Value2 'Copie /colle les données

Set CopyRange = Nothing 'Vide la variable - À mettre à la fin de ta macro

Set PasteRange = Nothing 'Vide la variable - À mettre à la fin de ta macro

End Sub

Au secours !

Merci

Re,

C'est pour ça qu'il vaut mieux essayer de coder soit même sa macro en cherchant les fonctions sur internet que de copier/coller un pavé de code qu'on bidouille en priant pour qu'il marche On passe certes un peu plus de temps dessus, mais on comprend le code et on gagne en rapidité à le modifier s'il le faut et à refaire d'autres macros par la suite.

Voici ton fichier en pièce jointe, dis moi si ça te convient.

Avec un code beaucoup beaucoup plus simple, on obtient un meilleur résultat !

Bonne journée,

Baboutz

Rebonjour,

Encore merci pour votre retour.

C'est pour ça qu'il vaut mieux essayer de coder soit même sa macro en cherchant les fonctions sur internet que de copier/coller un pavé de code qu'on bidouille en priant pour qu'il marche On passe certes un peu plus de temps dessus, mais on comprend le code et on gagne en rapidité à le modifier s'il le faut et à refaire d'autres macros par la suite.

Vous avez tout à fait raison. Il faut juste réserver du temps pour ça et un peu de volonté. Malheureusement, le besoin est toujours dans l'urgence au boulot Mais promis je ferai l'effort

Voici ton fichier en pièce jointe, dis moi si ça te convient.

Je suis vraiment désolée de vous importuner encore une fois, mais au fait le résultat à l'écran de ma Macro initiale me convenait bien, je m'explique :

  • Lorsque dans la feuille "Base" j'ai par exemple le nombre "7" dans la colonne "MAX", ligne 8, je veux que la Macro me mette effectivement 7 lignes de Médecins dans la feuille "Duplication".
  • Je ne souhaite pas non plus avoir une ligne Projet qui délimite mes lignes métiers dans ma feuille "Duplication". Je souhaiterai que cette ligne projet se répète sur toutes les lignes des métiers concernés (voir image ci-dessous), sinon, ce n'est pas grave : soit enlever la colonne Projet dans la feuille "Duplication", soit la laisser vide s'il n'y pas de solution.

Ecran Idéal :

ecran

Ma Macro au fait me donnait le résultat souhaité (sauf pour la colonne projet), c'est juste que le temps que ça prenait pour mouliner était lent, j'avais également l'affichage du processus sur mon écran Excel, et je souhaitais voir s'il était possible de l'optimiser.

Je tiens à m'excuser de ne pas avoir été peut être plus explicite sur ce point. Est-ce possible de prendre cela en compte svp ?

Avec un code beaucoup beaucoup plus simple, on obtient un meilleur résultat !

J'en suis tout à fait certaine

Merci infiniment pour votre aide.

Bonne journée.

Re Aydounette,

En effet c'est de ma faute ! Je suis allé trop vite.

Je t'ai fait une macro propre qui normalement répond à ta demande. J'avoue que celle-ci est un peu plus compliqué que ce qui aurait pu être fait mais elle est propre et rapide

Cette proposition te convient mieux ?

J'ai commenté mon code pour t'aider à comprendre, mais je pense qu'il faudra que tu te renseignes un peu à côté pour bien le comprendre.

Bonne journée,

Baboutz

Baboutz,

Je vous remercie encore une fois pour votre aide.

La Macro marche parfaitement bien et correspond exactement à ce que je souhaitais avoir comme résultat.

Pas de soucis, je ferai en sorte de me renseigner de mon côté afin de mieux comprendre

Merci encore une fois pour votre temps et votre patience, c'est vraiment gentil.

Bonne année et meilleurs voeux !

Aydounette!

Avec plaisir Aydounette !

En espérant que cela se greffe bien avec votre précédente demande.

Bonne fête et mes meilleurs vœux également !

Bonne journée,

Baboutz

Rechercher des sujets similaires à "macro qui duplique lignes deja prete ameliorer"