VBA Industrielle avec douchette - VB/VBA/VBS - Programmation
Marsh Posté le 28-05-2016 à 18:33:54
Bonjour anonymworker
Et bonne chance... En gros, Excel doit se comporter comme une base de données et c'est pas fait pour ... Et je te prédis des galères sans nom pour la maintenance corrective & évolutive
J'ai dû intervenir sur un projet d'un client qui a pris Excel pour une base de donnée, un enfer. Plus jamais ça !
Alors conseil d'ami, migre sous Access
Marsh Posté le 01-06-2016 à 11:00:00
Problème n°1 :
Faudrait créer une fonction comme celle ci :
Code :
|
donc ton TextBox4_Change peut devenir :
Code :
|
Et surtout ton TextBox3_Change :
Code :
|
Marsh Posté le 01-06-2016 à 11:07:04
Pour le problème n°2 je pense que ton scanner renseigne les données sur le premier contrôle, et effectue une tabulation pour passer au contrôle suivant
du coup pour recommencer t'es obliger de fermer la fenetre de saisie et de la réouvrir juste pour avoir le focus sur la combobox
je suspecte un simple
"combobox1.setfocus" de suffir a la place de toute la méchanique de fermeture/ouverture, mais j'ai peut etre tord.
Essaye aussi de mettre le mot clé "public" devant ta sub :
Public Sub OpenMe()
MsgBox "I'm Back!"
End Sub
et surtout de placer ce code dans le workbook, pas dans ton userform.
Marsh Posté le 01-06-2016 à 11:11:50
problème 3 :
If Dir("C:\chemin vers fiche d'instruction\" & CAD) = "" Then
MsgBox "la fiche n'existe pas"
End If
Marsh Posté le 18-05-2016 à 12:41:47
Bonjour à tous les internautes,
Je suis employé dans une entreprise et ma mission est de faire s'afficher des fiches d'instructions sur un poste seulement à l'aide d'une douchette/scanner code à barre.
Je vais détailler au mieux, nous en discuteront.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
0) J'ouvre un fichier "LISTE SCANNER", avec une souris (le matin, cette action est effectuée une seule fois dans la journée).
1.1) Un UserForm1 s'ouvre à l'ouverture.
1.2) Je scanne une référence code à barre qui représente aussi le nom d'une fiche.
1.3) Un autre fichier Excel s'ouvre (la fiche d'instruction), on va appeler cette fiche "Fiche1~199" ou "Fiche200", vous allez comprendre pourquoi à l'étape 3. Fiche1~199 représente 199 fiches en tout, Fiche200 représente seulement la toute dernière fiche.
2) Je passe à la page 2 de la FI en scannant une fois n'importe quel code barre.
3) Je passe à la page 3 de la FI en scannant une deuxième fois n'importe quel code barre.
Problème n°1 : Je voudrais passer cette étape pour "Fiche1~199", par contre je ne veux pas que cette étape soit passée quand j'ouvre "Fiche200". J'ai essayé avec un If Then EndIf mais rien y faire je n'y arrive pas, j'ai laissé une Page 3 pour chaque FI avec un gros "NOT FOUND", et ça fait un peu bête car sur 200 fiches, il n'y en a que une qui a une troisième page (ici la "Fiche200" ).
4) Je scanne une troisième fois n'importe quel code barre et le UserForm1 se ferme, une seconde après, le fichier "LISTE SCANNER" se ferme, et se réouvre 1 seconde plus tard automatiquement.
Problème n°2 : En fait, je ne peux utiliser qu'une seule fois mon UserForm1 pour chercher une fiche, et je ne sais pas pourquoi. Ma solution a été de trouver une fonction pour fermer et réouvrir mon fichier "LISTE SCANNER", ainsi je peux rentrer mes infos dans mon UserForm1 sans avoir à le réouvrir manuellement (en appuyant sur un bouton avec une souris par exemple). C'est la seule solution que j'ai trouvé pour fermer/ouvrir un fichier, avec un minuteur.
Le soucis est qu'une fenêtre vient s'afficher à la réouverture du fichier LISTE SCANNER. Je dois cliquer sur OK manuellement avec une souris, ce qui détruit ma boucle automatique et ma série au scanner.
5 => 1.1) Ce n'est qu'après avoir appuyé sur ce OK que le UserForm1 s'affiche de nouveau en étant utilisable. Nous revenons donc à l'étape 2.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Avant tout voici l'ordre des macros : ThisWorkbook < Initialize < ComboBox1 < TextBox2 < TextBox3 < TextBox4
Code ThisWorkbook :
Affiche le UserForm1 à l'ouverture de "LISTE SCANNER"
Code dans le UserForm1 (La pièce maîtresse) :
Première Case ComboBox1 :
La variable CAD va prendre pour valeur le nom de la fiche d'instruction scannée qui s'inscrit dans la case ComboBox1.
Ensuite la fiche s'ouvre si la fiche avec ce nom existe, si la fiche n'existe pas car pas encore réalisée et donc inexistante dans le dossier qui regroupe toutes les fiches, il ne se passera rien.
Problème N°3 : J'ai essayé beaucoup de manips mais n'ai jamais trouvé. J'aimerai justement que quand une fiche n'existe pas, un message s'affiche, "Veuillez noter la référence et prévenir le responsable des fiches d'instruction."
Deuxième Case TextBox2 :
Effectue un scrolling vers le bas qui va afficher la page 2, qui est juste en dessous de la page 1. "ActiveWindow.ScrollRow = 40" dépend de la taille de la page.
Troisième Case TextBox3 :
Effectue un scrolling vers le bas et affiche la page 3. En sautant la page 2. Pour "Fiche1~199", on verra un gros NOT FOUND, pour "Fiche200", on verra la fameuse page 3.
Quatrième Case TextBox4 :
Quand je scanne un code barre, le "Unload Me" va fermer le UserForm1, le "ActiveWorkbook.Close" va fermer la fiche d'instruction. A ce moment là nous voilà revenus au ficher "LISTE SCANNER".
Ensuite j'attend une seconde pour éviter tout type de bug, puis encore une seconde avec le "Application.OnTime Now + TimeValue("00:00:01" ), "OpenMe"". LISTE SCANNER va se fermer, et se réouvrira comme par magie je ne sais pas comment APPLAUSE!! . Je ne peux pas enlever le "OpenMe du Application.OnTime", quand le fichier se réouvre, une fenêtre affiche "Impossible d'executer la macro "C:\chemin........\LISTE SCANNER.xlsm'!OpenMe'. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.".
Si j'enlève la Sub, ça fait exactement la même chose, je ne sais pas comment SUPPRIMER cette maudite fenêtre, c'est le problème n°2.
Et justement j'ai mis un ptit MsgBox "I'm Back" dans la Sub OpenMe, pour voir si ça fonctionne, et bien aucun message ne s'affiche, ce qui veut dire que l'on arrive pas à atteindre cette Sub.
Initialize de la UserForm1 :
Je vais chercher une liste qui est dans le deuxième onglet "CAB" du fichier LISTE SCANNER, j'ai mis tous les noms de fiche d'instruction dans cette liste. C'est un peu comme si j'avais besoin de faire une comparaison entre les noms de mes fiches et cette liste pour que le programme fonctionne. En quelque sorte, si il manque un nom de fiche dans la liste, le programme du UserForm1 ne fonctionnera pas.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
En espérant avoir été assez précis et explicite, si vous avez besoin que je donne des images, je vous les ferais parvenir mais vous savez pour cause de confidentialité, je ne peux pas transmettre d'images comme ça. Et aussi si vous voulez que je détaille je suis là !
Merci Bien ! J'ai l'impression que ce ne sont que des petits problèmes mais ils sont d'une finesse que je ne maîtrise pas !
Cdlt, anonymworker.
Message édité par anonymworker le 19-05-2016 à 08:46:48