Copier / Coller d'une feuille à l'autre

Bonjour à tous,

Dans mon fichier joint, j'ai un onglet "CDI-CDD_SDVD" ainsi que 3 onglets représentants chaque semaine "1", "2" et "3.

Je souhaiterais qu'en cliquant sur le bouton "insérer" présent dans les 3 onglets représentants chaque semaine, la macro aille chercher dans l'onglet "CDI-CDD_SDVD", les noms et le planning de la semaine correspondante en fonction du numéro de l'onglet, pour les coller à partir de la cellule B10.

Exemple :

Onglet "1" -> insérer les noms + planning de la semaine 1 contenu dans l'onglet "CDI-CDD_SDVD".

J'ai mis quelques commentaires dans le fichier afin d'être le plus précis possible.

Merci pour le temps passé sur ma demande.

Domdom49

9test-import.xlsm (23.43 Ko)

Bonjour, à tester

ps: j'ai utilisé des plages nommées pour faciliter le code, j'ai aussi utilisé les noms de pages comme nombre, du coup si votre fichier original n'est pas construit de la même manière il va y avoir des soucis ^^

25test-import.xlsm (36.75 Ko)

Bonjour Guitouille,

Merci pour ton aide.

Mon fichier source a la même structure, donc je pense qu'il n'y aura pas de souci lors de l'adaptation.

Par contre, en complément de cette macro, je souhaiterais aussi qu'il y ait une autre importation de données, cette fois à partir de l'onglet "Autres".

A la suite du processus que tu as brillamment développé, je souhaiterais que la macro aille chercher dans l'onglet "Autres" les noms qui n'ont que SA, FOR et RMP (avec des X) comme activité, pour ensuite les coller à la suite des noms précédemment collés, toujours pour la semaine concernée.

Une fois de plus, tout est détaillé dans le fichier joint.

Merci de ton aide.

Bonsoir Guitouille, le forum,

Après vérification, il s'avère qu'effectivement, le fait de nommer les plages de cellules pose un souci, dans le sens où la liste de noms est amené à s'allonger.

Après avoir fouillé sur le net, j'ai adapté un bout de code comme suit pour les 3 onglets :

Sub Cop_Col_SDVD_S1()
' Je sélectionne l'onglet "CDI-CDD SDVD"
With Sheets("CDI-CDD SDVD").Select
' Je copie tous les noms à partir de la cellule C17 pour les coller dans l'onglet "1" à partir de la cellule B10
Range("C17:C" & Range("C" & Rows.Count).End(xlUp).Row).Copy Sheets("1").Range("B10")
' Je copie ensuite la plage de cellules non vides de D17 à I65635
' pour les coller dans l'onglet "1" à partir de la cellule C10
Range([D17], [I65635].End(xlUp)).Copy Sheets("1").Range("C10")
' J'affiche ensuite l'onglet "1"
With Sheets("1").Select
End With
End With
End Sub

Sub Cop_Col_SDVD_S2()
' Je sélectionne l'onglet "CDI-CDD SDVD"
With Sheets("CDI-CDD SDVD").Select
' Je copie tous les noms à partir de la cellule C17 pour les coller dans l'onglet "2" à partir de la cellule B10
Range("C17:C" & Range("C" & Rows.Count).End(xlUp).Row).Copy Sheets("2").Range("B10")
' Je copie ensuite la plage de cellules non vides de J17 à O65635
' pour les coller dans l'onglet "2" à partir de la cellule C10
Range([J17], [O65635].End(xlUp)).Copy Sheets("2").Range("C10")
' J'affiche ensuite l'onglet "2"
With Sheets("2").Select
End With
End With
End Sub

Sub Cop_Col_SDVD_S3()
' Je sélectionne l'onglet "CDI-CDD SDVD"
With Sheets("CDI-CDD SDVD").Select
' Je copie tous les noms à partir de la cellule C17 pour les coller dans l'onglet "3" à partir de la cellule B10
Range("C17:C" & Range("C" & Rows.Count).End(xlUp).Row).Copy Sheets("3").Range("B10")
' Je copie ensuite la plage de cellules non vides de P17 à U65635
' pour les coller dans l'onglet "3" à partir de la cellule C10
Range([P17], [U65635].End(xlUp)).Copy Sheets("3").Range("C10")
' J'affiche ensuite l'onglet "3"
With Sheets("3").Select
End With
End With
End Sub

