VBA à améliorer et compléter

Résolu
anthony -  
 anthony -
Bonjour,

voici des fichiers
http://www.cijoint.fr/cjlink.php?file=cj201105/cij55nMKF0.zip
j'ai essayé de débuter le code dans le fichier 001 BL.xls pour que ce soit plus simple pour vous de voir comment ça doit fonctionner (c'est dans le module 3)

en faisant tourner la macro au pas à pas vous allez voir les différentes opérations.
je susi convaincu que je n'ai pas opté pour les meilleurs choix (la preuve puisque je ne peux pas l'utiliser au delà d'uen fois)

il y a également des choses que je ne sais pas faire, je les ai notées en commentaires

je suis là si vous avez des questions pour mieux comprendre.


23 réponses


 
Bonjour,
Pouvez-vous expliquer simplement ce que vous désirez réaliser (le but à atteindre!), se sera mieux que de lire les commentaires dans la procédure ?

Salutations.
Le Pingou
0
anthony
 
Bonjour,
Les entrées sont le fichier 001 BL.xls
tous les 2 jours on importe un fichier texte qui nous liste les livraisons du jour.

Ainsi pour chaque ligne nouvellement insérée, il y a un fichier de données que je dois compiler dans le second fichier pour vérifier la qualité

Donc l'idée c'est que pour chaque nouvelle ligne, on vérifie que ce lot n'ait pas déjà été reçu, si c'est le cas on passe à la ligne suivante
si on ne l'a pas reçu on exécute la macro :
ouvrir l'autre fichier
importer le fichier des données dans la feuille "atelier"
on se place dans le bon onglet (en réalité il y en a 50)
on copie le n° de lot et sa date après la dernière colonne
on place sur chaque ligne les données correspondantes en allant les chercher dans la feuille atelier
on vérifie en simultané que les unités soient bien les même sur chaque ligne
si c'est ok, on poursuit, sinon message indiquant que les unités sont différentes
et ensuite on passe à la ligne suivante du fichier 001 BL.xls
0

 
Bonjour,
Merci pour l'information.
Je comprends que les livraisons du jour se trouvent dans le classeur [001 BL.xls] dès la ligne 20.
Ensuite vous voulez insérez chaque ligne dans la feuille correspondante du classeur [ ...... ?...] uniquement si non existante dans ce dernier.
Est-ce bien cela .... ?
0
anthony
 
en fait le fichier 001 BL.xls n'est pas "touchable" je veux dire que chaque livraison doit apparaître pour l'historique. donc les doublons ne doivent pas être effacés.
en fait dans le fichier graphes il y a déjà des lots présents donc l'idée était de ne pas rappatrier des données d'un lot qui était déjà compilé d'où la vérification que je suggérais dans le fichier 001 BL.xls qui contient tout l'historique. >> ainsi on évite les doublons dans le fichier graphes
0

 
Bonjour,
Merci pour l'information.
Eh bien c'est encore bien trouble pour savoir quoi va dans quoi et de quel endroit a quelle endroit.. !
Je vais voir si j'arrive à faire le joint en regardant vos 2 classeurs [001 BL.xls] (comme il est intouchable, il faut une autorisation pour le voir ... ?) et [Graphes.xls].
Patience.
0
anthony
 
non non aucune protection, je veux dire par intouchable que toutes les données présentes dans 001 BL.xls doivent être conservées. c'est justement ce fichier qui contient toutes les données d'entrée qui exécute la macro.

je pense réellement qu'il faille lancer la macro du module 3 de 001 BL.xls pour comprendre le processus que je cherche à obtenir et le modifier pour obtenir le fonctionnement basique qui fonctionne systématiquement car moi ça ne fonctionne que pour remplir la première colonne vu que le vllokup fait référence au nombre de colonne.
Tout mes commentaires sur les points que je n'ai pas su mettre en oeuvre ça serait dans un second temps
0

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

Posez votre question

 
Bonjour,
Lorsque j'aurai neutralisé les messages d'erreur de la procédure, il me sera alors possible de trouver ce que vous voulez réaliser.
J'ai besoin d'un certain temps...!
Je vous donnerai des nouvelles dès que possible, mais pas avant demain soir.
0
anthony
 
