VBA pour imprimer auto

Dim.Reichart

XLDnaute Occasionnel
Bonjour,
Je débute en VBA (j'ai commencé ce matin, merci à l'enregistrement auto de macro), mais la j'ai du mal.
Donc, je vous explique:
-En AF4, j'ai une liste déroulante de mois de l'année
-En AJ4, une liste déroulante des années
-Sur G9:AN16, un tableau de planning, la ligne 16 est celle des totaux
-le nom de l'agent en M6

Donc, voici ce que j'ai pour l'instant:
VB:
Private Sub CommandButton1_Click()
'
' Imprimer_pointage Macro
'

'
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$G$1:$AN$16"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.708661417322835)
        .RightMargin = Application.InchesToPoints(0.708661417322835)
        .TopMargin = Application.InchesToPoints(0.748031496062992)
        .BottomMargin = Application.InchesToPoints(0.748031496062992)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False

Range("E3").Select
    ActiveSheet.Hyperlinks.Add Anchor:=cells.Find("","e3",,,xlbycolumns,xlNext,,,), Address:= _
        "Pointage%20"& aj4 &af4 &m6& ".pdf", TextToDisplay:= _
        "Pointage " &aj4& " " &af4& " " &m6
       
Dim lig As Long, haut As Long
lig = Range("g" & Rows.Count).End(xlUp).Row + 4
haut = Cells.Find("", "g9", xlByColumns, xlNext)
    Range("G9:AN" & haut).Select
    Selection.Copy
    Range("G" & lig).Select
    ActiveSheet.Paste
    ActiveCell.FormulaR1C1 = af4 & aj4
    Range("G11:AN15,AF4,AJ4").Select
    Selection.ClearContents
   
End Sub

Le bouton doit
-imprimer le planning en PDF (plus les fioritures autour, la plage est plus large, c'est normal), nommé "Pointage Mois Année Agent"
-créer un lien vers le PDF imprimé en E3, ou dessous si la cellule est pleine
-copier le planning du mois en dessous, en laissant une ligne vide,
-copier le mois et l'année sur la case équivalente à g9 à l'emplacement de copie
-vider le tableau, sur G11:AN15, AF4 et AJ4

Alors d'une part, je pense qu'il y a pas mal d'erreurs dans mon code, mais surtout, il ne veut pas valider l'hyperlien vers le PDF, il me donne une erreur "erreur de compilation. Attendu: expression"... autant dire que c'est du chinois pour moi à l'heure actuelle...
Dans un monde parfait, le PDF serait créé dans un dossier portant le nom de l'année concernée, et un sous dossier avec le nom de l'agent.

Voila, je pense n'avoir rien oublié, je vous remercie d'avance pour toute aide, explication ou autre forme d'empathie à l'égard de mon soucis...
 
Dernière édition:

Dim.Reichart

XLDnaute Occasionnel
Bonjour à tous,
Je viens d'anonymiser le fichier (j'espère ne rien avoir oublié), ce sera plus simple, et peut être profitable à d'autres.
Vous le comprendrez, le but est de créer un outil de gestion global d'entreprise, aussi simple et intuitif que possible.

J'ai laissé une fiche employé pour l'exemple, mais le nom est fictif. J'ai aussi affiché tous les onglets, mais certains sont destinés à être masqués (out ceux avant KPI).
Le bouton qui me pose souci est sur l'onglet Projet Vierge, et doit se retrouver sur tout nouvel onglet créé a partir du bouton "nouveau projet" sur le KPI.
Bien sur, si vous avez d'autres suggestions pour le reste du fichier, je suis preneur également.
Je n'ai verrouillé aucune cellule, et certaines formules m'ont donné du fil à retordre, essayez de ne pas les perdre.
Merci d'avance.
 

Pièces jointes

  • Suivi global.xlsm
    119.1 KB · Affichages: 5

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le fichier ci-dessous je me suis contenté de faire ce que vous demandiez au post #1. Quoique.... par exemple pour le lien hypertext, comme vous avez un tableau sous e8 j'ai limité la recherche d'une cellule vide à E3:E6 , sans savoir ce qu'il faut faire, puisque vous ne le dites pas, si elles sont toutes pleines. J'ai fait une petite boucle toute aussi rapide qu'un .Find qui peut poser problème à l'usage.