Cette méthode fonctionne bien, puisque j'obtiens bien les copier-coller voulus.

Cependant, afin d'optimiser le tout, j'aurais 2 questions :

1ère question, au-delà du fait qu'il faille une macro par bouton, le code est-il bien écrit ?

2ème question, sachant qu'il y a en tout 52 onglets pour les 52 semaines, n'y a-t-il pas un moyen de rendre dynamique la sélection de la plage de cellules à copier en fonction de la semaine ? Le but étant de n'avoir qu'une seule macro pour les 52 semaines.

Ex pour la semaine 1 : de la 1ère à la 6ème colonne après la colonne "Noms" (au lieu de col D à col I)

Ex pour la semaine 2 de la 7ème à la 12ème colonne après la colonne "Noms" (au lieu de col J à col O)

Ex pour la semaine 3 de la 13ème à la 18ème colonne après la colonne "Noms" (au lieu de col P à col U)

Je joins à nouveau le fichier qui vous servira d'exemple.

Merci d'avance pour votre aide,

Domdom49

Bonjour, je regarde ça quand j'ai le temps.

Super, merci beaucoup Guitouille.

J'ai commencé à regarder, pour le moment j'ai "réussi" a sortir la macro pour toutes les pages, fais des essais pour déjà valider cette partie et quand j'ai un moment je regarde la suite.

Guitouille,

Que dire, si ce n'est good job !!

Tout fonctionne à merveille.

Maintenant une petite variante. Dans l'onglet "CDI-CDD SDVD", il peut y avoir des semaines pour lesquelles les gens n'ont pas d'activité.

De ce fait, il n'y a aucun intérêt à les faire apparaître dans l'onglet de la semaine correspondante.

Peux-tu ajouter cette exception stp ?

Comme d'habitude, tout est clairement expliqué dans le fichier joint.

Merci pour le temps que tu passes à m'aider.

Domdom49

Encore moi,

test cette macro avec différents cas voir si elle se comporte bien, son dressage a été chaotique !

edit: je corrige quelques points !

edit 2 : j'ai fini de corriger mes points !

Guitouille,

Après tests, il s'avère que lorsque les colonnes du Lu au Sa sont vides, le nom correspondant n'est pas pris en compte et n'apparait donc pas.

Pour ce cas de figure, c'est ok, c'est ce que je souhaitais.

Mais là où la macro pèche, c'est lorsque la colonne du Lu est vide, il se crée un décalage, et le planning n'est plus bon du tout.

En revanche si la colonne Lu et 1 ou X ET que la ou les suivante de la même ligne sont vides, ça fonctionne aussi.

En gros ce qui pose problème, c'est le Lu vide avec des 1 ou X sur les colonnes suivantes.

J'espère que ces indications pourront t'aider.

Merci à toi.

Domdom49

Bien vu, une erreur de ma part dans le choix de la colonne pour trouver à quelle ligne coller,ça devrait être réglé,

Merci Guitouille,

Le copier-coller fonctionne, il n'y a plus de souci.

Par contre j'ai un problème avec la ligne 3. Tu verras dans le fichier joint, en C3, il y a la somme de C10 à C30 pour me dire combien de personne seront présentes le lundi, et ainsi de suite pour les autres jours.

Lorsque l'on clique sur le bouton, le copier coller fait son rôle et supprime les éventuelles lignes vides, et du coup, cela "perturbe" mon calcul.

Comment faire pour que mon calcul reste intacte ?

J'ai imaginé faire ce calcul via une macro, mais du coup, je ne pourrais plus voir en temps réel l'évolution de mon effectif si je décide de mettre un "X" au lieu d'un "1" dans ma colonne.

Tu vois une solution ?

Merci d'avance.

Domdom49

Bonjour, je passe en coup de vent,

j'ai changé un peu la macro, au lieu de supprimer les cellules, elle supprimer les bordures puis les valeurs, à tester toujours ! :p

bonne soirée !

Bonjour Guitouille,

Désolé pour cette réponse tardive, mais week-end du 15 aout oblige, j'espère que tu as pu en profiter aussi .

