Excel VBA MAC-Excel (2019)
Bonjour à toutes et tous
je suis totalement novice dans excel et encore plus en VBA, je vais donc essayer d'expliquer au mieux mon soucis
Alors voila j'ai créer un bon de commande d'articles pour les agents dont j'ai la charge
la macro que j'ai assemblé au mieux de petit morceaux chopés à droit à gauche et lancé depuis un bouton sur mon fichier elle permet de:
- Copier le bon de commande initial
- renommer le bon de commande initial sous la forme "bon de commande" avec le nom de l'agent pris dans la cellule C4 (afin de le garder en sauvegarde)
- un nouveau bon de commande est généré à partir de la copie et les données saisi y sont effacés
- et un PDF du fichier initial est créer afin de pouvoir être imprimé
Sur la version initiale du fichier cela fonctionne comme il faut
mais des que j'ai remplie à partir de la copie j'ai droit a une erreur 400 juste après l'affichage de "InputBox" pour choisir le nom de la prochaine feuille
vu mes connaissances mon code doit être totalement foireux et lors de la reproduction ça doit merder quelques part mais je sèche complétement la :/
j’espère avoir été suffisamment clair dans mes explications je vous met le code et m'excuse par avance si ça pique les yeux
Merci d'avance
Sub dupliquerSavePDF()
'partie copie du fichier'
Dim numFacture As String ' Création d'une nouvelle variable de type string (= chaîne de caractères) afin d'y stocker des caractères alphanumériques
nameBdC = InputBox("Nommez le nouveau Bon de commande", Title:="Nommez le nouveau bon de Commande Vierge", Default:="Bon de Commande ") ' Présentation d'une zone de saisie pour demander le numéro du bon de commande à l'utilisateur
ActiveSheet.Name = "Bon de commande " & Range("C4")
Sheets("Bon de commande " & Range("C4")).Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = nameBdC ' Assignation du nom de la feuille
'partie effacement des données nommé Saisi de la nouvelle feuille'
For Each cell In ActiveSheet.Range("Saisi")
cell.MergeArea.ClearContents
Next cell
'generation du PDF'
Dim Chemin As String
Dim texte As String
With ThisWorkbook
Chemin = .Path & Application.PathSeparator
With .Sheets("Bon de commande " & Range("C4"))
titre = "Bon de commande " & Range("C4") 'Nom du fichier avec le nom de l'agent pour creation du fichier
fichier = "Le Bon de commande de " & Range("C4") & ".pdf" 'Nom du fichier avec le nom de l'agent et extension pour messagebox
Application.DisplayAlerts = False
.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=Chemin & titre & ".pdf", _
Quality:=xlQualityMinimum, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End With
End With
MsgBox fichier & (" a été sauvegardé dans le dossier.")
End SubBonjour,
J'ai une proposition à vous faire mais je crains qu'elle vous déplaise :
Sub dupliquerSavePDF()
Dim agent$, dossier$, fichier$, chemin$
With Sheets("BC") 'avec feuille BC
agent = .Range("C4") 'agent vaut C4
dossier = .parent.Path & Application.PathSeparator 'repertoire courant
fichier = "BC " & Agent & ".pdf" 'nom fichier
chemin = dossier & fichier 'chemin complet fichier
.ExportAsFixedFormat Type:=xlTypePDF, FileName:=chemin, IgnorePrintAreas:=False 'export pdf
End With
MsgBox "Le fichier " & fichier & " a été sauvegardé dans le dossier " & dossier & ".", vbinformation 'msg
End SubLe code repose sur un principe de base : n'avoir qu'un seul onglet "Bon de commande" ! Justement, on exporte en pdf, c'est pas pour se compliquer la vie avec une multitude de feuilles ou de fichiers.
Il faut :
- un onglet "Suivi commandes" dans lequel on reporte les infos de chaque bon de commande à chaque export.
- probablement un onglet "Clients", avec toutes les coordonnées des clients,
- un onglet "bon de commande" éternel qui sert uniquement d'interface et qui met à jour les valeurs qu'il contient grâce à des formules principalement.
Par ailleurs, Il ne faut pas avoir de cellules fusionnées et je ne comprends pas ce qu'est C4 ? Le nom d'un agent ? En général, on garde sur le nom de fichier le numéro de document et le nom de client.
Cdlt,
Bonjour 3GB
tout d'abord merci pour ton aide
Effectivement ce n'est pas la solution Idéale pour moi le fichier PDF étant destiné aux services qui s'occupe des commandes
Ou alors il faudrait dans ce cas que je puisse récupérer les donnés renseignés dans une autres feuilles pour archivage, mais la je sais pas trop comment automatiser cela !
pour rappel je suis vraiment novice je n'utilisai avant excel que de façon simple juste pour faire des tableaux avec au mieux des calcul simple
Voici ci joint une version diffusable de mon fichier que tu puisse voir un peu mieux quand même
Bonjour,
Voici l'idée pour votre fichier...
J'y ai passé beaucoup de temps donc je vous laisse en prendre connaissance et me poser des questions plutôt que tout expliquer.
Mais le fonctionnement est similaire à celui que vous aviez : Une plage nommée saisie, une plage nommée Report qui permettra l'archivage des données, une base pour accueillir les données et surtout que des tableaux structurés, pas de cellules fusionnées, une factorisation des listes de tailles.
J'espère que vous retiendrez cette version...
Cdlt,
Merci 3GB
Beau travail est rapide sachant que moi je suis sur mon fichier depuis plus d'une semaine
bien que cette solution ne soit pas celle que j'avais envisagé
elle retient tout de même mon attention, mais je pense qu'il vas falloir faire quelques modifications
Car il me semble difficile ainsi d'ajouter ou modifier les références des articles qui semble figé je ne sais comment
et concernant l'archivage celui ci ce limite a 2 ou 3 première référence choisi hors pou un archivage il faut vraiment que cela me garde toutes les référence (Et j'avoue qu'une mise en forme sous forme de tableaux avec les références choisi a archiver les une au dessous des autres sous le nom de l'agent et la date trouverai ma préférence) ... Houla je sais pas si c'est bien clair ce que j'explique
en attendant beau travail... je ne clos pas le sujet au cas ou mais Bravo a toi 3GB
Re nobodyuse,
Je ne suis pas sûr de savoir de quoi tu parles. Dans l'onglet Articles, il y a une colonne REF qu'il faudra compléter et qui est librement modifiable. Chaque ligne ajoutée sera automatiquement incorporée au tableau et prise en compte dans les formules.
Dans l'onglet BC, on sélectionne les produits à partir de la DESIGNATION et toutes les autres colonnes sont automatiquement calculées (grâce à une recherche) à part la colonne Quantité qui est une saisie. D'ailleurs, la colonne TAILLE DISPO ne semble pas très utile....
L'archivage prend en compte les 15 références (et plus exactement la plage "Report" comprenant le nom, l'immat, ..., jusqu'au points restants) mais j'ai groupé et masqué les colonnes pour éviter d'avoir une lourdeur visuelle car que j'ai supposé qu'en général, on aurait moins de 3 références et que le tableau SUIVI servirait d'archive et ne serait pas destiné à la consultation régulière.
En tout cas, c'est plus ou moins comme ça qu'il faut faire mais il est toujours possible d'avoir un autre onglet pour consulter des infos...
Je te conseille de bien regarder, de faire des essais et de réfléchir à l'utilisation effective de ce fichier. D'après moi, l'utilisation, c'est la saisie occasionnelle dans les onglets Articles et Listes et régulière dans l'onglet BC, le but étant de faciliter la production de BC et la conservation de l'information qui en résulte...
Et au fait, il manque une chose à ton fichier, c'est un numéro de bon de commande qui serait la clé de recherche, normalement incontournable dans ce genre de fichiers.
Bonne soirée,
Je regarderai de plus près le week-end je suis plutôt occupé avec les enfants ;)
Je parlai des articles car le catalogue vas être totalement revu et étoffé donc de nouveau articles vont venir, en regardant vite fait je ne suis pas sûr de pouvoir ajouter des articles ... mais je regarderai un peu plus tard .
concernant l’archivage effectivement il y a peu de chance que plus de 3 ou 4 articles soit sélectionnés mais comme tu a « groupé » je n’ai pas vu et ne sais pas trop comment voir ...
Je sais pas ce que j’ai touché tout à l’heure en regardant vite fait mais du coup ça me génère une erreur et ne m’efface plus le fichier ...
Purée je suis à la ramasse complet par rapport à vous !
En tous cas merci bcp pour ton aide
Oui je comprends, pas de souci...
Pour ajouter des articles, il suffit de saisir sous la dernière ligne du tableau. Sinon, il est possible de créer un userform ou de se réserver un petit espace à côté pour insérer...
Le fichier est une base de départ, il y a éventuellement des procédures de tri, d'ajout ou autre à penser...
Pour dégrouper, il faut cliquer sur le petite icône avec un + qui se trouve au niveau de la colonne avant celles masquées.
Quant au blocage, je ne sais pas mais le fichier est toujours là donc tu peux le retélécharger. Sinon, il faut savoir que tout exécution de macro rend l'annulation (ctrl + Z impossible).
A bientôt et bonne fin de week end !
J’ai gardé une copie de ton fichier en effet c’est préférable 😁
Je regarderai cela et te ferais part de mes avancements si je me replonge dessus mais ta base est une bonne base de travail 😊
je suis juste un peu déçu de ne pas avoir réussi à corriger les bugs de mon fichier initial pour lequel j’ai fournis énormément de travail et de temps en tant que novice
Merci à toi et bon week-end également
Bonjour 3GS
j'ai regardé ce que j'avais fait sur le fichier sur lequel j'ai une erreur "Le fichier est ouvert, veuillez le fermer"
en fait j'ai juste remis mes donnés NOM et Prenom Agent et leur vrai Numéro Immatriculation et fusionné quelques cellules
et changé l'ordre des feuilles (mais juste cela ne génere pas d'erreur)
du coup je pige pas
PS: j'ai vu le petit+ dans l'archivage BIEN VU ;)
est ce que je peux virer des cellule inutuile dans l'archivage ?
Bonjour nobodyuse,
En fait, le titre du fichier est déterminé à partir du nom de l'agent et de la date. On part donc du principe qu'il ne peut y avoir qu'une seule commande pour un même agent le même jour. C'est aussi pour cette raison qu'il faudrait un numéro de BC.
Si un fichier existe déjà, il y a un message qui avertit l'utilisateur et lui demande de confirmer qu'il s'apprête à écraser le fichier pré-existant (et, par la même occasion, non plus ajouter mais modifier les infos dans l'archive).
Si l'utilisateur clique sur non, on arrête la procédure, s'il clique sur oui, on écrase le fichier sauf si le fichier est ouvert, car cela provoque une erreur, gérée par une sortie avec un message.
L'ordre des feuilles n'importe pas. Il ne faut JAMAIS FUSIONNER DE CELLULES surtout lorsque celles-ci ont une incidence sur le fonctionnement du fichier ! J'ai passé beaucoup notamment à défusionner les cellules et à faire des petites remises en forme. Si je l'ai fait, ce n'est pas par goût esthétique ni parce que c'est une passion pour moi mais parce que ça permet d'éviter des problèmes.
Il est possible de virer des cellules d'archivage à condition d'avoir modifié la plage "Report" avant. Pour ma part, je rajouterais un numéro de BC, j'enlèverais carrément la colonne TAILLES DISPOS (de la feuille BC) qui me semble inutile et je rajouterais et enlèverais les cellules correspondantes dans SUIVI...
Re 3GS
OK donc NE PAS fusionner les cellules ;)
je n'ai pas de besoin de Numéro de Bon de commande la date et le nom de l'agent suffit amplement
sur le BdC les tailles disponible me permette d'avoir une vue sur la disponibilité des tailles justement utile pour moi et pour l'agent lors de son choix, mais pas utile dans l'archivage (idem pour les références dans l'archivage puisque a ce jour je n'en ai pas le nom de l'article suffit)
faut que je regarde cette histoire de "Report" car je ne pige pas trop ce que c'est
Autre question j'imagine que je peux virer mon code VB initiale de ma feuille BC ?
je regarde cela SANS fusionner voir si j'ai tjr l'erreur a la fin qui du coup n'efface pas les données saisi
Je pense que ce sera mieux et que ça ne changera pas grand-chose SANS FUSIONNER DE CELLULES . Désolé pour le matraquage à la majuscule... Mais plus vite c'est intégré et plus vite on progresse sur excel car après, ça devient une sorte d'automatisme dur à défaire à tel point que certains conçoivent leur fichier à partir de la mise en forme au lieu de l'organiser autour de l'information (Excel sert avant tout à gérer l'information).
Mais pour les cellules d'en-tête ou les cellules qui n'accueilleront ni saisies ni formules (comme les cellules signatures en bas du BC), ça ne pose pas vraiment de problème dans ton cas... MAIS, il vaut mieux quand même augmenter la hauteur des lignes !
Initialement, ton fichier contenait des plages nommées (je les ai toutes remplacées) dont une "Saisie", qui était une union des cellules de saisie. Et bien, c'est le même principe : Tu as une plage "Saisie" permettant d'effacer les données après l'export en PDF et une plage "Report" permettant de reporter les données significatives dans le tableau SUIVI. C'est l'union des saisies et des formules qui en dépendent...
Pour la colonne TAILLE DISPOS, tu as une liste de validation dans la colonne TAILLE juste à côté qui te permet automatiquement d'avoir les tailles disponibles pour chaque article. Donc, si ce n'est que pour l'utilisateur, je pense qu'elle n'est pas nécessaire. Et à la rigueur, on pourrait (même si ce n'est pas l'idéal) déplacer cette colonne en dehors de la zone d'impression du BC (à droite de la colonne Quantité).
Pour la Ref, on peut tout à fait l'écarter (même si en général, il vaut mieux garder une référence unique plutôt qu'un libellé qui peut être multiple > coloris par exemple). Dans ce cas, pour me simplifier la vie, je mettrais cette colonne tout à gauche (à gauche de la colonne Fournisseur).
Oui, je pense que tu peux effacer tes codes initiaux (sur le fichier que j'ai partagé en tout cas).
je vais regarder cela de plus près en effet mais j'ai bien saisi qu'il faut éviter d'utiliser des cases fusionné dans le cas ou celle ci sont intégré à des formules ;)
pour la mise en forme du Bon de commande (Tailles disponible et réferences entre autre) je n'ai pas le choix que de les laisser car j'ai repris la mise en forme exact du papier officiel de ma boite
Mais pour la partie Archivage j'avoue ne pas en avoir besoin j'ai juste besoin de savoir ce qui a été fourni comme article et a quel date, sa tailles, et les point utilisé en gros (même si je laisse le fournisseur ce qui permet un suivi en cas de changement éventuel)
pour le moment je n'ai que très peu touché, mais j'ai voulu extrapoler un changement d'année en copiant en totalité l'archivage de la feuille SUIVI et en renommant l'ancienne SUIVI2021 mais les données s'enregistre toujours dans l'ancienne feuille pourtant renommé.. :/
Ah oui, quand j'ai dit "éternel", je ne rigolais pas
je n'avais pas pensé a cette solution en effet bien vu
j'ai essayé de virer dans la feuille suivi les réferences et tailles dispo mais ça n'accepte pas ça me remonte une erreur et ça n'efface plus le fichier tant pis ca restera ainsi ;)
je coupe pour aujourd’hui
j'y reviendrai plus tard
merci pour ton aide
même si je pige pas tout c'est un enfer quand l'on débute mais que l'on aimerai comprendre
3GB
J'ai a nouveau besoin de toi
suite a quelques petites modifs les données qui monte dans le tableaux de suivi ne sont plus les bonnes comment modifier cela ?
Bonjour 3GB
j'ai a nouveau besoin de tes services
j'ai essayer de faire quelques modifs en faisant ce que je voulais faire et en gardant en plus ton systeme de suivi qui me convenais
cela marchais pas mal ;)
Donc mon systeme créer une copie de ma feuille dans le même classeur pour l'enregistrer sous le nom (D4)car je ferais un classeur par Année et n'ai pas beaucoup d'agents a gérer donc cela ne ferra pas de trop gros fichier
du coup je me heurte a un petit soucis: si par cas j'ai un même agents qui fait 2 commande la même année ce qui est possible comme ca génère un feuille nommé BC " & Range("D4") j'ai du coup une erreur qui monte puisque le nom existe déjà
j'ai chercher mais en vain une solution viable pour une vérification
dans le classeur savoir si la feuille nommé sous la forme BC " &
Range("D4") existait déjà afin de par exemple m'ouvrir une inputbox pour
me permettre de donner un nouveau nom si la feuille est existante et
dans le cas contraire me nommer la feuille comme prévu sous la forme BC " & Range("D4")
Mais impossible de trouver une solution que j'arrive a faire marcher :(
bien
que ce soit différent j'ai donc changé mon fusil d’épaule en scinder le
NOM et le Prénom en 2 cases D4 et E4 et du coup en décalant le numéro
d'agent en G4 ce qui me permet d'enregistrer la feuille avec juste le
NOM + la date sous forme MMYY
MAIS car évidemment il y un mais, du
coup dans la feuille suivi ca decalle des trucs et je ne comprend pas
comment tu a fait et n'arrive donc pas a modifier le truc sans t’embêter
dans la colonneA la ou j'avais Nom&Prenom je n'ai plus que le
NOM (Bon a la limite c pas hyper grave même si l’idéal serais d'avoir
les deux)
je suppose que c'est dans les données nommées "report" mais si j’essaie d'y ajouter E4 ça marche pas
j'aimerai bien comprendre comment faire
et si par cas tu avais une solution pour l'histoire du test de nom avant la copie et de l'input box si le nom existe déjà ...
Une
autre chose je voulais decaller les tailles d'articles une ligne pour
permettre d'avoir une ligne vide pour permettre un retour a Zero en cas
de changement d'avis de l’agent qui finalement ne voudrai pas un article
ce qui permettrai dans le menu deroulant de remettre du vide pour faire
une RAZ
Salut nobodyuse,
Désolé mais la mise en forme de ton message le rend pas très digeste
Sur mon message de Dimanche à 10:47, j'ai dit :
En fait, le titre du fichier est déterminé à partir du nom de l'agent et de la date. On part donc du principe qu'il ne peut y avoir qu'une seule commande pour un même agent le même jour. C'est aussi pour cette raison qu'il faudrait un numéro de BC.
Si un fichier existe déjà, il y a un message qui avertit l'utilisateur et lui demande de confirmer qu'il s'apprête à écraser le fichier pré-existant (et, par la même occasion, non plus ajouter mais modifier les infos dans l'archive).
Donc, si tu fais des essais avec le même nom le même jour, c'est normal. Si tu as modifié le code et enlever la partie date, c'est normal. Et comme je t'avais dit également, il serait judicieux d'avoir un numéro unique de document pour ne pas rencontrer ce genre de problèmes... La date, il faut au moins l'enregistrer au format AAMMJJ quand ce n'est pas au format AAMMJJ HHMM.
Quant à la modification de la structure et de la plage Report, je veux bien te l'expliquer mais je ne suis pas sûr que scinder le nom et le prénom soit une bonne idée en général.
A plus,
Ouais je reconnais je l'ai vu en postant que c’était un peu le merdier mon message j’avoue, désolé
oui je sais bien ce que tu m'avais dit mais je dois respecter une mise en forme et plusieurs impératif qui me sont imposé
l'enregistrement avec Nom+Date complète+Heure serai en effet une solution mais le fait que la longueur des noms soit limités en nombre de caractère n’impose donc de faire des choix (sachant que j'ai un agent dont le nom seul fait 15 caractère et 9 pour son prénom) d’où l’intérêt de scinder en NOM et Prénoms pour gagner de la place
donc pour la plage report j'aimerai bien que tu m'explique que je puisse ajouter le prénoms dans la liste de suivi soit dans une nouvelle colonne soit dans la même colonne que le NOM
je t'avais tout de même joint le fichier que tu puisse te faire une idée