Pour la copie du planning, comme là non plus il n'y a pas de précision, c'est un copier/coller brut qui est effectué.
Puisque vos emplacements sont apparements destinés à rester tels, mieux vaut les noter en dur. Par exemple Range("G22").
S'ils sont amenés à être déplacer, nommez les emplacements et servez vous de ces noms dans vos macros.
Par exemple la zone à partir de G22 pourrait être nommée "Copie_Planning", dans la macro vous y feriez référence par Range("Copie_Planning").
Vba retrouverait automatiquement la plage même si vous la déplaciez.

Pour les tests j'ai mis un aperçu avant impression (Me.PrintPreview).
Dans les macros de préparation d'impression ne modifier que le stricte nécessaire, ici je n'ai conservé que la définition de la plage à imprimer.

Cordialement

Edit: pour l'impression en pdf nous verrons plus tard si vous êtes ok avec ce début
 

Pièces jointes

  • Suivi global.xlsm
    114.1 KB · Affichages: 7
Dernière édition:

Dim.Reichart

XLDnaute Occasionnel
Merci Roblochon, je vais regarder ça de suite.

Pour E3:E6 (en fait, je vais mettre E1:E6), les 6 cellules devraient suffire, ce sera exceptionnel si un projet dure 6 mois, encore plus s'il dépasse.

Pour le planning, je pensais à une copie brute, mais surtout parce que je ne sais pas trop ce qui est faisable.
En fait, je vais utiliser ces données archivées pour alimenter le KPI, pour visualiser la charge de travail de chaque Chef de Projet, mais je pensais plutôt à une formule qu'à une macro, puisque je ne saurais pas coder le codage couleur (alors qu'une MEFC, ca passe).

Pour les "emplacements destinés à rester tels quels", je ne comprend pas ce que vous voulez dire, vous avez une autre idée?
Ok pour nommer les plages et bien vu pour l'aperçu avant impression.

Merci beaucoup.
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Donc si entre E1:E6 il n'y a pas de cellules vides: que faire ?
1 - Recommencer en E1 après avoir effacer E1:E6 ?
2 - Recommencer en E1 en gardant les autres valeurs ?
3 - Aller boire un café, parce que vraiment on en a ras la casquette et qu'on verra ça plus tard?:p

Une règle si une erreur a une chance de se produire un jour, faites comme si elle se produisait tous les jours.

A+
 

Dim.Reichart

XLDnaute Occasionnel
Mmm, je voulais enchainer sur la colonne F, vide actuellement, mais autant commencer direct par mettre les liens en F1 et dérouler sur la suite de la colonne, ca me laissera E1:E6 libre au cas ou le patron veut afficher autre chose.

Par contre, j'ai un autre souci, c'est que j'ai des formules en I11:I16, et quand ça copie colle, ça crée des références circulaires, j'aimerais conserver soit le résultat brut pour m'en servir plus tard, soit la formule si c'est plus simple.

