Macro incrementation / sauvegarde

GRAR

XLDnaute Nouveau
Bonjour à tous,

Tout nouveau sur le site et débutant en matière de macro VBA sur excel, je vous demande de l'aide sur mon problème SVP.

Explication :

Je suis en Logistique, nous établissons des fiches réclamations (quand la marchandise est non conforme pour X raisons (états marchandises, écarts quantité, absence de documents...))

Process de base : Ses fiches sont rempli à la main par les caristes et sont ensuite scanné aux fournisseurs par l'agent administratives...
Constat : process long, risque d'erreur de saisie important et aucun suivi historique n'est possible (car fichier PDF...)

J'ai, alors, crée un formulaire avec un USERFORM (afin de rendre la tâche plus facile et d'éviter toutes erreur de saisie et de lecture).
En remplissant ce formulaire, tout se met dans un tableau (Onglet 1 / BD_RECLAMATION) (ma base de données) et en même temps complète ma fiche réclamation (Onglet 2 / TRAME_RECLAMATION)

Donc cela permet déjà d'avoir un suivi et d'envoyer un document propre et lisible.

Ma 1ere demande : Incrémentation

J'aimerai pouvoir incrémenter un numéro de réclamation automatiquement SELON le fournisseur qui s'affichera dans ma base de donnée, j'explique :

Fournisseur A : réclamation n°001
Fournisseur A : réclamation n°002
Fournisseurs B : réclamation n°001
Fournisseurs B : réclamation n°002
Fournisseurs B : réclamation n°003
Fournisseur A : réclamation n°003
Fournisseur A : réclamation n°004
Fournisseur C : réclamation n°001
etc...

En gros, selon mon fournisseur qui s'affichera , le numéro de réclamation s'incrémentera automatiquement dans l'ordre, en suivant le dernier numéro de réclamation de ce fournisseur.

Ainsi dans ma base de données j'aurai toutes mes réclamations avec tous mes fournisseurs et mes recherches seront fait grâce à des filtres, voire avec un tableau croisé dynamique.

Et j'aurai aucun risque de doublons au niveau des fiches de réclamation.

Ma 2eme demande : Enregistrement

Lorsque la fiche de réclamation est fini de compléter, j'aimerai enregistrer dans un répertoire dédiée à ces fiches avec un nom spécifique qui ne changera jamais + Numéro réclamation + Nom Fournisseur + date
Exemple : Reclamation_001_A_03/02/2016

Petit plus si possible : lors de l'enregistrement, est-ce possible d'enregistrer automatiquement le fichier dans le dossier concerné selon le nom du fournisseur. Exemple :
J:\Reclamations Fournisseurs\A\
J:\Reclamations Fournisseurs\B\

Ai-je été clair ?

Je demande surement BEAUCOUP trop mais je bloque depuis plusieurs jours.

MERCI PAR AVANCE DE VOTRE AIDE !!

Gérard
 

Pièces jointes

  • Exemple_BD Reclamation.xlsm
    52.5 KB · Affichages: 73

Modeste

XLDnaute Barbatruc
Re : Macro incrementation / sauvegarde

Bonjour GRAR et bienvenue,

J'ai déjà un peu de mal avec ta première question: ce n° de réclamation, c'est au moment de cliquer sur le bouton OK de ton userform que tu veux l'incrémenter? Si non, merci d'expliciter plus en détail. Si oui, ce calcul ne pourra se faire qu'après qu'un fournisseur ait été choisi dans la ComboBox Lst_fournisseur?
Si c'est bien de cela qu'il s'agit et puisque tu vérifies apparemment qu'un fournisseur est sélectionné chaque fois, il me semble que l'équivalent d'un NB.SI sur la colonne Fournisseur devrait donner le nombre de fois où ce même fournisseur apparaît déjà?
Sauf erreur, quelque chose comme
VB:
newNum = Application.CountIf(.[E:E], Lst_fournisseur) + 1
... devrait donner le nouveau numéro? Reste à voir sous quelle forme il doit apparaître dans la colonne A :confused:
 

GRAR

XLDnaute Nouveau
Re : Macro incrementation / sauvegarde

Bonjour Modeste,

Merci de ta réponse, j'aimerai incrémenter ce numéro de réclamation lorsque je sélectionnerai le nom d'un fournisseur.

