Créer une macro avec IF et Copier-Coller

Bonjour,

J'aimerais créer une macro qui se lirait comme suit:

Sheets ("Sheet3") . Select

Range ("E8") . Select

SI(E8=2015; Copier-coller la plage de données se trouvant dans "Sheets2" à la suite des données se trouvant dans "sheets1" à la ligne 189.

Il y a déjà des données inscrites à partir de la ligne 1-188.

J'aimerais répéter la manœuvre à chaque changement d'année, à la suite des nouvelles données de l'année précédente.

Merci de votre aide

Bonjour et bienvenue sur le forum

Il serait plus facile de t'aider si tu joignais ton fichier.

A te relire.

gmb a écrit :

Bonjour et bienvenue sur le forum

Il serait plus facile de t'aider si tu joignais ton fichier.

A te relire.

Bonjour gmb,

Merci de ta réponse rapide

Voici les deux fichiers.

Je voudrais que lorsque la cellule E8 dans le fichier " PALMARÈS DES DIX DANSES LES PLUS POPULAIRES" indique une année (2015, 2016, 2017, l'année est changée manuellement par l'opérateur), la plage de données contenue dans le fichier "CLASSEMENT, Feuil2" se copie dans le fichier "CLASSEMENT, Classement" à la suite des données déjà inscrites (dans ce cas, à la ligne 189).

Après avoir été collées à la suite des autres données, la nouvelle plage sera triée par les noms de A - Z.

Merci encore de ton aide.

6classement.xlsx (105.42 Ko)

Bonjour

Un essai, si j'ai bien compris.

gmb a écrit :

Bonjour

Un essai, si j'ai bien compris.

Bonjour,

Je suis désolé mais je ne suis pas certain de comprendre ce que je dois faire avec le fichier que tu m'as retourné. Je l'ai téléchargé et Il ne contient que la notification ci-dessous, qui lorsque je click dessus me ramène au forum. Est-ce que je manque quelque chose ?

https://forum.excel-pratique.com/post286175.html#p286175

Je dois te dire que je suis assez novice en ce qui concerne les macros. Je me débrouille beaucoup mieux avec les formules.

Merci encore et bonne journée

Tu as écris :

Je voudrais que lorsque la cellule E8 dans le fichier.... indique une année (2015...

j'ai donc essayé de te satisfaire au mieux.

Ecris ou re-écris "2015" dans la cellule E8 et valide.

Le travail demandé s'effectuera alors....

Tiens-moi au courant !

A te relire.

gmb a écrit :

Tu as écris :

Je voudrais que lorsque la cellule E8 dans le fichier.... indique une année (2015...

j'ai donc essayé de te satisfaire au mieux.

Ecris ou re-écris "2015" dans la cellule E8 et valide.

Le travail demandé s'effectuera alors....

Tiens-moi au courant !

A te relire.

Merci beaucoup pour ta réponse rapide. La façon que tu as approché le problème fonctionne très bien. Les données se collent dans l'espace indiqué, mais.... il y a toujours un mais.

Étant donné que les données doivent s'accumuler d'une année à l'autre, elles doivent se coller dans un espace fixe (56 lignes), ce qui représente la plage de données dans la feuil2 du classement.

Donc, l'année 2015 doit se coller sur la ligne 189 du classement, à la suite des données déjà enregistrées, et la prochaine année doit se coller sur la ligne 245, et ainsi de suite durant, disons, les 25 prochaines années.

J'aimerais aussi qu'après que les données se soient collées, la même macro fasse un trie du tableau par les noms à partir de la ligne 4 jusqu'à la fin.

Serais-ce possible d'installer un bouton qui activerait la macro plutôt que par la cellule E8 ? Je te demande cela car la personne qui entre les données n'est pas du tout familière avec excel et je l'ai habitué à travailler avec des boutons.

Mes connaissances étant très limitées, le bouton me donnerait accès à la macro si jamais il se produit un problème.

Merci encore et bonne soirée

Un nouvel essai où j’ai ajouté le tri que tu souhaites.

Quant à ce que tu écris :

les données doivent s'accumuler d'une année à l'autre, elles doivent se coller dans un espace fixe (56 lignes), ce qui représente la plage de données dans la feuil2 du classement.

je ne comprends pas : pour les années déjà sur la feuille, on a 34 lignes pour 2014, 28 pour 2013, 27 pour 2012 etc… Le nombre n’est pas fixe…

Mais quoi qu’il en soit, la macro recopie toutes les lignes de la Feuil2 à la suite de celles qui existent sur la Feuille CLASSEMENT et leur donne l’année indiquée sur la feuille PAMARES en E8

Un détail : Le bouton est le logo « Acti-Danse ». Si tu veux le changer, je pense que tu sauras faire.

Bye !

gmb a écrit :

Un nouvel essai où j’ai ajouté le tri que tu souhaites.

Quant à ce que tu écris :

les données doivent s'accumuler d'une année à l'autre, elles doivent se coller dans un espace fixe (56 lignes), ce qui représente la plage de données dans la feuil2 du classement.

je ne comprends pas : pour les années déjà sur la feuille, on a 34 lignes pour 2014, 28 pour 2013, 27 pour 2012 etc… Le nombre n’est pas fixe…

Mais quoi qu’il en soit, la macro recopie toutes les lignes de la Feuil2 à la suite de celles qui existent sur la Feuille CLASSEMENT et leur donne l’année indiquée sur la feuille PAMARES en E8

Un détail : Le bouton est le logo « Acti-Danse ». Si tu veux le changer, je pense que tu sauras faire.

Bye !

Bonjour gmb,

Je ne te remercie jamais assez. Le tout fonctionne très bien, avec deux petits bémols....

J'ai remarqué que tu as crée 2 macros (report et Macro2) dans la feuille "Palmarès.....". Si je veux créer un bouton dans la feuille "Classement" pour activer la macro, plutôt que de l'activer à partir de la feuille "Palmarès..." j'applique le bouton sur la macro report mais dans la colonne F du classement, plutôt que de faire apparaître l'année, il y a un 1 qui s'inscrit. Je ne sais pas si je dois appliquer les 2 macros au même bouton pour que ça fonctionne ( je ne sais pas comment faire pour appliquer 2 macros au même bouton).

Aussi, dès que j'active la macro, une ligne blanche, contenant un zéro apparaît à la ligne 4 du classement. Normalement le "sorting" devrait garder les lignes vides au bas de la feuille. C'est pourquoi dans ma formule je change les zéros par "ZZ" afin qu'au moment du sorting les ligne contenant les zéros demeurent au bas de la page. Cette ligne se multiplie à chaque année. Ce qui fait que si tu entre 5 année, il y a 5 lignes vides à partir de la ligne 4. Je ne comprend pas pourquoi ces lignes apparaissent.

Encore une fois, merci beaucoup pour ton aide, j'apprécie beaucoup

PS: c'est lorsque je vois la macro que tu as crée que je me rend compte que je suis assez nul en VBA.

Tu écris :

J'ai remarqué que tu as crée 2 macros (report et Macro2) dans la feuille "Palmarès

C’est vrai mais en fait, la Macro2 est une macro enregistrée qui m’a servi à obtenir rapidement la syntaxe du tri que fait la macro Report. Elle ne sert plus et on peut la supprimer.

Pour ce qui concerne le lancement de la macro à partir de la feuille CLASSEMENT, il faut faire un additif.

En effet, à l’instruction :

Destination.Range("F" & Destination.Range("A" & Rows.Count).End(xlUp).Row).Value = Cells(8, "E").Value

elle va copier ce qui se trouve dans la cellule E8 de la feuille active et le colle dans la feuille CLASSEMENT, au bon endroit

Mais si tu lances la macro à partir d’une autre feuille, et à fortiori d’un autre fichier, la feuille active n’est plus Palmarès. D’où le bug.

Dans la nouvelle version ci-jointe, J’ai donc rusé en commençant de repérer dans tous les fichiers ouverts la feuille qui contient « Le Palmarès » en E8 : c’est la feuille PALMARES. En espérant qu’il n’y en aura jamais d’autre…

Et j’ai modifié en conséquence l’instruction qui posait problème :

Destination.Range("F" & Destination.Range("A" & Rows.Count).End(xlUp).Row).Value = Palmarès.Cells(8, "E").Value

Cela te convient-il ?

Bye !

12classement.xlsx (123.94 Ko)
gmb a écrit :

Tu écris :

J'ai remarqué que tu as crée 2 macros (report et Macro2) dans la feuille "Palmarès

C’est vrai mais en fait, la Macro2 est une macro enregistrée qui m’a servi à obtenir rapidement la syntaxe du tri que fait la macro Report. Elle ne sert plus et on peut la supprimer.

Pour ce qui concerne le lancement de la macro à partir de la feuille CLASSEMENT, il faut faire un additif.

En effet, à l’instruction :

Destination.Range("F" & Destination.Range("A" & Rows.Count).End(xlUp).Row).Value = Cells(8, "E").Value

elle va copier ce qui se trouve dans la cellule E8 de la feuille active et le colle dans la feuille CLASSEMENT, au bon endroit

Mais si tu lances la macro à partir d’une autre feuille, et à fortiori d’un autre fichier, la feuille active n’est plus Palmarès. D’où le bug.

Dans la nouvelle version ci-jointe, J’ai donc rusé en commençant de repérer dans tous les fichiers ouverts la feuille qui contient « Le Palmarès » en E8 : c’est la feuille PALMARES. En espérant qu’il n’y en aura jamais d’autre…

Et j’ai modifié en conséquence l’instruction qui posait problème :

Destination.Range("F" & Destination.Range("A" & Rows.Count).End(xlUp).Row).Value = Palmarès.Cells(8, "E").Value

Cela te convient-il ?

Bye !

Bonjour gmb,

Comme mentionné précédemment, je ne te remercierai jamais assez pour ton aide.

Tout fonctionne parfaitement.

Dans mon message précédent je te mentionnais qu'il y avait un problème concernant la première ligne qui s'affichait vide avec un zéro.

J'ai regardé ta macro et j'ai vu que tu indiquais le C. Value <> "" and C. Value <> "zz"". alors j'ai ajouté C. Value <> "0". Ça a éliminé la première ligne avec le zéro et le tout fonctionne parfaitement.

Merci encore de ton aide. En espérant que je pourrai un jour faire de même pour quelqu'un d'autre.

Rechercher des sujets similaires à "creer macro copier coller"