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 :
Code :
- Private Sub Workbook_Open()
- UserForm1.Show
- End Sub
|
Affiche le UserForm1 à l'ouverture de "LISTE SCANNER"
Code dans le UserForm1 (La pièce maîtresse) :
Première Case ComboBox1 :
Code :
- Private Sub ComboBox1_Change()
- CAD = ComboBox1.Value
- On Error Resume Next
- '#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'# [CHEMIN A MODIFIER] #'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'
- Workbooks.Open "C:\chemin vers fiche d'instruction\" & CAD
- '#'#'#'#'#'#'#'#"#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'
- Range("A1" ).Select
- End Sub
|
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 :
Code :
- Private Sub TextBox2_Change()
- On Error Resume Next
- ActiveWindow.ScrollRow = 40
- ActiveWindow.SmallScroll Down:=3
- End Sub
|
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 :
Code :
- Private Sub TextBox3_Change()
- ActiveWindow.ScrollRow = 82
- ActiveWindow.SmallScroll Down:=3
- End Sub
|
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 :
Code :
- Private Sub TextBox4_Change()
- Unload Me
- ActiveWorkbook.Close
- ' Attendre 1 seconde
- Application.Wait Time + TimeSerial(0, 0, 1)
- ' Continuer après la pause
- Application.OnTime Now + TimeValue("00:00:01" ), "OpenMe"
- ThisWorkbook.Close False
-
- End Sub
- Sub OpenMe()
- MsgBox "I'm Back!"
- End Sub
|
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 :
Code :
- Private Sub UserForm_Initialize()
- Dim plage As Range
- With Sheets("CAB" )
- Set plage = .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row)
- End With
- For Each c In plage
- If c.Value <> "" Then Me.ComboBox1.AddItem c.Value
- Next c
- End Sub
|
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