Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Copie onglet vers autre classeur

pompaero

XLDnaute Impliqué
Bonjour le forum

J'aimerai de l'aide pour le petit projet que je suis en train de construire, j'ai déjà bien avancé, j'en suis arrivé à l'enregistrement pour archive.
Il s'agit d'un classeur pour mon travail que l'on va utiliser tous les jours. et par l'ensemble du personnel du service.
Il s'agit de copier l'onglet MC vierge vers le classeur Archive MC, créer un pdf puis remettre à l'initiale. Pour cela j'ai chercher sur le net et le forum puis arrivé à faire ces quelques macros, mais je l'avoue reste du niveau de débutant. C'est la que j'aimerai le savoirs des pro afin d'améliorer ces macros en un code fonctionnel et surtout sans bug.
Est-il possible de mettre un MsgBox de confirmation en début de code ? comme par ex : Souhaitez-vous clôturer cette journée ?
Puis si la date existe deja, pouvoir l'enregistrer tout de même (MC 28-08-18 et 28-08-18(1) )
Mes codes :
* fin-service (module 1)
'''MACRO affichage heure quand on valide fin de service
Sub ligne()
ActiveCell.Offset(-0, -1) = Format(Now, "hh:mm")
End Sub
'##########
Sub fin_service()
Dim monClass As Workbook, Chemin As String
Set monClass = ThisWorkbook
Chemin = monClass.Path
Application.EnableEvents = False
[C65536].End(xlUp)(2).Select
ActiveCell = "Journée clôturée" '"Fin de service"
Call ligne
Range("A7").Select
With monClass
Workbooks.Open ("C:\Users\F Leroy\Desktop\ADMINISTRATIF France\DOCUMENTS ENREGISTRES\Main courante\Archives M C.xlsm") 'Chemin & "\Archives M-C.xlsm" 'A ADAPTER !!!!!
.Sheets("MC vierge").Copy after:=Workbooks("Archives M C.xlsm").Sheets(1)
End With
ActiveSheet.Name = "MC du " & Format(Range("C2"), "dd-mm-yy") 'Format(Date, "dd-mm-yy")
'[C4] = Date
ActiveSheet.Protect Password:="1234"
Workbooks("Archives M C.xlsm").Close True
monClass.Sheets("MC vierge").Activate
Range("A1").Select
Application.EnableEvents = True
End Sub
* SaveAsPDF
Sub SaveAsPDF() 'Enregistrement MC Vierge en pdf
Dim FileN$
FileN = Format(Year(Date), "00") & Format(Month(Date), "00") & _
Format(Day(Date), "00") & " " & Format(Time, "hhmmss") & ".pdf"
ChDir "C:\Users\F Leroy\Desktop\ADMINISTRATIF France\Document originale NE PAS TOUCHER\Main-courante"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\F Leroy\Desktop\ADMINISTRATIF France\DOCUMENTS ENREGISTRES\Main courante\M C-pdf\M-C " & FileN, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
MsgBox "Main courante enregistrée en PDF", vbInformation, "Enregistrement en PDF"
End Sub
* Mise à l'initial
Sub Reinitialise()
[I2,K2,D5,D89,D1213,D1617,B20:C20,M20:N20] = ""
[B1919] = False
[H18] = 5
[C2] = Date
'reste à supprimer les lignes à partir de la 23
End Sub
Soucis que je rencontre également, est que les liens et codes des objets restent et créé des liaisons inutile, serait-il possible de les supprimer à l'enregistrement dans le classeur Archive MC ?

Merci à vous par avance.
Cdlt pompaero

Je joins le classeur de l'onglet à copier.
 

Pièces jointes

  • Main courante modele.xlsm
    152.7 KB · Affichages: 35

Lone-wolf

XLDnaute Barbatruc
Bonjour pompaero

Il s'agit de copier l'onglet MC vierge vers le classeur Archive MC
Depuis le temps que tu es sur XLD, tu pourrais mettre le code dans la balise CODE.

Note: pour l'instant je ne peux pas travailler avec Excel, je suis entrain d'installer Visual Studio, et ça le bloque.
 
Dernière édition:

pompaero

XLDnaute Impliqué
Bonjour Lone-wolf

Je suis entièrement d'accord avec toi concernant la balise Code, mais je suis sincèrement désolé car je ne l'ai pas trouvé.
Sinon, merci pour ton retour de fichier, je regarde ça demain à tête reposé et reviens te dire.

Cdlt
pompaero
 

pompaero

XLDnaute Impliqué
Bonjour Lone-wolf

Excuse du silence, le travail oblige.
J'ai mis ton code en place sur mon classeur, après quelques essais et réglages le résultat est déjà très bien. Pourquoi très bien, car j'ai quelques petits soucis d'adaptation. J'explique :
J'ai commencé par ajouter une protec sheet dans Archive MC, comme cela,
Code:
    WbSource.ActiveSheet.Name = nom
    ActiveSheet.Protect Password:="123"
    ActiveWorkbook.Close True
et au passage, je viens de trouver les balises code
mes petits soucis,
1) Peut-on mettre en début de code un MsgBox "Etes vous certain de clôturer cette journée ?" non on quitte, oui la procédure se lance, par exemple.
2) ma macro qui recherche les consignes n'ai pas top car elle cherche que la date début (col B) et il faudrait que ça recherche entre les dates début et fin puis affiche les consignes si la colonne H (Finaliser) n'est pas renseigné.
3) A l'ouverture de Archive MC, il faut mettre les liaisons à jour (c'est chiant.. ) est il possible de les supprimer ?
4) Si dans Archive MC, on enregistre plus d'une fois le même jour est il possible d'ajouter derrière "MC du 01-09-18" par exemple un N° (1) ou pourquoi pas l'heure.
ça sera tout pour un début. il y a un problème avec
Code:
    With Sh
        .Range("C2,D5,D8,D9,D12,D13,D16,D17,I2,K2,B20:C20,M20:N20").ClearContents
rien ne s'efface mais ça je vais essayer de voir par moi même.
Désolé d'en demander autant d'un coup.
Merci

Cdlt
pompaero
 

pompaero

XLDnaute Impliqué
Re
Je viens de trouver le soucis 1) MsgBox...
Est-ce correct ?
Code:
Sub fin_service()
Dim monClass As Workbook, WbSource As Workbook, Sh As Worksheet
Dim plage As Range, cel As Range, nom$, FileN$, i&

If MsgBox("Etes-vous certain de clôturer cette journée ?", vbQuestion + vbYesNo) <> vbNo Then

    Set monClass = ThisWorkbook
    Set Sh = monClass.Sheets("MC Vierge")
    Set cel = Sh.Range("B" & Rows.Count).End(xlUp)(2)

ect....

End if
End Sub
j'suis content
 

pompaero

XLDnaute Impliqué
Re encore

Je pense avoir trouvé le soucis 4) !! enregistrer plus d'une fois par jour, j'ai fais :
Code:
    Sh.Copy After:=WbSource.Sheets(Sheets.Count)
    nom = "MC du " & Format(Sh.Range("C2"), "dd-mm-yy") & " " & Format(Time, "hhmm")
tout simplement ajouter l'heure, est-ce correct ?
 

job75

XLDnaute Barbatruc
Bonjour pompaero, Lone-wolf, ChTi160, le forum,

Pour ce qui est des liaisons, si l'on veut éviter le message à l'ouverture du fichier "Archives M C.xlsm", il suffit de placer avant Workbokks.Open l'instruction Application.DisplayAlerts = False

Maintenant s'il s'agit de liaisons inutiles il faut les supprimer manuellement : déposez ici le fichier "Archives M C.xlsm".

Pour la question 2 ce n'est pas clair, pas cherché à comprendre !

A+
 

pompaero

XLDnaute Impliqué
Bonjour Lone-wolf, ChTi160, le forum,

Lone-wolf, pas de soucis pour la suite, tu a déjà fait beaucoup, ce qui ma fait énormément avancé, grand merci et certainement à bientôt.
ChTi160, merci de te joindre à nous, c'est sympa. Concernant la date dans la cellule "Sh.Range("C2")", c'est en général la date du jour de la main courante que l'on renseigne.
Est-ce que pour toi le reste est faisable pour la 2 et 3 ?
la 2, revoir la macro consigne qui affiche les consignes dans main courante, seulement l'affichage se fait sur la date début et il faudrait qu'elles puissent s'afficher par rapport à la date début jusqu'à la date fin si la col H (finaliser) n'est pas renseignée.
la 3, pouvoir supprimer ou trouver une parade de manière à ne pas avoir les liens et codage à l'enregistrement dans Archive MC.
dernier point afin de finaliser le projet, de supprimer dans la remise à l'initiale, à partir de la ligne 23 jusqu'à la dernière ligne renseignée.
Merci de votre aide
Cdlt
pompaero
 

pompaero

XLDnaute Impliqué
Bonjour Job75

Merci également de te joindre à nous.
Je viens de mettre en place ta proposition, mais toujours le message à l'ouverture de Archive MC.

Je joins les 2 fichiers.
Cdlt
pompaero
 

Pièces jointes

  • Main courante modele.xlsm
    156.5 KB · Affichages: 24
  • Archives M C.xlsm
    177.7 KB · Affichages: 28

ChTi160

XLDnaute Barbatruc
Bonjour pompaero
Bonjour le Fil , le Forum
Effectivement ta cellule "H7" fait référence à la Macro" consignes" soit "=consignes(C2)" du fichier "Main Courante modele"
ii faudrait peut être faire :
soit si c'est possible ne transférer que les valeurs sans les Formules.
dans la méthode "Copy"
VB:
Sh.Copy After:=WbSource.Sheets(Sheets.Count)
ou un truc du genre :
VB:
 With WbSource.ActiveSheet
        .Name = nom
        .Cells = .Cells.Value 'on recopie les valeurs
    End With
en espérant avoir pu t'aider
Bonne fin de journée
jean marie
 

pompaero

XLDnaute Impliqué
Bonjour ChTi160, le fil, le forum,

c'est sympa, mais malheureusement toujours le même résultat. J'ai même supprimé la formule en H7 pour voir si ça venait de ça.
c'est chiant..
il reste que ce gros soucis à résoudre et je devrai voir le bout. Je pense qu'il me faudrait refaire une macro pour afficher les consignes.
merci de ton aide tout même.

pompaero
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…