EDIT: une autre question, après lecture de votre code (nettement plus simple et lisible que le mien, on reconnait la patte de l'expert!), vous expliquez que ME représente la feuille contenant une macro, mais cette macro va se retrouver dans toutes les copies d'onglet "nouveau projet", et je veux que le bouton n'imprime que la plage de l'onglet actif, c'est bon quand même ou ça va imprimer tous les onglets contenants une macro? (j'en ai aussi d'autres, plus simples onglet KPI)
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Si vous copiez une feuille qui contient une macro, la macro est copiée dans la nouvelle feuille.
Dans le classeur ci-joint les lignes de code la macro donnée précédemment sont déplacée dans la macro du module de code autonome (module1) 'imprimer_pointage'.

Seule la macro du bouton de feuille reste sur la feuille d'origine et sera copié dans les nouvelles feuilles (projet vierge (n))
Ces macro appelleront la macro Imprimer_Pointage avec un paramètre qui est la référence à la feuille à laquelle il (le bouton) est attaché.

La macro "Imprimer_pointage" possède maintenant un paramètre (ws as Worksheet) qui est la référence de la feuille sur laquelle elle doit travailler.
Elle connaîtra cette feuille puisque chaque bouton lui enverra la référence de la feuille sur laquelle il est.


Cordialement
 

Pièces jointes

  • Suivi global.xlsm
    116.3 KB · Affichages: 9

Dim.Reichart

XLDnaute Occasionnel
Re, ok pour la référence de feuille, je ne suis pas sur d'avoir bien tout capté, mais je vous fait confiance.
J'ai un peu réflechi cet après midi (bon, ok, j'ai passé l'après midi sur la plage à cogiter boulot, ma compagne a moyennement apprécié…), et je pense qu'il faut ajouter quelques trucs, comme:
-ne copier que les lignes où la colonne G est non vide, sans laisser de ligne vide à la suite finalement, je me fiche du visuel de cette zone
-tester si la date mois/année est présente dans la colonne G, si oui, demander confirmation (imprimer et écraser ou annuler), idéalement, il y aurait une fenêtre permettant de comparer les différences, mais j'en demande peut être beaucoup.
-Si confirmation, soit vérifier que la hauteur de ligne à copier corresponde à l'espace laissé par les anciennes données, soit effacer les anciennes données et coller les données tout en bas
-il y a des formules pour calculer les jours de 1 à 31 ligne 10 et en jour de semaine ligne 9, je me fiche des formules dans les données finales, mais j'ai besoin des dates pour chaque mois, c'est peut être déjà le cas mais je préfère être sûr

Merci pour votre aide, j'apprécie beaucoup.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

mais j'en demande peut être beaucoup.

Certainement. Tout ceci nous mène à une incompréhension. Le but du forum est le 'dépannage' sur des points précis des projets que les demandeurs développent. J'ai largement répondu au point précis du post#1. Maintenant c'est à vous d'adapter, d'aller chercher des tutos, si vous voulez apprendre et de revenir éventuellement avec une question précise sur un 'os' que vous rencontreriez. Il n'est pas question ici de développer une application clef en main. Des prestataires de services existent pour cela.

Je sais que sur les forums, ici même, des demandeurs traînent depuis 2005 grapillant de ci de là et n'avancent pas d'un pouce dans l'apprentissage et l'autonomie, que d'autres à force de 'merci', 'c'est fantastique', 'vous êtes merveilleux' se font construire petit à petit des usines à gaz qu'ils sont incapables de modifier d'une ligne et auxquelles personne ne peut plus rien comprendre. Ne devenez pas l' un d'eux.

pour l'impression en pdf nous verrons plus tard si vous êtes ok avec ce début

Pour l'impression en pdf, il vous suffit de mettre en route l'enregistreur de macro, d'enregistrer votre classeur en pdf et à partir de ce que vous avez, et de ce que l'enregistreur vous a donné, d'adapter à votre besoin. Si vous avez du mal, revenez créer une autre discussion avec un titre en rapport.

Bonne journée et bon apprentissage.
 

Dim.Reichart

XLDnaute Occasionnel
Ok, je me disais aussi que ca faisait beaucoup pour un dépannage effectivement.
Merci de votre franchise et de votre aide, je comptais de toutes façons essayer seul, mais j'avoue que la solution de facilité était tentante et nettement plus sûre.

Effectivement, je veux que le fichier soit "clé en main" pour l'utilisateur, mais je ne suis pas cet utilisateur, je veux savoir le créer et le modifier moi-même, pas devenir un assisté. Merci aussi pour le recadrage.
Si vous pouvez juste m'indiquer les "bonnes" formules à utiliser aux différentes étapes, cela me ferait gagner un temps considérable.
À bientôt.

EDIT: je ne trouve pas le bouton résolu...
 
Dernière édition:

Dim.Reichart

XLDnaute Occasionnel
Bon, j'ai essayé, tout l'après midi.
Je n'ai pas réussi a passer la seconde ligne de la macro "imprimer_pointage" et je ne sais même pas ce qu'il demande, souvent des arguments.
J'ai lu des tutos et tout, mais ils seraient en chinois que ca serait quasi pareil, je reconnais bien des termes, mais pas ceux que VBA me sort, et quand j'essaye quand même au pif, ca ne marche jamais (forcément, le pifomêtre est rarement un bon outil).
Quand je teste le bouton sur l'onglet "projet vierge (2)", il me souligne la première ligne de la macro "commandButton1" avec un message "argument non facultatif".
Je crois que j'ai essayé la majorité des arguments donnés dans les tutos, sans plus de résultat, mais à mon avis, si je suis passé sur le bon, il était mal écrit et je n'ai pas vu de différence.

J'ai quand même réussi à ce que les lignes suivantes ne soient plus en rouge, mais vu que je n'arrive pas à les tester, ca ne m'avance pas…
Désolé si le ton est un peu énervé, mais là, je n'arrive pas à faire autrement.

EDIT: Maintenant que je suis calmé, je vais apporter des précisions.
Je ne souhaite pas la réponse toute faite (même si tout à l'heure, je l'aurais prise sans discuter), je veux comprendre ce qui est demandé, et pourquoi je dois mettre ci ou ça.
Voici ce que j'ai testé et dont je me souviens, à chaque fois dans les arguments de la macro appelante, de l'appelée, et des deux:
-WS, WB,ME
-la liste d'arguments déclarés avec ou sans dimensionnement
-fonction, sub, macro et rendu là, à peu près tout ce qui me passait par la tête…

J'ai lu plusieurs tutoriels, mais je n'en ai pas trouvé qui explique les arguments propres à la macro, (à priori, c'est ce qui coince, en tout cas, c'est ce que je comprend). Lorsqu'il y en a, ce n'est pas le sujet du tuto...
Parfois ça bloque pendant la macro appelante parfois pendant l'appelée, mais jamais plus loin que la 1e ligne et je n'ai pas compris pourquoi.

J'ai trouvé comment déboguer en passant outre, en sélectionnant le module complet, en dehors de la macro donc, il me remonte une erreur de compilation: Objet requis sur la 1e variable, ça n'est pas la priorité, mais il faudra aussi que je comprenne ça.
 

Pièces jointes

  • Suivi global1.xlsm
    194.1 KB · Affichages: 5
Dernière édition:

Dim.Reichart

XLDnaute Occasionnel
Bonjour
Je remonte le sujet, je n'y arrive toujours pas.
J'ai déplacé la macro appelé dans le module 1 parce que la macro appelante ne la trouvait pas sinon (mais j'ai peut être encore compris de travers).
En attendant, je mets en place la suite citée au post 8
EDIT: je viens de relire le post d'origine, et je pense que ma demande n'a plus grand chose à voir, donc je met ce sujet en résolu et j'en ouvre un autre.
Merci à Roblochon pour son aide et conseils, et merci à ceux qui ont lu et compati.
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Je comprends votre colère et votre frustration, mais comme nous vous l'avons dit, David xld et moi hier sur le chat, allez pas à pas.
Vous voudriez faire une application qui dépasse largement vos compétences et votre compréhension du moment (et j'insiste sur 'du moment').
Ce que j'ai vu du fichier post#12 et des modifications que vous y avez apportées du post#12 le démontrent.

C'est comme si vous vouliez faire une thèse en latin sans maîtriser les déclinaisons de rosa, ni même les avoir apprises.
Une langue et ses subtilités ne s'apprennent pas en un jour, ni même une semaine ou un mois.

Il n'y a que vous qui puissiez vous donner les moyens d'apprendre.

cordialement
 

Dim.Reichart

XLDnaute Occasionnel
Bonjour Roblochon,
Oui, je sais, je me rend compte maintenant que je me suis lancé dans un projet trop grand pour moi, malheureusement il me reste deux semaines pour le rendre opérationnel et le livrer, d'où mon empressement, même si cela n'est pas censé influer sur ma méthode d'apprentissage.

Enfin, c'est surtout qu'excel ne pouvait pas gérer autant de formules et de mises en formes conditionnelles au départ, ce qui m'a obligé à m'orienter sur une macro, qui avait besoin de cette 1e macro pour fonctionner, et quitte à apprendre, autant le faire pour quelque chose d'utile.

J'ai (enfin) réussi à passer la 1e ligne en tout cas, il ne fallait pas mettre SET devant une variable autre qu'objet.
J'ai refait aussi un autre post pour demander une relecture globale du code.
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 171
Membres
112 676
dernier inscrit
little_b