Ajout d'un bouton pour récupérer données d'un fichier externe
Kivanc
Messages postés
390
Date d'inscription
Statut
Membre
Dernière intervention
-
Kivanc Messages postés 390 Date d'inscription Statut Membre Dernière intervention -
Kivanc Messages postés 390 Date d'inscription Statut Membre Dernière intervention -
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 :
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.
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:
- Ajout d'un bouton pour récupérer données d'un fichier externe
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Fichier rar - Guide
305 réponses
Merci beaucoup ! mais après avoir fait plusieurs recherche de codes IFLS présents dans le fichier alim_cmd je l'ai retrouve TOUS dans le cadencier... donc la macro ne marche pas à ce niveau là... elle ne retrouve pas les articles !donc je pense qu'elle recherche pas au niveau des codes IFLS. ou code IFLS plus autre donnée ?
merci à vous
merci à vous
Bonjour,
tableau pour recherche:
test pour recherche:
'Cherche la bonne ligne dans le tableau virtuel
'Le "-1" à la fin correspond à un décalage
et ceci qui ne devrait pas etre ici puisque c'est une seule cellule qui n'evolue pas:
'Modifier ici la ligne si la date n'est pas sur la ligne Ligne1Cadencier
A+
tableau pour recherche:
'Cree un tableau pour concaténer Article et entrepôt ReDim MonTableau(MaxLigne) 'boucle for - next pour alimenter le tableau For Ligne = 1 To MaxLigne MonTableau(Ligne) = Application.Text(MFC.Cells(Ligne, Col_DEPOT_Cad), "000") & "-" & _ Application.Text(MFC.Cells(Ligne, Col_IFLS_Cad), "000000") Next
test pour recherche:
'Cherche la bonne ligne dans le tableau virtuel
'Le "-1" à la fin correspond à un décalage
Ligne = Application.Match(Depot & "-" & IFLS, MonTableau, 0) - 1
et ceci qui ne devrait pas etre ici puisque c'est une seule cellule qui n'evolue pas:
'Modifier ici la ligne si la date n'est pas sur la ligne Ligne1Cadencier
Colonne = Application.Match(CLng(CDate(MaDate)), MFC.Rows(Ligne1Cadencier), 0)
A+
Je n'ai pas compris.. dois-je supprimer ces lignes de code ?
Re,
Si, je joint un classeur recap des colonnes IFLS des trois classeurs
https://www.cjoint.com/c/EDylCU5BXmn
la recherche se faisant (bel emplume) correctement vous n'avez que 128 articles dans le cadencier, donc tout le reste n'est pas trouve. Je ne dis pas que c'est normal, mais c'est ce qui se passe au vu du code VBA
Peut-il y avoir plusieurs entrepots ??
Si, je joint un classeur recap des colonnes IFLS des trois classeurs
https://www.cjoint.com/c/EDylCU5BXmn
la recherche se faisant (bel emplume) correctement vous n'avez que 128 articles dans le cadencier, donc tout le reste n'est pas trouve. Je ne dis pas que c'est normal, mais c'est ce qui se passe au vu du code VBA
Peut-il y avoir plusieurs entrepots ??
Pour le moment oui je ne gère que l'entrepot 730. Au futur il y en aura 3 de plus..
Mais quand je lance ma macro pour le fichier commande elle n'en reconnait 0 de IFLS. La colonne CMD du cadencier reste inchangée... et vous ?
Mais quand je lance ma macro pour le fichier commande elle n'en reconnait 0 de IFLS. La colonne CMD du cadencier reste inchangée... et vous ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
0 de IFLS en effet, c'est peut etre un probleme de format
La colonne CMD cadencier a priori rien ne se passe !!!
0 de IFLS en effet, c'est peut etre un probleme de format
La colonne CMD cadencier a priori rien ne se passe !!!
Re,
0 de IFLS fichier CMD: pas probleme de format, y a pas de colonne code-entrepot mais ARUE-Code Secteur qui n'a rien a voir
0 de IFLS fichier CMD: pas probleme de format, y a pas de colonne code-entrepot mais ARUE-Code Secteur qui n'a rien a voir
Re,
c'est ce que je vous disais hier! Oui, mais ce qui prend du temps, c'est de comprendre le code, trouver ce qu'il fait, ce qu'il devrait faire en fonction de vos explications, trouver la ou ca coince et nous ne somme pas aider avec ceci:
Oui j'ai mis cette colonne en pensant sans avoir vraiment réfléchi au pourquoi...
Colonne CMD du calencier pas mise a jour
A+
c'est ce que je vous disais hier! Oui, mais ce qui prend du temps, c'est de comprendre le code, trouver ce qu'il fait, ce qu'il devrait faire en fonction de vos explications, trouver la ou ca coince et nous ne somme pas aider avec ceci:
Oui j'ai mis cette colonne en pensant sans avoir vraiment réfléchi au pourquoi...
Colonne CMD du calencier pas mise a jour
A+
Oui... je suis désolée. Ne suffit il pas de supprimer les colonnes que j'ai mis au hasard.. comme code secteur ?
Re,
Oui... je suis désolée Y a pas de lezard, c'etait juste pour vous "chambrer" un peu (l'occasion etait vraiment trop bonne).
Pour le recherche dans le fichier CMD, ne pas mettre le code entrepot c'est sans probleme, mais quand vous aurez x entrepots y aura-t-il la meme code article dans plusieurs entrepots ????
Pour la colonne CMD de calendrier, je cherche (vous nous avez tout dit ??)
A+
Oui... je suis désolée Y a pas de lezard, c'etait juste pour vous "chambrer" un peu (l'occasion etait vraiment trop bonne).
Pour le recherche dans le fichier CMD, ne pas mettre le code entrepot c'est sans probleme, mais quand vous aurez x entrepots y aura-t-il la meme code article dans plusieurs entrepots ????
Pour la colonne CMD de calendrier, je cherche (vous nous avez tout dit ??)
A+
Oui au futur il y'aura le même IFLS dans plusieurs entrepots. ça risque de poser problème ?
Je pense vous avoir tout dit : mon bouton va chercher le fichier récupère la colonne de alim_cmd « Arr. Intégrées » et l'incrémente dans CMD. Et il doit reconnaitre chaque article grâce à son code IFLS, ensuite s'il a trouvé l'article il met MAJ OK dans la colonne Comments de alim_cmd, sinon il écrit non trouvé.
Je pense vous avoir tout dit : mon bouton va chercher le fichier récupère la colonne de alim_cmd « Arr. Intégrées » et l'incrémente dans CMD. Et il doit reconnaitre chaque article grâce à son code IFLS, ensuite s'il a trouvé l'article il met MAJ OK dans la colonne Comments de alim_cmd, sinon il écrit non trouvé.
Re,
Ok pour la description. Hier (moi aussi), j'avais trouve que les deux boucles
etaient ce qui occasionnait un temps si long d'execution, je confirme aujourd'hui c'est pas comme ca qu'il faut faire. Je m'explique: a chaque tour de la boucle
tous les calculs sont fait pour le fichier stock et les calculs de prevision pour un seul article de la boucle
Donc il faut revoir l'empilage du code pour eviter ca
Ok pour la description. Hier (moi aussi), j'avais trouve que les deux boucles
For LigStock = Ligne1Stock + 1 To fin0 For LigCommande = Ligne1Commande + 1 To fin
etaient ce qui occasionnait un temps si long d'execution, je confirme aujourd'hui c'est pas comme ca qu'il faut faire. Je m'explique: a chaque tour de la boucle
For LigCommande = Ligne1Commande + 1 To fin
tous les calculs sont fait pour le fichier stock et les calculs de prevision pour un seul article de la boucle
For LigStock = Ligne1Stock + 1 To fin0
Donc il faut revoir l'empilage du code pour eviter ca
Effectivement le code fait plusieurs calculs mais je pense que ça n'entre pas dans la colonne CMD.
La macro calcule une alerte stock (colonne A du cadencier). Celle-ci dépend de la sensibilité des articles (car un article sensible par ex tel que la banane par exemple peut rester 1 jour en entrepot 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. D'ailleurs actuellement la macro n'alerte que jusque J+3 et j'aimerai l'étendre jusque J+6...
Voici les explications plus détaillées au niveau du code :
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. Cosntruction 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.
La prévision elle est calculée grâce à une formule : (Somme des ventes de J-1 à J-6 précédents)/6*Poids des jours.
Le poids du jour est l'impact de vente il est différent pour un jour férié. La macro (lorsqu'on coche jour férié) est capable de modifier cette formule.
La prévision a également une alerte, la cellule s'encadre en rouge si elle est estimée comme peu fiable (par rapport aux ventes des 6 jours ou 2 semaines précédentes)
Je pense avoir fait le tour de tout ce que la macro fait. J'espère avoir été claire
La macro calcule une alerte stock (colonne A du cadencier). Celle-ci dépend de la sensibilité des articles (car un article sensible par ex tel que la banane par exemple peut rester 1 jour en entrepot 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. D'ailleurs actuellement la macro n'alerte que jusque J+3 et j'aimerai l'étendre jusque J+6...
Voici les explications plus détaillées au niveau du code :
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. Cosntruction 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.
La prévision elle est calculée grâce à une formule : (Somme des ventes de J-1 à J-6 précédents)/6*Poids des jours.
Le poids du jour est l'impact de vente il est différent pour un jour férié. La macro (lorsqu'on coche jour férié) est capable de modifier cette formule.
La prévision a également une alerte, la cellule s'encadre en rouge si elle est estimée comme peu fiable (par rapport aux ventes des 6 jours ou 2 semaines précédentes)
Je pense avoir fait le tour de tout ce que la macro fait. J'espère avoir été claire
Je viens de rajouter un même article (même IFLS) pour des entrepots différents dans la macro de base. elle tourne mais marque pour les entrepots autre que le 730 "non trouvé". La macro recherche donc dans alim_ventes par rapport a IFLS et entrepot. Faut-il ajouter une colonne entrepot dans alim_cmd ?
Voici le cadencier pour plusieurs entrepots que je pense construire... c'est juste un essai: https://www.cjoint.com/c/EDyqxTFVKE9
La fonction du cadencier est de récupérer toutes les ventes du jour et commandes fournisseurs. De calculer le stock restant pour le lendemain : stock jour J = (stock veille + commades veille) - vente veille. De calculer l'alerte pour voir si le stock est suffisant...
La fonction du cadencier est de récupérer toutes les ventes du jour et commandes fournisseurs. De calculer le stock restant pour le lendemain : stock jour J = (stock veille + commades veille) - vente veille. De calculer l'alerte pour voir si le stock est suffisant...
Re,
Oui, ce sera une gestion a l'entrepot. Donc si l'ai compris, normalement dans le cadencier il y aura tous les articles de tous les entrepots, mais comment ils y entrent ...
Sur un fichier que je modifie pour optimiser le temps d'execution, je suis un peu freiner par des erreurs excel intempestives, mais je persiste
A+
Oui, ce sera une gestion a l'entrepot. Donc si l'ai compris, normalement dans le cadencier il y aura tous les articles de tous les entrepots, mais comment ils y entrent ...
Sur un fichier que je modifie pour optimiser le temps d'execution, je suis un peu freiner par des erreurs excel intempestives, mais je persiste
A+
4 entrepots max par cadencier. Comment ils y entrent.. bonne question pour le moment rien n'est sur...
merci beaucoup. vous modifiez quel fichier ? pour l'histoire des colonnes secteur... ?
merci beaucoup. vous modifiez quel fichier ? pour l'histoire des colonnes secteur... ?
Bonjour,
Excusez le retard... "mise a jour CDM ok" ?? les valeurs s'incrément dans le cadencier ? Pouvez vous m'envoyer le fichier svp ? "qui modifie la date"
Excusez le retard... "mise a jour CDM ok" ?? les valeurs s'incrément dans le cadencier ? Pouvez vous m'envoyer le fichier svp ? "qui modifie la date"
Bonjour,
"mise a jour CDM ok" ?? c'est le fichier CMD, l'ai modifie le code pour inclure le code entrepot "730" et le fichier est mis jour avec les ok ou pas trouve.
fichier que je modifie pour optimiser l'execution:
https://www.cjoint.com/c/EDBjnFMQLnG
"mise a jour CDM ok" ?? c'est le fichier CMD, l'ai modifie le code pour inclure le code entrepot "730" et le fichier est mis jour avec les ok ou pas trouve.
fichier que je modifie pour optimiser l'execution:
https://www.cjoint.com/c/EDBjnFMQLnG
Re,
Je viens de tester votre fichier pour le 18/04. La colonne CMd ne s'alimente pas et j'ai une erreur "incompatibilité de type"
Je viens de tester votre fichier pour le 18/04. La colonne CMd ne s'alimente pas et j'ai une erreur "incompatibilité de type"
Et aucun commentaire dans la colonne Comments pour vous aussi ? Si non envoyez moi votre dossier complet
Re,
C'est pire que tout, plus rien ne marche par rapport a vendredi !!!!!
Je vais redecortiquer la chose pour trouver le schmilblick
C'est pire que tout, plus rien ne marche par rapport a vendredi !!!!!
Je vais redecortiquer la chose pour trouver le schmilblick
Alors là je tombe de haut... je suis désolée mais tout doit changer !
Je m'explique.. je me rends compte avoir mal compris la demande !!! Je pensais devoir créer un bouton seulement pour changer de fichier CMD mais en fait les deux mises à jour ne doivent pas se faire en même temps. Donc il faudrait 2 boutons de mise à jour !! (dans 2 onglets)
Je m'explique.. je me rends compte avoir mal compris la demande !!! Je pensais devoir créer un bouton seulement pour changer de fichier CMD mais en fait les deux mises à jour ne doivent pas se faire en même temps. Donc il faudrait 2 boutons de mise à jour !! (dans 2 onglets)