Ajout d'un bouton pour récupérer données d'un fichier externe

Fermé
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020 - 22 avril 2015 à 10:54
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020 - 21 sept. 2016 à 15:03
Bonjour à tous,

Je fais appel à votre amabilité et connaissance éventuelle en VBA pour m'aider à ajouter un bouton à ma macro.

A la base j'ai 3 fichiers :
  • Un premier nommé « cadencier » contenant tous mes articles reconnu par un code IFLS colonne J
  • Une macro « Macro alim cadencier » qui permet de récupérer des fichiers sur mon disque dur et d'alimenter la colonne Ventes du cadencier aves les boutons
  • Le fichier contenant les données qui vont être intégré dans le cadencier grâce à la macro : « fichier_pour_alim_ventes »


Je souhaiterai ajouter un bouton dans ma macro du même type que le deuxième « indiquer le fichier stocks » `qui alimente la colonne Ventes de mon fichier cadencier à partir de Qté Unités colonne L du fichier »SUM( [FLDC-Qté unites] ) »). Cette fois-ci je veux aller chercher un fichier Commandes prendre la colonne U « Arr. Intégrées » du fichier «fichier_alim_CMD »(dossier test macro) et la coller dans le fichier nommé Cadencier à la colonne CMD.

J'ai tout d'abord dans excel recopié la partie pour aller chercher le fichier créer le bouton et je l'ai affecté à une nouvelle macro « Sub CommandButton3_Click() »

Ensuite dans le code j'ai cherché à peu près tout le code ou y avait stock dedans et je l'ai recopié pour « commandes » en changeant le nom de toutes les variables...

PS: quand on appuie sur le bouton mettre a jour le cadencier ça marche ça alimente la colonne ventes. Mais mon bouton CMD ne marche pas... par contre avant d'appuyer sur mettre a jour faut qu'il y ait que la macro d'ouverte sur le pc.

Le dossier ci-joint contient donc : le cadencier, la macro de base, la macro test (contenant le code que j'ai ajouté qui se trouve entre des commentaires `TEST Bouton & `end test bouton pour pouvoir se repérer facilement ; le fichier pour alimenter les stocks avec le 2ème bouton et celui pour alimenter les commandes (nouveau bouton).
... je n'ai fait que reprendre la méthode de création du bouton 2. Je pense avoir fait le plus gros mais n'ayant que des connaissances très basiques de VBA, je suis incapable de rectifier.

Voici tous les fichiers :
https://www.cjoint.com/c/EDwleLoGB1Z
Merci par avance et bonne journée.
A voir également:

305 réponses

Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
28 avril 2015 à 12:00
Autre chose, le cadencier contient quelques formules de calcul comme je vous l'avais expliqué. Dans le cas d'un jour férié, la prévision de vente (Colonne PREV) est à 0. La colonne A contient elle une formule dépendant de cette PREV, le calcul est donc faussé dès lors que PREV=0.
Voici la formule de base : dans A :
=SI((HT5*100/HQ5>100);2;SI((HT5*100/HQ5<30);1;0))
Afin d'ignorer le 0, j'ai changé la formule pour : =SI(HQ5=0;"";SI((HT5*100/HQ5>100);2;SI((HT5*100/HQ5<30);1;0)))
Cela fonctionne mais je vais devoir le faire manuellement pour chaque colonne A. N'y a-t-il pas un moyen d'ignorer le 0 pour toutes les colonnes PREV

De plus, parfois certains utilisateurs du cadencier entrent une lettre dans la colonne Vente par erreur. Cela fausse également les calculs et lors du lancement de la macro il y'a parfois une erreur incompatibilité de type. L'idée serait donc de n'autoriser que des valeurs numériques ce que j'ai fait grâce a validation de données. Mais tout comme pour mon problème d'A et PREV je vais devoir le faire pour toutes les colonnes ventes. Y'a-t-il un moyen d'automatiser pour ces 2 cas ou est-ce qu'il vaut mieux que je modifie les colonnes de chaque cadencier ?

Merci
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
28 avril 2015 à 13:42
Re,

J'ai bien enlevé le dim lc en trop.
Pour mise a jour ventes : toujorus une erreur incompatibilité de type mais les colonnes sont mises jour. avez-vous cette erreur ?
Pour mise a jour cmd : OK mais trèèèès long. et pour vous?
merci
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
28 avril 2015 à 19:00
Autant pour moi, je vous ai beaucoup embêté ... tout marche et ça n'est pas long. MERCI INFINIMENT !!
J'aurai encore une demande svp : pouvez-vous m'expliquez ce que vous avez fait à la fois pour la création du nouveau bouton mais aussi pour la gestion de plusieurs entrepôts ? Afin que je puisse être à peu près autonome...
Une dernière chose assez embêtante : après que la mise à jour du cadencier soit faite ; dans la macro de base le fichier cadencier s'affichait automatiquement t l'on pouvait voir direcetement les valeurs mises à jour. Avec les deux nouveaux boutons c'est soit la page paramètre de la macro soit le fichier alim qui s'affiche. Pourquoi ?

merci
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 28/04/2015 à 19:50
Re,

fichier modifie pour affichage cadencier sur les deux mises a jour

https://www.cjoint.com/c/EDCud1cEGTZ

Demain pour les explications

A demain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
28 avril 2015 à 20:30
Merci beaucoup ! A
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 09:41
Bonjour,

J'ai du changé mon fichier pour les entrées: voici le fichier : https://www.cjoint.com/c/EDDj1umkSLb
et la dernière macro : https://www.cjoint.com/c/EDDj2ZhehlO
En mettant à jour les entrées c'est OK mais j'ai une erreur "incompatibilité de type"...
De plus merci à la fin le cadencier s'affiche mais en retournant sur la macro on se retrouve sur l'onglet paramètres.

merci
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 avril 2015 à 10:23
Bonjour,

En mettant à jour les entrées c'est OK mais j'ai une erreur "incompatibilité de type"... Tout a fait normal, vous avez change de colonne pour code entrepot mais dans le code c'est la colonne A qui est testee pour le nombre de lignes (boucle commande) et il y a une cellule en plus avec "Rapport entier". J'ai pris la colonne du code entrepot, mais la surprise des cellules avec un espace en 655 et 656 !!!!

La colonne A (Chrono) aura-t-elle toujours ce "Rapport entier" a la fin et sans cellules vides entre ??????????
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 10:37
Bonjour,

Elle aura cette forme car c'est une extraction d'une requête.au début j'avais manuellement ajouté la colonne commentaires et code entrepot. Maintenant c'est inclus dans l'extraction mais à la fin.
Oui il y aura toujours le rapport à la fin. Donc l'emplacement des colonnes de ce fichier est important ? je pensais que le code ne cherchait que le nom des colonnes..
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 10:44
Re,

je dis n'importe quoi... DESOLEE !!! C'est bon j'ai enlevé le rapport et c'est Ok plus d'erreur même en ayant code entrepot à la fin.

merci encore
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 avril 2015 à 10:50
Re,

je pensais que le code ne cherchait que le nom des colonnes.. Ben non, ce qui est dedans ou pas compte. Je pourrais faire autrement pour le deplacement dans la "colonne" entrepot-IFLS mais ca fait rajouter des test a chaque tour de la boucle

et

Elle aura cette forme car c'est une extraction d'une requête c'est ce qui fait les caracteres parasites dans les cellules supposees vides en fin de colonnes.
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 10:54
avez-vous bien vu ma réponse au-dessus ? je n'ai rien dit plus d'erreur jcar j'ai enlevé le rapport dans l'extraction.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
Modifié par f894009 le 29/04/2015 à 11:03
Re,

J'etais en train de vous repondre entre temps, vu que je fais plusieurs choses simultanement, ca se telescope un peu. Bien si c'est ok, dites moi ce que vous voulez savoir sur les modif du fichier de base pour votre formation VBA

Il faudrait faire du "menage" dans les declarations de variables des deux macros
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 11:22
Tout bouge assez souvent.
J'ai encore quelques améliorations à apporter à cette macro notamment 2 points majeurs.
Actuellement dans l'onglet « Paramètres », j'ai un seul tableau de poids des jours. Il pourrait être différent pour chaque entrepot. Donc lorsque j'aurai à gérer plusieurs entrepots il faudrait que la macro fasse correspondre chaque entrepot à son tableau...
Autre chose plus importante, le système d'alerte (que je n'arrive pas vraiment à trouver dans le code...) Actuellement l'alerte est calculée jusque J+3 il faudrait qu'elle le soit pour J+4, J+5 et J+6...
Donc je souhaiterai dans un premier temps comprendre comment vous avez fait les modif ? Avez-vous repris exactement la même façon que pour l'autre bouton ? j'ai vu que vous aviez créer de nouveaux modules ? Et il me semble que le module Morigo ne sert à rien ?? on pourrait le supprimer ? est-ce là qu'il faudrait faire du ménage ?
Aussi où avez-vous modifier pour qu'après que la macro ne se lance on se retrouve sur le cadencier ?
Ensuite dans le code je vois « code secteur »... est-ce que la colonne secteur est prise en compte ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 29/04/2015 à 11:52
Re,

Actuellement dans l'onglet « Paramètres », Oui, c'est faisable

Actuellement l'alerte est calculée jusque J+3 Peut-etre, je n'ai pas regarde ceci (etait sense marcher). Je regarde la chose

Au fait, quelle alertes, y a deux sortes ???

Avez-vous repris exactement la même façon que pour l'autre bouton ? Oui, puisque, en general, je reprends la facon de programmer de la personne qui demande sauf si pas approprie a la demande ou si j'ai un codage plus "performant"

Aussi où avez-vous modifier pour qu'après que la macro ne se lance on se retrouve sur le cadencier ? a la fin des macro (il y avait deja cette ligne en commentaire un peu plus haut)
Application.Calculation = xlAutomatic
    MFC.Activate
MsgBox "Le Cadencier a été mis à jour"


Ensuite dans le code je vois « code secteur »...
Secteur = MFMD.Cells(LigCommande, Col_DEPOT_Cmd)

pour le code entrepot, je n'ai pas voulu changer le nom de la variable existante, mais maintenant que tout est presque "ficele", vous pouvez mettre ex: Depot_CMD et remplacer Secteur dans toutes les lignes
Cela fait aussi parti du "menage"
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 16:04
Autre question: je souhaiterai arrondir à l'inférieur les prévisions. Or je vois 2 formules : une dans mOrigo et une dans mPrévisions. laquelle ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 29/04/2015 à 17:10
Re,

regardez quelle code tourne avec le bouton mise a jour previsions cadencier

et
repondez a cette question:
Au fait, quelle alertes, y a deux sortes ???
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 17:45
Oui il y'a deux alertes.
Ma colonne Alerte dans le cadencier est calculée grâce au stock de la veille et de la prévision. A = STOCK Veille / Prévision veille
La macro calcule l'alerte en fonction de la sensibilité des articles (car un article sensible par ex tel que la banane par exemple peut rester 1 jour en entrepôt alors que la pomme de terre, solide, jusque 5 jours). Elle indique si le stock disponible sera trop important ou trop faible en fonction de la PREV de ventes. La cellule A se colore en jaune si le niveau de stock est trop important, en rouge si trop faible et reste blanche si OK. C'est cette alerte que je veux étendre à 6 jours.

La colonne PREV est la quantité prévisionnelle de sortie calculée par la macro chaque jour.
Somme (J-6 à J-1)/6* poids du jour
Si S-1/S-2 = 0,5 , la prévision est peu fiable alors PREV est entourée de rouge : ceci est la deuxième alerte.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 avril 2015 à 18:37
Re,

Tout a fait Thiery mais:
                If (I_Prev = 2 Or I_Prev = 3) Then 'Alerte pour le stock J+2, J+3
                'Format Anglais
                    MFC.Cells(Ligne, Col_Prev + (IPNCJ) + 1).Formula = Alerte_Stock(MFMP, MFC, Ligne_Ref, Col_Prev + (IPNCJ), Col_Sensibilite)
                ElseIf (I_Prev = 1 Or I_Prev = 2) Then 'Alerte Tendance pour les prév J+1, J+2
                    If Alerte_Tendance(MFMP, MFC, Ligne_Ref, Colonne, Nombre_Colonne_Jour) Then
                    'changement du format de la cellule
                        MFC.Cells(Ligne, Col_Prev + 3 + (I_Prev * Nombre_Colonne_Jour)).Borders.Weight = 4 'Epaisseur de la bordure
                        MFC.Cells(Ligne, Col_Prev + 3 + (I_Prev * Nombre_Colonne_Jour)).Borders.Color = RGB(255, 0, 0) 'Couleur de la bordure : rouge
                    End If
                End If


Dans ce code il y a un bleme:
I_Prev = 2
n'est vu qu'une seule fois, pas dans les deux tests. Alors ??????????
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 18:42
euuh ??
car les deux alertes sont différentes ? l'une dépend de la sensibilité de l'article et du stock et l'autre de la prev ?

ou je n'ai pas compris ?
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 18:43
Voici quelques explications que la personne ayant développée la macro avait laissé :

Dans alerte_stock

1. Pour récupérer la sensibilité de l'article
? Sensibilite = MFC.Cells(Ligne_Ref, Colonne_Sensibilite)

2. Pour récupérer le coef de marges inférieures et supérieures de stock
? Marge_Sup = Application.WorksheetFunction.Index(MFMP.Range("Parametre_sensibilite"), Application.WorksheetFunction.Match(Sensibilite, MFMP.Range("Sensibilite"), 0) + 1, Application.WorksheetFunction.Match("Marge Sup", MFMP.Range("Valeurs_stock_marges"), 0))
? Marge_Inf = Application.WorksheetFunction.Index(MFMP.Range("Parametre_sensibilite"), Application.WorksheetFunction.Match(Sensibilite, MFMP.Range("Sensibilite"), 0) + 1, Application.WorksheetFunction.Match("Marge Inf", MFMP.Range("Valeurs_stock_marges"), 0))

3. Construction de la formule
? Formule_Partie_1 = "=If((" & Split(Columns(Colonne_Ref).Address(ColumnAbsolute:=False), ":")(1) & Ligne_Ref & "*100/" & Split(Columns(Colonne_Ref - 3).Address(ColumnAbsolute:=False), ":")(1) & Ligne_Ref & ">" & Marge_Sup & "),2,"
? Formule_Partie_2 = "If((" & Split(Columns(Colonne_Ref).Address(ColumnAbsolute:=False), ":")(1) & Ligne_Ref & "*100/" & Split(Columns(Colonne_Ref - 3).Address(ColumnAbsolute:=False), ":")(1) & Ligne_Ref & "<" & Marge_Inf & "),1,0))"

Dans la fonction principale
4. Insertion de la formule dans la cellule
? MFC.Cells(Ligne, Col_Prev + (I_Prev * Nombre_Colonne_Jour) + 1).Formula = Alerte_Stock(MFMP, MFC, Ligne_Ref, Col_Prev + (I_Prev * Nombre_Colonne_Jour), Col_Sensibilite)

On peut donc voir dans le cadencier la formule dans les cellules alerte stock qui ont un conditionnal formatting sur la valeur renvoyée.

Je ne sais pas si c'est plus clair ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 avril 2015 à 18:51
Re,

ou je n'ai pas compris ? Y de fortes chances que oui.

dans les deux tests
I_Prev = 2
seul le premier sera valide pas le deuxieme.
0
Kivanc Messages postés 390 Date d'inscription jeudi 11 septembre 2014 Statut Membre Dernière intervention 13 août 2020
29 avril 2015 à 18:52
Mais pourtant cette alerte fonctionne bien ?..
0