Problème Userform et focus récalcitrant

Résolu
Chamanoob Messages postés 2 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 26 février 2012 - 26 févr. 2012 à 20:49
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 26 févr. 2012 à 22:31
Bonjour à tous,
Je suis débutant (ou presque) sur vba et me suis inconsciemment lancé dans la programmation bénévole pour un collègue .
Celui-ci utilise une balance reliée à un PC via usb et les mesures sont enregistrées sur un classeur Excel. J'ignore comment est paramétrée la balance (et je ne veux surtout pas rentrer la dedans) et tout ce que je sais, c'est que la valeur de la pesée s'affiche dans la cellule active (quelle qu'elle soit).
Je souhaite simplement afficher à l'écran lors de l'enregistrement un message du type "veuillez patienter..." lors de la saisie automatique. Du fait du caractère modal des boites de dialogue classiques j'utilise plutôt un userform non modal. Le problème est que lorsque l'userform est affichée, c'est elle qui est active. Pour être plus clair c'est elle qui reçoit l'info de la balance et donc, message d'erreur, sortie de la macro... Or lorsqu'après l'ouverture de l'userform, je clique sur une cellule tout se passe normalement.
J'ai essayé des commandes du type "activate" et même "AppActivate Microsoft Excel" pour redonner le focus à la feuille de calcul mais rien n'y fait.
Seul le clique réel permet au classeur de reprendre le focus. Je suis très contrarié ...
Y'aurait-il un moyen de simuler un click ou quelque chose d'un peu plus élégant pour pallier à mon problème?
Merci par avance pour votre aide

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 févr. 2012 à 20:57
Bonjour,
1) Rien de cela ne me parait être du VB6 (la présente section). Cette discussion aurait du être ouverte dans la section Langages dérivés > VBA. Note le pour la prochaine fois
2) le fait que tu aies à faire cela pour un collègue ne nous regarde pas et ne nous éclaire en rien.
3) affiche donc ce message dans un simple label sur ta feuille, avec sa propriété enabled = False (il ne prendra jamais le focus).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
Utilisateur anonyme
26 févr. 2012 à 21:02
Bonjour,
Je ne sais pas si j'ai tout compris, mais la ça me rappelle un lecteur de code à barres qui était connecté sur le port PS2 (en parallèle avec le clavier) et il envoyait les chiffres sur le contrôle qui avait le focus...
Ton "veuillez patienter" devrait s'afficher dans une cellule tout en gardant le focus sur une autre (celle qui attend les données), non?


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 févr. 2012 à 21:05
ou encore :
Application.StatusBar = "Veuillez patienter"
parmi des milliers de solutions sans donner le focus !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 févr. 2012 à 22:31
Bon.
Le label, oui.
Et pour interrompre : fastoche, puisque la donnée reçue modifie une cellule :
Evènement WorkSheet_Change ====>> label1.visible = False
Marchera forcément à tous coups
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 févr. 2012 à 21:20
Tiens ====>> en voilà encore une autre, qui aurait toutefois le don de me donner envie de donner un coup de poing à l'écran :
titi = ActiveWindow.Caption
 For i = 1 To 20
   If ActiveWindow.Caption <> "Veuillez patienter" Then
     ActiveWindow.Caption = "Veuillez patienter"
   Else: ActiveWindow.Caption = "Compris ?"
    
   End If
    deb = Timer
   Do While Timer < deb + 0.5
       DoEvents
   Loop
 Next
 ActiveWindow.Caption = titi
*

question : comment peut-on raisonnablement perdre son temps sur de telles "bébelles" à 4 sous qui n'apportent rien ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Chamanoob Messages postés 2 Date d'inscription lundi 9 janvier 2012 Statut Membre Dernière intervention 26 février 2012
26 févr. 2012 à 22:23
Désolé pour l'erreur de section je ne suis pas encore un familier du site.
Merci à vous pour ces réponses, je crois que j'ai compris et je vais essayer de mettre en pratique... (sauf pour ton dernier code ucfoutu, qui provoque en moi la même émotion).
Avec un bémol car je ne vous ai pas donné toutes les infos : je dois pouvoir interrompre (bouton sur UF) en fin de saisie car la macro protège le document, le copie et l'enregistre...
En fait, cette bébelles n'est qu'un détail de l'enregistrement, lui même une petite partie du futur traitement des données. Et je sais que c'est lourdingue mais le document sur lequel je travaille est enregistré dans un système normé ISO, figé, lourd et sécurisé à outrance. Chaque manip doit donc être sécurisée un milliard de fois, l'opérateur doit guidé et avoir le moins de latitude possible.
Merci en tout cas, je vais explorer la piste du label,

Cordialement
0
Utilisateur anonyme
26 févr. 2012 à 22:29
je vais explorer la piste du label

Oui, c'est encore le plus visible et tu peux le placer où tu veux avec la taille que tu veux...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Rejoignez-nous