Le total est correctement affiché, une nouvelle fois merci et bravo.

Maintenant, en complément de cette macro, je souhaiterais aussi qu'il y ait une autre importation de données, cette fois à partir de l'onglet "Autres". A la suite du processus que tu as brillamment développé, je souhaiterais que la macro aille chercher dans l'onglet "Autres" les noms qui n'ont que SA, FOR et RMP comme activité, pour ensuite les coller à la suite des noms précédemment collés, ET remplacer les SA et RMP par "1" toujours pour la semaine concernée.

Comme d'habitude, les explications complémentaires pour illustrer ce que je souhaite sont dans le fichier.

Merci !!

Bonjour,

toujours à tester !

edit1: j'ai aussi remplacé les FOR par des 1, si ce n'étais pas voulu, on peut toujours changer ça ^^

If Cells(ligne, i).Value = "SA" Or Cells(ligne, i).Value = "FOR" Or Cells(ligne, i).Value = "RMP" Then

remplacé par

If Cells(ligne, i).Value = "SA" Or Cells(ligne, i).Value = "RMP" Then

dans la procédure remplacer_par_des_uns

Bonjour Guitouille,

Effectivement, les "FOR" le doivent pas être remplacés par des "1", j'ai donc modifié avec le code.

Nous y sommes presque, il reste juste une petite chose pour que l'ensemble soit parfait :

Lors du processus de copier/coller des éléments de l'onglet "Autres" vers la semaine concernée, j'aimerai aussi garder la mise en forme (couleurs et bordures identiques à celles d'origine.

Penses-tu que cela soit possible ?

Merci

Bonjour,

C'est pas exactement la même mise en forme mais ça a l'air de marcher.

Guitouille,

Je reviens sur le sujet de la mise en forme des cellules, et notamment sur la couleur de fond qui a une grande importance dans mon fichier final, Il est donc très important aussi d'avoir à respecter la mise en forme donc lors du copier-coller.

Pour résumer, le copier-coller est maintenant efficace au niveau des noms à importer.

Il ne reste qu'à respecter la mise en forme par le biais de la macro sans doute (comme dans le tableau en exemple ci-dessous), et faire en sorte d'obtenir à nouveau le nombre de personnes dans la ligne "Effectif", car cela ne fonctionne plus.

Tu peux jeter un oeil sur mon fichier joint.

Merci encore.

Domdom49

Je repasse,

Pour la mise en forme, j'en avais fais une au pif, j'ai changé un peu la macro, elle copie plus ou moins la mise en forme, je ne sais toujours pas si c'est ce que tu souhaite, à voir du coup !

edit1: j'avais oublié d'enlever une dernière ligne dans la macro, ça devrait avoir plus de gueule maintenant

edit2: comme au dessus !

edit3: pour les sommes que tu calcule, tes formules sont "statiques", elle calculent la somme d'une plage définie, si le nombre de lignes du tableau augmentent, elle ne se mettent pas à jour.

edit4: j'ai ajouter un bout à la macro du fichier qui ajoute une ligne Effectifs tout en bas de chaque tableau QUAND on les importe, du coup elles ne se mettent pas à jour si tu change les valeurs du tableau (il faudrait changer la valeur directement dans le tableau depuis lequel on exporte avant de l'importer de nouveau pour le "rafraîchir"), si ça t'intéresse quand même, dis le moi et je le posterais, sinon quelqu'un de balèze en formules devrait pouvoir t'aider (peut-être en nommant les plages à sommer pendant la macro on peut retomber sur ses pattes avec la bonne formule).

21test-import.xlsm (79.66 Ko)

Bonjour Guitouille.

La mise en forme est bien prise en compte, super !

Il reste juste une dernière chose que je n'ai pas vu venir, c'est qu'en plus de la mise en forme lors du copier-coller, il faut aussi prendre les commentaires des cellules des feuilles CDI-CDD SDVD et Autres pour les coller dans la semaine concernée.

Je ne te mets pas de pièce jointe, mais tu peux partir du dernier fichier que tu as posté pour éviter de "dérégler" le reste !

Merci à toi.

Domdom49

Rechercher des sujets similaires à "copier coller feuille"