Valeur automatique d'après valeur autre fichier Excel

Tout est bon, c'est juste qu'avec ce petit problème, j'ai fait des essais. Une macro vide la production réelle. La seconde vide tout puisque la production réelle est à zéro et vient se placer dans ADMINISTRATION.

Mais, en rythme normal, vous ferez des saisies la journée (enfin, j'espère pour vous !).

Bonne nuit,

Non ça change rien...

J'essaie à mon niveau mais vous devez bien rigoler !

Bonne nuit et merci beaucoup encore !

Merci à vous,

Et faites des essais en ressaisissant vos valeurs d'origine, vous verrez qu'il n'y a pas de problème. Mais comme la macro efface le contenu de PRODUCTION, il faut forcément remplir les colonnes de PRODUCTION à nouveau pour simuler un cycle normal.

A demain,

Effectivement !

TOUT fonctionne à merveille ! Je ne sais pas comment vous remercier, votre aide a été précieuse et j'ai maintenant un bel outil pour la boulangerie de mon ami. Je ne sais pas de quel coin vous êtes dans le monde mais si vous passez un jour au Sénégal et plus particulièrement à Saly sachez que vous aurez du bon pain à volonté !!

Passez un excellente nuit et oui, à demain ! Merci.

Bonjour nicodak,

Super ! Je vous en prie, je suis content que le fichier fonctionne comme vous le voulez. J'habite en France donc ce n'est pas la porte à côté mais il n'est pas impossible du tout que je passe un jour des vacances sur la côté sénégalaise. Donc je vous prends au mot pour le pain à volonté

Très bonne journée nicodakAR,

Bonjour 3GB, Comment allez-vous ?

Une dernière toute petite chose, j'essaie de changer le nom du pdf édité par le code (vous avez bien fait de juste suspendre cette action finalement) :

  1. j'ai réussi à mettre la date en version française DDMMYYYY au lieu de YYYYMMDD (trop fastoche !)
  2. je ne réussis pas à ce que le nom du fichier soit accompagné par la date d'hier et non celle du jour car la génération du nouvelle feuille et donc des fichiers PDF se fera toujours à J+1
  3. je ne parviens pas à inverser la date et le nom du fichier sur le pdf :
    1. LIVRAISON - 23082020 à remplacer par 23082020 - LIVRAISON

C'est ici n'est-ce pas ? Comment faire ?

Horodatage = WorksheetFunction.Text(Now, "DDMMYYYY") 'renvoie la date de l'édition, pour un meilleur tri chronologique
NomPDF = Sheets(Feuille_A_Imprimer).Name & " - " & Horodatage & ".pdf" 'Nom du fichier avec extension

J'ai tout de même réussi à faire quelque chose : changer la date des données extraites dans ANALYSE à J-1

Je vais très bien et j'espère que vous aussi. Je suis content que vous vous intéressiez aux éditions, ça ne coûte rien et ça peut être pratique de figer les données autrement que sur Excel...

J'ai mis volontairement en format YYYYMMDD (et même avec l'heure en cas de multiples impressions durant la journée) pour assurer un tri chronologique dans le dossier. Je vous conseille vivement de garder ainsi car sinon vous aurez tous vos PDF mélangés dans votre dossier. Et d'ailleurs, la meilleure solution aurait été de nommer le PDF :

"YYYYMMDD NOMDEFEUILLE.pdf"

D'accord, on exécute vraiment le matin et non en fin de journée. Alors, dans la macro EditionPDF qui se trouve dans le module PDF, vous changez la ligne d'affectation de l'horodatage ainsi :

Horodatage = WorksheetFunction.Text(Now-1, "YYYYMMDD") 

Et pour le second point qui rejoint ce que j'aurais souhaité mais que je n'ai pas osé proposé, la ligne doit être ainsi :

NomPDF = Horodatage &  " - " & Sheets(Feuille_A_Imprimer).Name & ".pdf"

