Microsoft 365 Tentative d'utilisation du contrôle RefEdit

Hecatonchire

XLDnaute Nouveau
Bonjour à tous,

Je suis confronté à quelques disfonctionnements/difficultés avec ce contrôle (que j'ai peu utilisé) et j'aimerais avoir des conseils/partage d'expérience sur l'utilisation de cette "superbe" fonctionnalité (c'était ironique, si vous avez autre chose je suis largement preneur 😰).

La situation de départ : Un formulaire UF1 ouvre un UF2 contenant un RefEdit (version simplifiée du cas réel).
Les problèmes rencontrés et mes solutions (pas sur de ne être en train de creuser ma propre tombe avec) :
1-J'ouvre UF1 puis UF2, RefEdit prend le focus et c'est mort (blocage sur mon poste) ! => Ok, je place un contrôle textbox qui prend le focus => ça marche !
2-Si j'utilise le RefEdit pour sélectionner une plage, c'est UF1 qui reprend le focus m'empêchant de retourner sur UF2 et là je suis bloqué => Ok, j'ouvre UF1 en non modale => ça marche !
3-Si j'ouvre UF1, puis UF2, puis le ferme et le réouvre (UF2) => blocage (l'évènement initialize ne se fait même pas) => J'ai tenté hide pour UF2 au lieu de unload sans succès.

A coté de quoi je passe (à part une formation sur les USERFORM) ?

Un petit fichier de test (minimum de code).

Merci à ceux qui prendrons un peu de temps pour se pencher sur mes difficultés.
(version 365 insider beta)

Bonnes fêtes
 

Pièces jointes

  • TestUF.xlsm
    20.6 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Bonsoir.
Moi non plus je n'utilise jamais ce contrôle, et il me semble qu'il y a très longtemps il me posait des problèmes. Je préfère un UserForm avec ShowModal à False et soit un CommandButton qui récupère ActiveCell, soit même un Private WithEvent Wsh As Worksheet en surveillant Wsh_SelectionChange.
Si ça vous intéresse j'ai un vieil UserForm UFmSelect qui utilise carrément un WithEvents Excel As Application, permettant de sélectionner toutes sortes de plages pour un certain traitement lancé à la fin.
1735519677759.png
 
Dernière édition:

Hecatonchire

XLDnaute Nouveau
Bonjour Dranreb et JP,

Merci pour vos réponses

@ Dranreb : Je suis intéressé par votre UFmSelect. Je vais voir si je peux faire quelque chose via un RefEdit fait maison.
@ JP : Ca me confirme que ces problème ne viennent pas de mon PC. Le passage en non modal était une solution pour passer un 1er problème.
(UF1 et UF2) non modal = > Avec UF1.hide à l'ouverture de UF2 => blocage Excel si on appel une 2ème fois UF2 !
(UF1 et UF2) non modal = > Pas de UF1.hide à l'ouverture de UF2 => A la fermeture de UF2 plus de UF1 !

Les refedit ne semblent fonctionner correctement que si l'on reste avec un seul UF.
J'hésite entre :
> développer une version perso de RefEdit (j'ai bidouillé un truc avec un évènement MouseMove qui est "passable", je vais regarder l'idée de Dranreb d'utiliser les évènements de l'application, peut être sur le selection change)
> Utiliser un seul UF (beaucoup de modifications à faire)
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Histoire de vous fournir un exemple d'utilisation, pourriez vous m'indiquer une Sub à exécuter une fois les plages choisies. Elle admettrait en paramètre un TRg() As Range de base 0 contenant les plages successivement sélectionnées.
À titre indicatif j'utilise actuellement mon UFmSelect pour 3 choses:
1) — Ma commande Valeur cible personnelle, et aussi une commande Valeur limite.
2) — L'établissement rapide d'un graphique de contrôle.
3) — L'installation d'une formule matricielle de résolution d'un système d'équation.
 

Hecatonchire

XLDnaute Nouveau
Bonjour.
Histoire de vous fournir un exemple d'utilisation, pourriez vous m'indiquer une Sub à exécuter une fois les plages choisies. Elle admettrait en paramètre un TRg() As Range de base 0 contenant les plages successivement sélectionnées.
À titre indicatif j'utilise actuellement mon UFmSelect pour 3 choses:
1) — Ma commande Valeur cible personnelle, et aussi une commande Valeur limite.
2) — L'établissement rapide d'un graphique de contrôle.
3) — L'installation d'une formule matricielle de résolution d'un système d'équation.
Dans mon UF, l'utilisateur sélectionne plusieurs paramètres et l'un de ces paramètres est une plage/cellule de destination pour y copier une liste de valeurs lors de la validation finale donc il n'y a pas de procédure particulière à lancer, c'est simplement récupérer une adresse de destination.
 

Dranreb

XLDnaute Barbatruc
Alors mon UFmSelect n'est pas adapté.
À moins que la plage soit transmise à la procédure à exécuter par Bouton Go! qui afficherait l'UserForm, celui ci ne saisissant que les autres paramètres, ou que ceux ci puissent en majorité être repris de cellules.
Mais on ne sait jamais, joignez votre classeur que je voie si on pourrait quand même l'optimiser pour cette utilisation …
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Sinon dans un UserForm avec ShowModal à False et une TextBox1 pour l'adresse, ceci marche pas mal :
VB:
Option Explicit
Private WithEvents Excel As Application, Rng1 As Range
Private Sub UserForm_Activate()
   On Error Resume Next
   Set Rng1 = Selection
   TextBox1.Text = Rng1.Address(False, False, xlA1, True)
   End Sub
Private Sub TextBox1_Enter()
   Set Excel = Application
   If Not Rng1 Is Nothing Then Excel.Goto Rng1
   End Sub
Private Sub Excel_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
   Set Rng1 = Target
   TextBox1.Text = Rng1.Address(False, False, xlA1, True)
   End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Set Excel = Nothing
   End Sub
 
Dernière édition:

Hecatonchire

XLDnaute Nouveau
J'ai ce résultat (cf fichier joint).
Cela me semble correcte/utilisable (merci à Danreb pour l'idée des évènements Excel).
J'aurais voulu votre avis en tant qu'utilisateur/programmeur avant de mettre en pratique cette méthode dans mon vrai projet.
Ca pourrait aussi servir à d'autres.
 

Pièces jointes

  • TestUF_RefEditPerso2.xlsm
    31.1 KB · Affichages: 2

Hecatonchire

XLDnaute Nouveau
C'était pour tenter de se rapprocher de quelque chose de connu pour l'utilisateur Excel.
Dans le formulaire réel il y a d'autres Texbox "standards" donc cela permet de différencier les 2 utilisations.

Concernant l'interface, je n'aurais pas du utiliser un triangle noir comme symbole de bouton (confusion avec une combo box) mais un trait (cf refEdit) et peut être déclencher aussi le formulaire sur le Enter du Textbox du UF2.
 

Discussions similaires

@
Réponses
5
Affichages
2 K
@+Thierry
@

Membres actuellement en ligne

Statistiques des forums

Discussions
315 236
Messages
2 117 638
Membres
113 215
dernier inscrit
guillet