en principe ça plante après le premier vlookup
là les messages d'erreur doivent venir des constantes imposées, en l'occurrence le directory du fichier graphes
0

 
Bonjour,
Impossible de faire tourner votre procédure, aucun résultat sauf des messages d'erreur, donc impossible de corriger et ou compléter votre procédure sans savoir exactement ce que vous voulez comme résultat...
En déchiffrant votre code je pense ceci :
Lancer la procédure depuis le classeur de contrôle [001 BL.xls].
Ouvrir le classeur des fournisseurs (x....y) [Graphes.xls] et importer les données du document XML sur la feuille [Atelier].
De cette feuille on copie le [BELNR] cellule [R4], le [DATUM] cellule [F1] (convertir date format européen), les lignes de la colonne [VALUE]/ [AA] qui correspondes aux noms des produits de la colonne [A] feuille [Fournisseur concernée] dans la première colonne vide de la feuille du fournisseur(x....Y).

Est-ce correct ? OUI / NON

Quelles informations doit-on insérer dans la feuille du classeur de contrôle [001 BL.xls]

Salutations.
Le Pingou
0
anthony
 
ça montre mon niveau en VBA
j'ai imposé la constante du répertoire alors qu'ensuite j'indique le répertoire !!!!
en fait il y a le directory du second fichier à changer et modifier l'extension XLSM par XLS sinon effectivement ça plante d'emblée. et là chez moi ça plante pour trouver la dernière colonne remplie alors que ça fonctionnait au boulot ... :-/

OUI tout est correct dans ce que tu as décrit, c'est la procédure qui aurait dû se passer avec ma macro

les informations dans 001 BL.xls sont des imports de fichiers texte, et il n'y a rien d'autre à faire dessus. ce fichier donne juste les entrées des lots et on vérifie qu'on a bien reçu les documents à travers les colonnes P et Q

je suis sincèrement désolé de t'avoir fait perdre autant de temps, j'aurais dû recontroler que ça fonctionnait en postant les fichiers
0

 
Bonjour,

Bonjour,

Merci pour l'information.
En indiquant les données que je vous ai soumise, que vous que vous venez de confirmer, cela aurait été plus simple de comprendre votre procédure et de l'adapter dans le but de produire le résultat correct.
Dans la soirée le résultat.
Bonne journée.
0
Anthony
 
J'avais posté il y a qques semaines en décrivant comme vous l'avez fait et en joignant les fichiers mais je n'ai eu aucune réponse donc j'ai pensé à démarrer la macro pour que ce soit plus parlant (mais bon ça n'a rien donné)

http://www.cijoint.fr/cjlink.php?file=cj201105/cijke7mJTR.xls
ici le fichier en l'état actuel avec toutes ces lignes pour vous donnez une idée d'uen nombre de lignes que ça génère à chaque livraison et donc l'intérêt (d'après moi) d'instaurer une fonction permettant de ne traiter que les nouvelles entrées (genre un compteur qui dit que lors du dernier import nosu étions à la ligne 3985 et donc au prochain la macro devra se lancer à partir de la ligne 3986)
enfin je pense que vous êtes le mieux à même de dire ce qui est le plus judicieux
0

 
Bonjour,
N'en rajoutez plus, je ne vais pas me replonger dans une nouvelle version du classeur.
Je suis sur l'adaptation de votre procédure, en début de soirée le résultat.
0

 
Bonjour,
Je vous laisse essayer, la procédure est déclencher par le bouton [Clic-moi].
Ne pas oublier de renseigner correctement le non du classeur et le chemin du répertoire des dossiers !
Ma proposition : https://www.cjoint.com/?3EEx3yaP0su
0
Anthony
 
Bonjour,
tout fonctionne très bien :-)