ou pour simplifier (sans le tiret, qui n'est pas nécessaire) :

NomPDF = Horodatage & " " & Sheets(Feuille_A_Imprimer).Name & ".pdf"

Oui, ce sont ces lignes exactement. Le principe est donc le même que pour les changements des dates d'ANALYSE. Félicitations, ce n'est pas chose aisée de se retrouver dans le code d'un autre (déjà que dans le sien, ça peut être compliqué) en étant débutant !

Et désolé, j'étais persuadé que les mises à jour seraient effectuées en fin de journée, ce qui vous contraint à bricoler.

Je rebondis sur l'intérêt de conserver la date de l'édition afin d'éviter toute confusion. En effet, à moins que la boulangerie ne ferme jamais, il y aura peut-être des jours où l'édition aura lieu le surlendemain (voire plus si fermeture saisonnière, vacances, travaux) de la dernière journée travaillée.

C'est pour cette raison que j'avais imaginé une édition en fin de journée et de conserver la date du jour.

D'autant plus, qu'en y réfléchissant, on édite les onglets PROD et LIVR sur lesquels figure la date du jour (donc de l'édition).

Ah ne soyez pas désolé, vous avez fait l'essentiel sur ce classeur !

Et puis c'est sympa de mettre les doigts dans le code, j'essaie de comprendre et donc d'apprendre la logique de syntaxe VBA, c'est vraiment intéressant. A ce propos je bute sur la partie sous-dossier d'enregistrement des PDF

SousDossier = "" '"RECAP PROD\" > nom ˆ adapter ˆ son dossier

Les PDF s'enregistre actuellement dans le dossier d'origine du classeur, très bien. J'ai créé un sous-dossier nommé ARCHIVES PROLIV PDF, j'ai remplacé dans le code RECA PROD\ par ARCHIVES PROLIV PDF et en supprimant également l'apostrophe juste avant mais j'obtiens une erreur :

Erreur de compilation:

Attendu: fin d'instruction

En effet, à moins que la boulangerie ne ferme jamais, il y aura peut-être des jours où l'édition aura lieu le surlendemain

Bonne remarque.

La boulangerie ne ferme jamais mais je me demande si le personnel administratif sera présent le dimanche. Donc l'archivage de la feuille de samedi se ferait le lundi. Mais quid de la génération de la feuille du dimanche s'il n'y a personne le dimanche ?? Ah ah ah ! Il faut que je vois ce point avec le boss... Merci de votre perspicacité !

D'autant plus, qu'en y réfléchissant, on édite les onglets PROD et LIVR sur lesquels figure la date du jour (donc de l'édition).

Oui et j'y avais pensé quand j'avais enregistré une macro pour sauver le classeur sous format xlsx :

1. je lançais l'enregistrement de la macro

2. j'éditais chaque date sur les onglets en remplaçant AUJOURDHUI() par AUJOURDHUI()-1

3. j'enregistrais le classeur

4. je ré-éditais les dates.........

5. fin d'enregistrement de la macro !

Pour m''amuser et apprendre je tente de séparer les données de PRODUCTION et de RETOUR sur 2 onglets différents, PRODX et RETX

J'ai réussi à n'inscrire que les volumes de production sur PRODX mais je bloque sur RETX, probablement une très mauvaise syntaxe dans le code...

Sub Archivage()

Dim NbCol%, NvLig%

NbCol = Range("TOTAL_PROD").Cells.Count 'vaut nb produits

If NbCol <> Range("RECAP").Columns.Count - 1 Then GoTo Erreur 'sortie de procédure si nb colonnes <> nb produits

'---------------------------------------------
'-----SEQUENCE SUR ANALYSE
'---------------------------------------------

Sheets("PRODX").ListObjects("RECAP").ListRows.Add 'insertion d'une nouvelle ligne au tableau

With Sheets("PRODX")
    .Activate
    With Range("RECAP")

    NvLig = WorksheetFunction.Count(.Columns(1)) + 1 'emplacement nvlle ligne ˆ remplir

'Saisie date du jour sur (col1)
    .Range(Cells(NvLig, 1), Cells(NvLig, 1)).Value = CDate(Format(Date, "DD/MM/YYYY"))

'Copie production sur analyse
    Range("TOTAL_PROD").Copy
    .Range(Cells(NvLig, 2), Cells(NvLig, NbCol + 1)).PasteSpecial Paste:=xlPasteValues, Transpose:=True

    End With
End With

Sheets("RETX").ListObjects("RECAP").ListRows.Add 'insertion d'une nouvelle ligne au tableau

With Sheets("RETX")
    .Activate
    With Range("RECAP")

    NvLig = WorksheetFunction.Count(.Columns(1)) + 1 'emplacement nvlle ligne ˆ remplir

'Saisie date du jour sur (col1)
    .Range(Cells(NvLig, 1), Cells(NvLig, 1)).Value = CDate(Format(Date, "DD/MM/YYYY"))

'Copie production sur analyse
    Range("TOTAL_PROD").Copy
    .Range(Cells(NvLig, 2), Cells(NvLig, NbCol + 1)).PasteSpecial Paste:=xlPasteValues, Transpose:=True

    End With
End With

End Sub

LE déblogage bloque sur cette ligne, pourtant RETX existe bien Sheets("RETX").ListObjects("RECAP").ListRows.Add 'insertion d'une nouvelle ligne au tableau

Qu'en pensez-vous ?

Salut nicodak,

Alors ça fait beaucoup de messages auxquels répondre... Ne m'en voulez pas si je passe à côté de certains points, sachant que j'ai du frais avec moi.

Pour le sous-dossier, il faut saisir :

SousDossier = "ARCHIVES PROLIV PDF\"

2 remarques :

- il ne faut pas oublier le "\" pour que le fichier soit enregistré dans le sous-dossier (sinon, c'est dans le dossier de base avec le nom "ARCHIVES PROLIV PDFnomdufichier.pdf".

- Il faut absolument mettre entre guillemets (cause probable de l'erreur ici) car on saisit une chaîne de caractères.

Dans notre cas, il s'agit seulement d'un oubli de guillemet mais pour la petite info utile, chaque variable suivie de $ est du type texte, % pour un nombre entier et pour le reste, c'est explicite (as range : plage, as worksheet : feuille). Il faut bien que la variable ait une valeur correspondant à son type.

Concernant les absences du personnel administratif, il faudra donc que l'un des boulangers puisse lancer la macro le dimanche matin (et si possible saisir la production du dimanche). Donc, afin d'éviter des bourdes (car une fois la macro lancée, le ctrl + Z est impossible), j'ai ajouté un message de confirmation au début de la macro principale.

Partant de cet ajout, j'ai totalement réorganisé le code pour qu'il colle le plus possible aux besoins envisageables et fort probables.

J'ai donc notamment laissé une possibilité de saisir soi-même la date du fichier dans une boite de dialogue au cas où il serait nécessaire de rattraper l'avant-veille ou d'anticiper le lendemain.

Pour ce faire et optimiser, j'ai dû imbriquer des macros. Ca peut être plus compliqué à la lecture quand on est pas vraiment initié mais ça suit un ordre logique. J'imagine que vous aurez probablement plein de questions et je serai dispo pour y répondre bien entendu. Le seul hic (en cas de saisie de la date manuellement), c'est que je n'ai pas pu gérer toutes les sources d'erreur (mon niveau est limité), je me suis focalisé sur les cas les plus probables (sans gérer les saisies absurdes). Et j'ai notamment défini un intervalle de validation (J-30 à J) que vous pourrez changer facilement dans le code.

Je vous envoie le fichier.

J'ai aussi ajouté la saisie de la date de la veille dans ADMIN (j'ai défini un nom pour la date d'ADMIN) et changer les formules en PRODUCTION et LIVRAISON pour qu'elles y fassent référence. Et en fin de macro, la date redevient aujourd'hui.

Voici le fichier oublié

3boulangerie4.xlsm (67.22 Ko)
Sheets("RETX").ListObjects("NOMDIFFERENT").ListRows.Add 'insertion d'une nouvelle ligne au tableau

With Sheets("RETX")
    .Activate
    With Range("NOMDIFFERENT")

    NvLig = WorksheetFunction.Count(.Columns(1)) + 1 'emplacement nvlle ligne ˆ remplir

'Saisie date du jour sur (col1)
    .Range(Cells(NvLig, 1), Cells(NvLig, 1)).Value = CDate(Format(Date, "DD/MM/YYYY"))

'Copie production sur analyse
    Range("TOTAL_PROD").Copy
    .Range(Cells(NvLig, 2), Cells(NvLig, NbCol + 1)).PasteSpecial Paste:=xlPasteValues, Transpose:=True

    End With
End With

End Sub

Vous avez sûrement copié une feuille à partir de l'autre. Le tableau de la seconde ne porte pas le nom RECAP mais RECAPX où X est un nombre.

Il ne peut y avoir 2 tableaux structurés de même nom. En revanche, il peut y avoir plusieurs plages de même nom tant que celles-ci portent sur leur feuille de présence et non sur le classeur.

N'hésitez pas à vous rendre dans le gestionnaire de noms pour consulter tous les noms définis de votre fichier.

Et cette ligne ne correspondra pas dans cette partie

Range("TOTAL_PROD").Copy

Il faut copier les retours

Range("RETOURS").Copy

Hello,

J'ai finalisé le fichier avec votre précieuse aide, j'ai intégré le message avant la génération de la nouvelle journée, pu modifier correctement le code pour que les données PROD et RETOUR soient sur des onglets séparés. Je n'ai pas activé pour l'instant l'édition de PDF.

Demain matin je suis à la boulangerie pour présenter le fichier, j'aurais une pensée pour vous.

Je vous dirais ce qu'il en est mais je pense qu'il seront bien surpris et contents de voir certaines de leurs tâches automatisées et surtout le patron sera content de ne plus imprimer des feuilles et des feuilles chaque jour ! Des économies de ramettes et de toners en perspective !

Aves vos explications je comprends un peu la syntaxe de VBA, je ne saurais partir de zéro mais en tâtonnant je parviens à modifier à ma convenance un code pré-écrit. Je vais, dès que le temps me le permettra, me plonger plus en profondeur dans ce bel outil.

Merci encore et à demain 3GB.

Bonsoir,

C'est super, et même plutôt impressionnant de se familiariser aussi vite avec VBA.

Juste au cas où, si vous comptez parler des éditions PDF, testez-les avant de manière à voir comment rendre l'édition purement automatique ou quand on saisit la date à l'écran (voir lignes ChoixAuto du module PRINCIPAL).

En tout cas, bon courage pour demain à la boulangerie, vous avez du pain sur la planche, si j'ose dire!

Bonne nuit,

Rechercher des sujets similaires à "valeur automatique fichier"