Imaginons que dans le formulaire je le rempli entièrement, je clique sur OK, toutes les données remplirai les champs de ma BD et également dans les cellules de ma Trame et en même temps cela génèrerai automatiquement un numéro de réclamation.

Je sais pas si c'est claire...

Dans la colonne A, on peut imaginer sous la forme " 00 ", et ce numéro serait repris dans le nom du fichier lors de la sauvegarde du fichier dans le dossier.

Après si vous avez d'autres solutions plus simple je suis également preneur. Peut être que ma demande est légèrement "tordu", à voir.

Le but final est vraiment de pouvoir retracer grâce à un croisé dynamique ces réclamations sans avoir de risque de doublon de numéro de réclamation.

A la fin, je pourrai analyser, le nombre de réclamation par fournisseur, par date, par motif etc... retrouver tel réclamation avec tel numéro etc.

merci encore de vous pencher sur ma demande
 
Dernière modification par un modérateur:

Modeste

XLDnaute Barbatruc
Re : Macro incrementation / sauvegarde

Bonsoir,

Ce que tu ne dis pas c'est si tu as testé (et avec quel résultat) le bout de code proposé (puisqu'apparemment j'avais compris ta demande)? La seule chose c'est que je n'afficherais pas ce champ parmi les autres zones à remplir, puisqu'il sera calculé à la confirmation (ou alors tu l'affiches après sélection du fournisseur, sans que les utilisateurs puissent le modifier)

Pour ce qui est d'afficher tes n° de réclamation sous la forme "00" ... ça veut dire que tu auras des doublons, puisque ... un certain nombre de fournisseurs auront sans doute au moins une réclamation '01'. Si tu crées un champ comme celui-là, il me semble que ce serait aussi bien qu'il soit unique; donc soit l'équivalent d'un 'num auto' en Access, soit une concaténation du nom ou code du fournisseur avec le n° tel que tu l'imaginais (ceci n'étant que mon avis, bien sûr!)
 

GRAR

XLDnaute Nouveau
Re : Macro incrementation / sauvegarde

Bonjour,

Je n'ai pas réussi a faire fonctionner le code proposé... rappel : je débute plus ou moins en macro...

Peu importe le moment d'obtenir un nouveau numéro de réclamation, juste ce qu'il faut c'est que le nouveau n° de réclamation s'affiche automatiquement dans ma BD (afin de pouvoir une trace) et au moment où je transmet le fichier au fournisseur (puisque ce numéro sera utilisé comme n° de suivi).

En ce qui concerne des n° type "00", en effet il y a aura doublon (tu la très bien expliqué) mais cela ne pose pas problème.
Ce que je ne veux pas, est une incrémentation simple à chaque nouvelle réclamation crée,
et ce que je veux est une incrémentation par fournisseur.

Parce que si c'est une incrémentation simple, lorsque j'envoie à un fournisseur il peut avoir un numéro de réclamation n°43 par exemple alors que pour ce fournisseur il peut y en avoir que 2 ...

Est ce que mon raisonnement parait logique et claire ?
 

Modeste

XLDnaute Barbatruc
Re : Macro incrementation / sauvegarde

Bonjour,

Est ce que mon raisonnement parait logique et claire ?
En tout cas, ça correspond à ce que j'avis cru comprendre ... La proposition que j'ai faite devrait donc convenir? Quant à l'endroit où insérer cette ligne, tu peux le faire dans ta Sub BtnOk_Click, juste après le With Sheets("BD_RECLAMATION")

Pour inscrire la valeur dans la colonne A de ta feuille, tu peux même écrire directement
VB:
.Cells(LigneVide, 1) = Application.CountIf(.[E:E], Lst_fournisseur) + 1
... à la place de ta première instruction à cet emplacement et formater ta colonne A avec un format personnalisé de type 00

Attention qu'après ton With Sheets ... il conviendrait d'ajouter un point devant chaque Cells(...) comme je l'ai écrit ci-dessus.
La partie calculant le n° de la 'LigneVide' devrait passer sous le With, elle aussi (avec un point à rajouter ici aussi)

Pour le reste, je ne m'engage pas!
 

GRAR

XLDnaute Nouveau
Re : Macro incrementation / sauvegarde

Impeccable Modeste !!

Merci beaucoup !!

C'est exactement ce que je voulais, sa me paraissait tellement compliqué et en voyant ton code... c'est tellement facile !