j'aimerais savoir si je pouvais te demander à nouveau de l'aide pour compléter cette procédure.
J'aimerais apporter des contrôles :
- vérifier que les unités de la feuille atelier (colonne X) soit les mêmes que la colonne O du fichier graphe
- avertir l'utilisateur qu'une valeur serait absente pour uen ligne dans la feuille atelier

- Est il possible de mettre en place une boucle pour que chaque nouvelle ligne exécute la macro ?
http://www.cijoint.fr/cjlink.php?file=cj201105/cijke7mJTR.xls
ce fichier est le fichier complet. comme on peut le voir il y a plusieurs lignes insérées à chaque nouvelle date et la macro devrait s'exécuter pour chaque ligne sauf que dans mon cas j'ai imposé les constantes (lot, fournisseur, PN, etc)

j'ai essayé en faisant par ex : lot = Range("N:N").Value
mais ça ne donne rien
0

 
Bonjour,
Sans voir le détail, il faut préciser si la référence base est la liste des produits de la colonne [WW] de la feuille atelier ou celle la colonne [A] de la feuille du fournisseur .... !

- vérifier que les unités de la feuille atelier (colonne X) soit les mêmes que la colonne O du fichier graphe
Pour quelle raison les unités, dans la procédure le contrôle est réalisé sur [CHARACTERISTIC_NAME] .... Réponse.......

Avertir l'utilisateur qu'une valeur serait absente pour une ligne dans la feuille atelier
Quelle valeur et par rapport à quoi .... ?

Est-il possible de mettre en place une boucle pour que chaque nouvelle ligne exécute la macro ?
Oui mais il faut définir par rapport à quoi.... ?

Je regarderai votre fichier plus tard dans la journée.
0

 
Bonjour,
Merci pour les informations.
Je vous prépare une solution avec contrôle pour l'exécution de la procédure sur la base de ce que j'ai compris, ensuite on avisera.
Patience.
0

 
Bonjour,
Voici ma proposition : https://www.cjoint.com/?3EFxCdIPaCw
Regardez si cela vous convient !
0
anthony
 
:-)
j'ai fait un premier essai et ça me semble très bien
et le transfert des infos du vlookup sur une seconde feuille est une bonne idée tout comme la liste déroulante
demain je verrai avec le fichier de base et les fichiers xml pour voir sur une plus grande échelle mais je susi déjà content
Merci beaucoup pour ce travail
0

 
Bonjour,
Petite question : est-ce que le classeur de compilation est toujours le même (Graphes.xls/xlsm) et qu'elle est le nombre de feuilles ?
0
Anthony
 
oui toujours le même fichier de compilation
il y a 90 feuilles actuellement et avec les prochains ajouts on arrivera à 100 mais guère plus.

je vais modifier cette partie de la procédure
'activer la feuille du fournisseur
Worksheets(feuille).Activate
car pour une même feuille il peut y avoir 2 PN différents. il s'agit du même produit et des mêmes données, c'est simplement la contenance qui change et donc je compile sur la même feuille

j'avais mis ça pour faire la recherche sur les 2 première cases A1 et A2 vu qu'ici je place les différents PN, reste à savoir si c'est la meilleure technique pour trouver la bonne feuille
'Se positionner dans l'onglet correspondant au PN et au bon fournisseur
Dim celluletrouvee As Range
Dim feuille As Object

For Each feuille In Worksheets
Set celluletrouvee = Range("A1:A2").Find(onglet, lookat:=xlWhole) 'pas sûr qu'il faille utiliser ces arguments là
Worksheets(onglet).Activate
Next
0

 
Bonjour,
J'ai modifié la procédure pour tenir compte que c'est le même classeur de compilation.
Les fichiers : https://www.cjoint.com/?3FbsNAy4oUF
0

 
Bonjour,
Je ne trouve aucune différence entre vos fichiers de ce jour et les derniers que je vous ai envoyé !
Ou je trouve le bon fournisseur, car avoir en en A1 : 2CAC0731 FOURNISSEURA
et en A2 : 2CAC0732 FOURNISSEURB sur la feuille du forurnisseur [2CAC0731 FOURNISSEURA] c'est un non sens !

Salutations.
Le Pingou
0
anthony
 
