Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2343 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA Industrielle avec douchette

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA Industrielle avec douchette

n°2281689
anonymwork​er
Posté le 18-05-2016 à 12:41:47  profilanswer
 

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 :sweat: (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 :
  1. Private Sub Workbook_Open()
  2. UserForm1.Show
  3. End Sub


Affiche le UserForm1 à l'ouverture de "LISTE SCANNER"
 
Code dans le UserForm1 (La pièce maîtresse) :
 
Première Case ComboBox1 :

Code :
  1. Private Sub ComboBox1_Change()
  2. CAD = ComboBox1.Value
  3. On Error Resume Next
  4. '#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'# [CHEMIN A MODIFIER] #'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'
  5. Workbooks.Open "C:\chemin vers fiche d'instruction\" & CAD
  6. '#'#'#'#'#'#'#'#"#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'
  7. Range("A1" ).Select
  8. 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 :
  1. Private Sub TextBox2_Change()
  2. On Error Resume Next
  3.     ActiveWindow.ScrollRow = 40
  4.     ActiveWindow.SmallScroll Down:=3
  5. 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 :
  1. Private Sub TextBox3_Change()
  2.     ActiveWindow.ScrollRow = 82
  3.     ActiveWindow.SmallScroll Down:=3
  4. 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 :
  1. Private Sub TextBox4_Change()
  2. Unload Me
  3. ActiveWorkbook.Close
  4. ' Attendre 1 seconde
  5. Application.Wait Time + TimeSerial(0, 0, 1)
  6. ' Continuer après la pause
  7.     Application.OnTime Now + TimeValue("00:00:01" ), "OpenMe"
  8.     ThisWorkbook.Close False
  9.    
  10. End Sub
  11. Sub OpenMe()
  12.     MsgBox "I'm Back!"
  13. 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!! :bounce: . 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 :
  1. Private Sub UserForm_Initialize()
  2. Dim plage As Range
  3. With Sheets("CAB" )
  4. Set plage = .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row)
  5. End With
  6. For Each c In plage
  7. If c.Value <> "" Then Me.ComboBox1.AddItem c.Value
  8. Next c
  9. 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
mood
Publicité
Posté le 18-05-2016 à 12:41:47  profilanswer
 

n°2281796
anonymwork​er
Posté le 20-05-2016 à 11:10:24  profilanswer
 

UP :hello:

n°2282492
informer
Posté le 28-05-2016 à 18:33:54  profilanswer
 

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 :cry:    
 
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 ! :pt1cable:
 
Alors conseil d'ami, migre sous Access  :bounce:


Message édité par informer le 28-05-2016 à 18:34:39
n°2282811
Xxxaaavvv
Posté le 01-06-2016 à 11:00:00  profilanswer
 

Problème n°1 :
Faudrait créer une fonction comme celle ci :
 

Code :
  1. Public Sub Fermeture()
  2.    Unload Me
  3.    ActiveWorkbook.Close
  4.  
  5.    ' Attendre 1 seconde
  6.    Application.Wait Time + TimeSerial(0, 0, 1)
  7.  
  8.    ' Continuer après la pause
  9.    Application.OnTime Now + TimeValue("00:00:01" ), "OpenMe"
  10.    ThisWorkbook.Close False
  11. End Sub


 
 
 
donc ton TextBox4_Change peut devenir  :
 

Code :
  1. Private Sub TextBox4_Change()
  2.     Call Fermeture
  3. End Sub


Et surtout ton TextBox3_Change :
 

Code :
  1. Private Sub TextBox3_Change()
  2.     select case  ComboBox1.Value
  3.     'Liste des classeurs qui oont 3 pages
  4.     case "Fiche200", "Fiche201", "Fiche202", "etc..."
  5.        ActiveWindow.ScrollRow = 82
  6.        ActiveWindow.SmallScroll Down:=3
  7.     'Les autres
  8.     case else
  9.         call fermeture
  10.     end select
  11. End Sub


Message édité par Xxxaaavvv le 01-06-2016 à 11:01:25
n°2282813
Xxxaaavvv
Posté le 01-06-2016 à 11:07:04  profilanswer
 

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.
 


Message édité par Xxxaaavvv le 01-06-2016 à 11:09:41
n°2282815
Xxxaaavvv
Posté le 01-06-2016 à 11:11:50  profilanswer
 

problème 3  :
 
If Dir("C:\chemin vers fiche d'instruction\" & CAD) = "" Then
   MsgBox "la fiche n'existe pas"
End If


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA Industrielle avec douchette

 

Sujets relatifs
Débutant VBAComment utiliser target.address sous VBA
Boucle sur appel de Routine, VBAMise en couleur d'une cellule VBA
[VBA] Utilisation du solver avec des fonctions code en vba???VBA - Formules qui fait référence à deux classeurs
Piloté en VBA, Word 2013 se comporte différemment que Word 2007/10VBA : manipuler des fichiers dont le nom a des caractères spéciaux
VBA PPT - Déplacer une Shape d'une slide à une AutreDiverses questions VBA
Plus de sujets relatifs à : VBA Industrielle avec douchette


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR