Microsoft 365 Copier/coller d'un onglet à l'autre correspondant au mois

TAL

XLDnaute Occasionnel
Bonjour,

Après plusieurs semaine de recherche, de prise de tête, de recherche sur d'autres forums, sur des vidéos, je viens vers vous pour obtenir à nouveau de l'aide, si cela est possible.

Je cherche a avoir une macro qui me permettrait de recopier le contenu d'une feuille dans une autre feuille.

Avec votre aide, j'ai cherché a automatiser un planning et des feuilles d'émargements.

Les deux fonctionne de la même façon, bon, je n'ai pas trouver comment faire pour que le choix du mois et de l'année qui se trouve sur la feuille Planning soit commune aux deux feuilles, mais ça fonctionne.

Pour le copier/coller, ce que je voudrais c'est :

que le premier mois dans Planning se copie/colle dans le premier mois de la feuille Emargement

que le deuxième mois dans Planning se copie/colle dans le deuxième mois de la feuille Emargement

et ainsi de suite.

Pour compliquer la chose, se copier/coller ne concerne que certaines cellules du Planning et ce colle sur certaines cellules dans Emargement.

Ci-dessous les correspondances entre la feuille Planning et la feuille Emargement.

Ces références, ne concerne que la première ligne mais il faut que se soit pour toutes les lignes et en fonction du mois.

PlanningEmargement
E5copie dansD12
F5copie dansH12
H5copie dansE12
L5copie dansI12
M5copie dansM12
O5copie dansJ12
et ainsi de suite pour tous les jours de la semaine sur tous les mois.

Je vous joins le fichier.

Par avance, merci pour votre aide
 

Pièces jointes

  • Essai 2_v_12.xlsm
    158 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Tal,
Un essai en PJ :
VB:
Sub Emargement()
Dim DL%, L%, Lw%, MaDate
Application.ScreenUpdating = False
With Sheets("Emargement")
    DL = Range("E65500").End(xlUp).Row
    For L = 5 To DL
        ' Si ligne paire prendre cell même ligne sur C, sinon prendre ligne-1. Argh ! les cllules fusionnées !
        If L Mod 2 <> 0 Then MaDate = Cells(L, "C") Else MaDate = Cells(L - 1, "C")
        If Application.Count(.[C:C], MaDate) > 0 Then   ' MaDate existe t-elle dans la feuille Emargement
            Lw = Application.Match(CLng(MaDate), .[C:C], 0)   ' Si oui, à quelle ligne Lw ?
            If L Mod 2 = 0 Then Lw = Lw + 1             ' Idem si L paire alors ligne suivante.
            .Cells(Lw, "D") = Cells(L, "E")             ' Transfert valeurs de Planning vers Emargement.
            .Cells(Lw, "H") = Cells(L, "F")
            .Cells(Lw, "E") = Cells(L, "H")
            .Cells(Lw, "I") = Cells(L, "L")
            .Cells(Lw, "M") = Cells(L, "M")
            .Cells(Lw, "J") = Cells(L, "O")
        End If
    Next L
End With
End Sub
 

Pièces jointes

  • Essai 2_v_12 (1).xlsm
    163.5 KB · Affichages: 3

TAL

XLDnaute Occasionnel
Bonsoir Sylvanu et heureuse de te retrouver !

Peux t'on faire en sorte que tout s'enregistre automatiquement sans avoir besoin de cliquer sur le bouton "Mise à jour émargement" et ce quelque soit le mois ou l'année demandé.
En effet, ce fichier sera un modèle Excel, il servira à pas mal de personnes, et chacun se l'appropriera selon ces besoins, ce qui veut dire, qu'ils peuvent tout aussi bien faire démarrer le planning et bien entendu du coup la feuille Emargement au mois de Mars de l'année 2025 par exemple, ou alors Novembre 2024 ou Juillet 2023 etc.

Merci de ton aide
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Tal,
Voir PJ.
Comme il y a déjà partout des Worksheet_Change, je n'ai pas voulu prendre de risque.
J'ai juste ajouté dans Planning :
VB:
If Intersect(Target, [Mois,Année]) Is Nothing Then
    EnregModif Target.Address
    Exit Sub
End If
pour enregistrer chaque cellule modifiée.
Et quand on sort, je resynchronise l'ensemble de Emargement par rapport à planning.
 

Pièces jointes

  • Essai 2_v_12 (V2).xlsm
    167.9 KB · Affichages: 4

TAL

XLDnaute Occasionnel
Bonsoir Sylvanu et merci.

Si on peut simplifier les Worksheet_Change, je suis preneuse ;)
J'ai essayé, grâce à votre aide et celui du forum, d'adapter votre premier code qui était à la base pour le planning sur l'émargement.
Étant, total complément nul en VBA, je ne fais qu'essayer d'adapter vos codes à mes besoins, mais créer ou simplifier les codes, c'est la cata.

Donc, d'après ce que je comprends, je saisie dans chaque cellule est je valide à chaque fois pour que cela se copie sur l'émargement.

N'y aurait-il vraiment pas moyen que lorsque l'on saisi sur le planning cela s'enregistre automatiquement directement dans les cellules Emargement, sans que l'on ai à valider ?

L'enregistrement d'un mois sur l'autre du planning fonctionne très bien, je peux naviguer de mois en mois, revenir en arrière et je retrouve toutes mes saisies, c'est génial.