Plus qu'a trouver l'action pour sauvegarder avec un nom type mais je devrais y arriver, j'ai trouvé l'enregistrement en fonction de la date donc je pense que je vais me pencher la dessus...

Je le mentionnerai quand j'aurai trouver.

Encore un grand merci à toi.
 

GRAR

XLDnaute Nouveau
Re : Macro incrementation / sauvegarde

Bonjour,

J'ai trouver la fonction enregistrement du fichier avec un nom type :

ActiveWorkbook.SaveAs Filename:="D:\RECLAMATION\" & "Fiche de réclamation" & " " & Range("B9") & " " & "n°" & Range("C4") & ".xlsx" (sous la forme de : Fiche de réclamation "nomfournisseur" n° ***)

Mais du coup, j'aimerai mieux faire en enregistrant le nouveau fichier dans répertoire général, avec un sous dossier "l'année" et un sous dossier de ce dernier avec "le nom fournisseur, exemple :
D:\RECLAMATION
D:\RECLAMATION\2016
D:\RECLAMATION\2016\"nom fournisseur"

Et du coup chaque fichier sera enregistrer automatiquement dans le bon dossier. Si le dossier n'existe pas il le crée, exemple pour un fournisseur.
Si le fournisseur B n'existe pas encore, en créant le fichier du fournisseur B, cela crée un nouveau dossier Fournisseur B dans le dossier 2016 (si on passe à 2017, cela crée un dossier 2017...)

J'ai plus ou moins vu des exemples et j'ai plus ou moins réussi mais j'ai mal a l'adapter à mes besoins..

Merci de votre aide par avance,

G
 

GRAR

XLDnaute Nouveau
Re : Macro incrementation / sauvegarde

J'ai réussi à faire un code qui à la fois :
- Enregistre mon fichier (exactement comme je veux)
et
- Me crée un dossier avec le nom du fournisseur (ce que je veux)

