XL 2019 Gérer la boite de dialogue "insérer une fonction" durant les saisies ?

p'tit vieux

XLDnaute Occasionnel
Bonjour à tous
J'ai écrit une UDF (une de plus). Ca marche ... ça fonctionne;)
Enfin c'est bon si l'utilisateur tape les paramètres dans la zone de saisie.
Par contre l'UDF ayant besoin d'avoir une saisie "complète", lors de la saisie dans la boite de dialogue Fx je voudrais:
1) pouvoir contrôler les saisies
2) empêcher les recalculés d'Excel avant la fin de la saisie.
Sinon Excel plante joyeusement et sans explication.
Cela ce produit dés qu'il veut sélectionner plus d'une cellule et/ou des zones multiples.
A priori, à chaque saisie/début de sélection de plusieurs cellules, il recalcule et donc plante car l'UDF n'a pas tout les paramètres.
Comment puis-je gérer cela? Je suis perdu car c'est la 1ere fois qu'il me fait le coup et je ne vois d'où vient le problème.

Par avance merci pour votre aide.
 
Dernière édition:

p'tit vieux

XLDnaute Occasionnel
Bonjour à tous
J'ai écrit une UDF (une de plus). Ca marche ... ça fonctionne;)
Enfin c'est bon si l'utilisateur tape les paramètres dans la zone de saisie.
Par contre l'UDF ayant besoin d'avoir une saisie "complète", lors de la saisie dans la boite de dialogue Fx je voudrais:
1) pouvoir contrôler les saisies
2) empêcher les recalculés d'Excel avant la fin de la saisie.
Sinon Excel plante joyeusement et sans explication.
Cela ce produit dés qu'il veut sélectionner plus d'une cellule et/ou des zones multiples.
A priori, à chaque saisie/début de sélection de plusieurs cellules, il recalcule et donc plante car l'UDF n'a pas tout les paramètres.
Comment puis-je gérer cela? Je suis perdu car c'est la 1ere fois qu'il me fait le coup et je ne vois d'où vient le problème.

Par avance merci pour votre aide.
Une autre possibilité....
Peut-être pourrait-on intercepter le click de demande de la boîte pour afficher un formulaire "UserForm" proposant une boîte de dialogue personnelle ??
Est ce possible de l'intercepter?
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@p'tit vieux :
Quelques pistes pour bloquer le calcul et les evenements

VB:
Application.ScreenUpdating = False        'Bloque le rafraichissement d'écran
Application.Calculation = xlCalculationManual     'Bloque le recalcul
Application.EnableEvents = False        'Bloque les evenements

'Ton code
'Blablabla
'Blablabla
'Blablabla

Application.ScreenUpdating = True         'Facultatif
Application.EnableEvents = True         'Réactive les evevnements indispensable si Application.EnableEvents = False
Application.Calculation = xlCalculationAutomatic'Reactive le calcul automatique

Autre piste pour forcer un nombre sinon on oblige l'utilisateur à recommencer la saisie

VB:
Option Explicit

Sub Mon_Test()
Dim MaSaisie

Do
    MaSaisie = InputBox("Saisissez un nombre. Si rien ==> annule la demande", "Saisie nombre")
Loop While MaSaisie <> "" And Not IsNumeric(MaSaisie)

If MaSaisie <> "" Then
    'Suite du code si un nombre est saisie
Else
    'Si rien de saisie ==> procédure à prévoir
End If

End Sub

Merci de ton retour

@Phil69970

@Phil
 

p'tit vieux

XLDnaute Occasionnel
Bonjour Phil,
merci pour ton aide.

Dans mon code j'appelle cette F() "SpeedOn" qui j'ai déjà fait :
VB:
Public Sub SpeedOn(Status As Boolean)

On Error GoTo ErrHandler

  With Application
      Select Case Status
          Case Is = True
              .Calculation = xlCalculationManual
              .ScreenUpdating = False
              .EnableEvents = False
              .DisplayAlerts = True 'False
              .Cursor = xlWait
              .StatusBar = True 'False
' Ci-dessous, pas mis Disable pour tentative d'interception (Err.Number = 18) .
              .EnableCancelKey = xlErrorHandler
          Case Else
              .Calculation = xlCalculationAutomatic
              .ScreenUpdating = True
              .EnableEvents = True
              .DisplayAlerts = True
              .Cursor = xlDefault
              .StatusBar = True
              .EnableCancelKey = xlInterrupt
      End Select
  End With
Exit Sub

ErrHandler:

'''''  Ligne juste pour debug
If Err.Number = 18 then Stop
Debug.Print "SpeedOn: "; Err.Description, Err.Number
'''''''''
    Err.Clear
    Resume Next
End Sub
Je dois encore passer à coté car cela ne change rien.

J'ai constaté un truc.
Quand je suis dans la boite Fx, Excel n'arrête pas de calculer (genre mode "fantôme"). Normal?
Il tente d'exécuter ma fonction X fois (j'ai mis un mouchard) mais il n'est pas possible de "l'intercepter" dans le code. Les "Stop" et autres il s'en fiche joyeusement. Etrange.
 

p'tit vieux

XLDnaute Occasionnel
D'accord
Le fichier xlam fait 144 ko.
Il faut vraiment que je le "nettoie" et que j'y joigne un fichier d'explication de sa fonction.
C'est pas un truc génial/énorme mais bon vaut mieux expliquer ce qu'il fait. N'est-ce pas? 😁
Donc avant le nettoyage du code voici le guide. L'ayant écrit pour un ami et voisin anglais ce guide à d'abord était écrit en anglais. Aussi je vous livre la version qui n'et pas entièrement traduite (en partie en français et en anglais).
J'espère que cela ne dérange pas. Désolé.

Votre opinion à la lecture du guide sera le bienvenue.

PS:
Etant nouveau sur ce site, sera t'il possible de vous faire parvenir le code en message privé?
 

Pièces jointes

  • BALANCE Quick Start v2.50-FR.docx
    373.4 KB · Affichages: 4

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Chartre du forum :
1.12 - Autres points d'attention :

La messagerie privée (conversations) ne doit pas être utilisée pour des demandes d’assistances.

Ces demandes privent tout le monde de l'intérêt de la situation et de la question.
Il n'est pas bien difficile de reproduire un problème, dans un classeur vierge afin que chacun puisse en profiter ou proposer une solution.

Depuis le début ce forum essaie de conserver un esprit de partage. Aidez à l'entretenir
 

Discussions similaires

Statistiques des forums

Discussions
313 205
Messages
2 096 211
Membres
106 533
dernier inscrit
chavrotti