Pour ce qui est de la copie sur l'onglet Emargement, le premier mois est pris en compte et pour les mois suivants, la première saisie que je valide est bonne, mais en suite plus rien.

Je me demande, si ta première idée du bouton "Mise à jour Emargement", je ne devrais pas le rajouter en 14ème position à côté de la sélection des mois, plus précisément après le bouton "tout" qui est sur la première ligne de la feuille planning et systématiquement tout se mettrait à jour en une seule fois et quelque soit le mois. Humm ! à méditer.

Voilà si tu peux encore m'aider, merci pour tout en cas
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
N'y aurait-il vraiment pas moyen que lorsque l'on saisi sur le planning cela s'enregistre automatiquement directement dans les cellules Emargement, sans que l'on ai à valider ?
Qu'appelez vous "valider" ? Un appui sur Entrée ?
Si c'est ça, alors il ne faut pas utiliser Worksheet_Change, car son déclenchement se fait sur Entrée.
Sinon ça marche bien. Par ex :
Je choisis Févr 2024
le 1er février E239 je tape 123456 puis Entrée
Sur Emargements le 01/02/2024 je retrouve bien 123456.

Ensuite je n'ai pas analyser ce que faisait votre macro, c'était hors périmètre.
En PJ, j'ai remis le bouton en haut, et sans passer par Worksheet_Change.
 

Pièces jointes

  • Essai 2_v_12 (1) (2).xlsm
    163.8 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Une evol possible dans la dernière PJ est de modifier AfficherMois en rajoutant Emargement :
VB:
ub AfficherMois()
    ' Est appelée par boutons des mois ou par Worksheet_Change
    Application.ScreenUpdating = False
    Emargement  ' Enregistre les infos dans Emargement
    Dim Début, Fin, Mois, ChaineMoisDébut, ChaineMoisFin
De cette façon à chaque fois qu'on change de mois, on enregistre tout dans Emargement.
car sinon si ça n'a pas été enregistré auparavant, peut être existe t-il un cas où des infos seraient perdues.
 

TAL

XLDnaute Occasionnel
😅 oui en effet, il a dû y avoir un bug au moment du téléchargement.

Je regarde tout ça demain, mais déjà l'avant dernière version fonctionne bien, la validation mois par mois. Demain je regarde avec le post #8. Merci beaucoup en tout, je vous tiens au courant demain. Merci beaucoup

Bonne nuit
 

TAL

XLDnaute Occasionnel
Bonsoir Sylvanu

Ca marche, c'est génial !!!!!

Cela veut-il dire qu'avec le complément de la dernier macro sur AfficherMois "Emargement ' Enregistre les infos dans Emargement" je n'ai plus besoin du bouton "Mise à jour Emargement ?

Si je vous demande une macro pour afficher ligne et une macro pour masquer ligne, suis-je hors contexte ? Je voudrais ajouter dans le ruban, un onglet personnalisé avec un bouton afficher et un bouton masquer. (Sur le mois en cours, si rien dans les dates, c'est à dire entre la colonne D et la colonne Q pour Planning alors je peux masquer, Idem pour Emargement, sur le mois en cours, si rien dans les dates, c'est à dire entre la colonne D et la colonne N, alors je peux masquer).

Et une dernière chose, il y aurait il possibilité de faire une boucle, je crois que c’est comme ça que l’on dit, de faire en sorte que lorsque je suis en fin de mois du dernier mois et que je veuille aller sur le premier mois, que ce soit bien le début du mois qui s’affiche et non la dernière ligne du dernier mois. Je dois systématique soit remonter avec la barre de progression soit cliquer sur le 2ème mois et ensuite le 1er mois pour qu’il s’affiche correctement.

En tout cas Merci Sylvanu, merci beaucoup de votre aide !!!! Merci, merci merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Cela veut-il dire qu'avec le complément de la dernier macro sur AfficherMois "Emargement ' Enregistre les infos dans Emargement" je n'ai plus besoin du bouton "Mise à jour Emargement ?
Bien vérifiez toutes les configurations.
Par ex si quelqu'un enregistre le fichier et sort d'XL, que faites vous quand vous l'ouvrez de nouveau? N'y a t-il pas un risque de pertes de données ? etc, etc ...
Le garder est à mon avis plus sécure, mais je ne maitrise pas tout vos macros, loin de là.
Je voudrais ajouter dans le ruban, un onglet personnalisé avec un bouton afficher et un bouton masquer.
Là, oui, faites un nouveau post. Mais avec Office365 vous allez être déçu des réponses. Je crois qu'il faut passer par un logiciel tiers pour toucher au ruban.
lorsque je suis en fin de mois du dernier mois et que je veuille aller sur le premier mois, que ce soit bien le début du mois qui s’affiche et non la dernière ligne du dernier mois.
Rien compris. :(
fin de mois du dernier mois : C'est à dire le 31 décembre ?
le début du mois qui s’affiche : Donc janvier ?
 

TAL

XLDnaute Occasionnel
Oups, trop vite, j'ai voulu changé d'année sur le planning et voilà ce qu'il m'affiche, il me met en débogage
Erreur d'exécution'13':
Incompatibilité de type
1678311101896-png.1165303


Et sur Emargement, quand je change aussi l'année, il me met en débogage aussi
1678311645700.png
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 123
Membres
112 666
dernier inscrit
Coco0505