Le problème : Ce fichier (qui vient d'être crée) ne s'enregistre pas dans ce dossier au nom du fournisseur... mais dans le dossier général..

Code:
Dim Chemin, Fournisseur, Fichier, Numéro
Chemin = "D:\RECLAMATION\"
Fournisseur = Range("B9")
Numéro = Range("C4")
Fichier = Fournisseur & " " & Numéro & ".xls"

If Dir("D:\RECLAMATION\" & Fournisseur, 16) = "" Then MkDir "D:\RECLAMATION\" & Fournisseur
ActiveWorkbook.SaveAs "D:\RECLAMATION\" & "Fiche de réclamation" & " " & Range("B9") & " " & "n°" & Range("C4") & ".xls"

Y'a t'il un bout de code qui pourrai faire ce que je voudrais ???
 
Dernière modification par un modérateur:

GRAR

XLDnaute Nouveau
Re : Macro incrementation / sauvegarde

Bonjour Modeste,

J'ai trouver ce midi :

Code:
ActiveWorkbook.SaveAs "D:\RECLAMATION\" & Fournisseur & "\" & "Fiche de réclamation" & " " & Fournisseur & " " & "n°" & Numéro & ".xls"

En effet, tu as trouvé exactement la solution à mon problème.

C'est parfait ainsi !

Merci encore (surtout pour l'incrémentation !!)

Par contre j'ai une autre question ...

Je fais un copier coller du code que je viens de mettre mais en mettant à la fin : ".pdf" afin d'avoir un 2eme fichier qui s'enregistre en PDF. Alors c'est bon MAIS je ne peux pas du tout lire le fichier, sa me dit : erreur de lecture, le fichier peut être endommagé ou est en lecture seul... je ne comprend pas alors que l'enregistrement se fait correctement.
Je veux un fichier supplémentaire en PDF pour ensuite l'envoyer par mail.

Il n'y plus que ce problème de lecture et j'aurai fini ma macro parce que j'ai trouver la suite de mon code pour l'envoi.

Voici mon code pour le format PDF et ensuite l'envoi du fichier en PJ :

Code:
ActiveWorkbook.SaveAs "D:\Gérard NGUYEN\TEST RECLAMATION\" & Fournisseur & "\" & "Fiche de réclamation" & " " & Fournisseur & " " & "n°" & Numéro & ".pdf" <<= copier coller du 1er mais en .pdf

'l'action pour l'envoi par mail

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        CurFile = ThisWorkbook.Path & "\" & "Fiche de réclamation" & " " & Fournisseur & " " & "n°" & Numéro & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
        Application.Dialogs(xlDialogSendMail).Show

a noter que : Fournisseur et Numéro je les ai mis en "variable" (Dim)

Ce code marche très bien et répond à mes attentes, mais le fichier n'est pas lisible, il s'enregistre bien mais impossible de le lire, pourquoi ??!!!
 
Dernière modification par un modérateur:

Modeste

XLDnaute Barbatruc
Re : Macro incrementation / sauvegarde

Re,

En Excel 2007, on pouvait "Enregistrer sous" ... au format pdf?
Si oui, utilise l'enregistreur de macro: il me semble que la syntaxe que tu as utilisée pour le SaveAs ne vaut que pour le format de fichier par défaut?
 

GRAR

XLDnaute Nouveau
Re : Macro incrementation / sauvegarde

En utilisant l'enregistrement macro, je n'ai pas de code pour l'action "enregistrer sous" est-ce normal ?

Cela me met seulement :

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"D:\RECLAMATION\ACM\Fiche de réclamation AAA n°2.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True

J'ai remarquer qu'il y avait une erreur par rapport à la lecture seule, mais je comprend pas. L'action est "simple", mon formulaire génère ma BD et également ma réclamation que j'enregistre en format .xls et en format .pdf et cela ouvre ma boite mail.
mais la lecture du fichier est impossible, il y a quelque chose avec la lecture seule...
 
Dernière modification par un modérateur:

Modeste

XLDnaute Barbatruc
Re : Macro incrementation / sauvegarde

Tu réfléchis à voix haute et tu écris au fur et à mesure, là??
Parce que ton message précédent a été modifié après que j'en aie pris connaissance ... et je n'ai pas vu ton ajout au moment où j'ai répondu! Autrement, j'aurais marqué un temps d'arrêt:
- dans ton message #11, dans le code fourni à la fin du message, quelle est la partie dont tu considères qu'elle permet de créer le pdf?
- tu as un "ThisWorkbook.Path" ... il correspond à D:\RECLAMATION :confused: Là tu ne précises pas le sous-dossier "Fournisseur" ... c'est normal?

Dans ton message #13, tu dis:
- "je n'ai pas de code pour l'action "enregistrer sous"" mais à quoi donc correspond le code que tu as fourni, alors?
- "J'ai remarquer qu'il y avait une erreur par rapport à la lecture seule" ... mais ... de quoi parles-tu?
 

GRAR

XLDnaute Nouveau
Re : Macro incrementation / sauvegarde

Désolé pour mes post.

Je te répond dans l'ordre :

- dans ton message #11, dans le code fourni à la fin du message, quelle est la partie dont tu considères qu'elle permet de créer le pdf?

Pour moi le code qui permet de créer le pdf est :
Code:
ActiveWorkbook.SaveAs "D:\Gérard NGUYEN\TEST RECLAMATION\" & Fournisseur & "\" & "Fiche de réclamation" & " " & Fournisseur & " " & "n°" & Numéro & ".pdf"

- tu as un "ThisWorkbook.Path" ... il correspond à D:\RECLAMATION Là tu ne précises pas le sous-dossier "Fournisseur" ... c'est normal?

Ici, le Thisworkbook.path, reprend le dernier dossier annoncé (je pense), parce que mon fichier PDF (même s'il est illisible) est bien enregistré dans mon répertoire avec le fichier .xls.

- "je n'ai pas de code pour l'action "enregistrer sous"" mais à quoi donc correspond le code que tu as fourni, alors?

Pour moi, je pensais qu'il y avais un code spécifique pour le changement de format, différent de l'enregistrement en .xls

- "J'ai remarquer qu'il y avait une erreur par rapport à la lecture seule" ... mais ... de quoi parles-tu?

c'est parce qu'après la création du fichier PDF, lorsque je me rend dans mon dossier et que j'essaie de lire le fichier, sa me met des erreurs de lecture, à cause d'un défaut de codage, ou problème du fichier qui est en lecture seule

Voilà.

C'est pour ça que j'ai parlé de ça, j'ai mentionné toutes les anomalies que je voyais afin de t'aider au maximum pour déceler le problème mais je vois qu'au final, je t'ai embrouillé... DÉSOLÉ !!
 

Discussions similaires

Réponses
9
Affichages
517
Réponses
8
Affichages
288

Statistiques des forums

Discussions
312 145
Messages
2 085 762
Membres
102 965
dernier inscrit
Mael44