je ne sais pas ce que j'ai fait mais il faut regarder dans le dossier graphes du zip
là il y a une feuille 2cac0730 founisseurB avec uen seule valeur en A1 et la seconde feuille 2CAC0730 FournisseurA avec en A1 2CAC0730 et en A2 2CAC0731
le fournisseurA utilise 2 contenants différents d'où A1 et A2 alors que le fournisseurB n'en utilise qu'un
0

 
Bonjour,
Eh bien, en cherchant les différences, je suis tombé sur autre chose : comment faites-vous pour importer le dossier [xml] qui correspond au bon fournisseur .... ?
Il n'y a aucune référence exploitable dans le dossier [000 BL.xls] ....que faire ?
0
anthony
 
les fichiers sont enregistrés avec une nomenclature précise : PN lot fournisseur.extension
avant de poster ici la colonne L était vide et mes cases A1 et/ou A2 contenaient seulement le PN. du coup il était impossible de faire la différence entre les fournisseurs donc j'ai rajouté la concaténation en colonne L [001 BL] pour retrouver la bonne feuille en rajoutant en A1/A2 le fournisseur à la suite du PN (2CAC0731 par ex)
0

 
Bonjour,
Je prends comme référence de travail le classeur [000 BL.xls].
Par exemple la ligne 20 doit avoir les références du document [xml] qui contient les données entrée pour le produit soit le PN, le Lot et le Fournisseur, ces 3 références forment le nom du document [xml]. De cette manière on peut importer le document qui correspond au fournisseur et enregistrer les valeurs dans le classeur [Graphes.xls] sur la feuille y relative.
Dans votre cas [2CAC0731 2113466 FOURNISSEURA] et [2CAC0732 2113467 FOURNISSEURA] vous devez avoir dans le classeur [000 BL.xls] deux lignes qui y font référence et de cette manière vous ne trouverai pas la feuille qui correspond au fournisseur [2CAC0732 FOURNISSEURA] dans le classeur [Graphes.xls] car il semble que le nom de la feuille est formé du PN + FournisseurX.
Quelques chose est incohérent... !
Vous parlez des indications des cellules [A1 :A2] et que faites-vous si un fournisseur livre plus que 2 produits différents ?

Question: est-ce que les noms des feuilles qui font référence aux fournisseurs sont corrects, pourquoi y a-t-il le PN ...?

Salutations.
Le Pingou
0

 
Bonjour,
Merci pour la réponse qui n'est pas clair : H2SO4 96% fournisseurA (en vrai fournisseurA = 3 caractères)
qu'est-ce que veut dire (en vrai fournisseurA = 3 caractères) ?

Que voulez-vous obtenir dans votre classeur [Graphes.xls] ?

Ne serait-il pas plus simple de prendre une feuille par fournisseur est dans les colonnes (dès [O]) vous ajouter une ligne pour le numéro PN ?
0
anthony
 
H2SO4 96% OMG >> nom de la vraie feuille
dans le classeur graphe, l'objectif est de compiler toutes les données des différents pour chaque substance et ainsi faire un suivi.
ce suivi permettra de mettre en corrélations des valeurs atypiques avec notre production
par exemple si la valeur habituelle est de 1 et que sur un lot elle passe à 9 on pourra voir s'il y a un impact. Ce suivi se fera à travers des courbes pour chaque ligne et pour chaque feuille.

rajouter uen ligne avec le PN engendrerait un mixing des données de différentes substances ce qui n'aurait aucune valeur pour le suivi.
le suivi ne porte pas sur les fournisseurs mais sur la qualité des substances par fournisseur
0

 
Bonjour,
Dans ce cas vous organisez selon le suivi désiré.
0
anthony
 
est ce que la recherche que j'avais mise au départ est la meilleure solution ?
Dim feuille As String, PN As String
Dim onglet As Object

feuille = shB.Range("L" & ligref).Value

For Each onglet In Worksheets
Set celluletrouvee = Range("A1:A2").Find(feuille, lookat:=xlWhole)
Worksheets(onglet).Activate
Next
0