Débogage (Expert)

Bonjour,

En version originale le fichier joint ne semble poser aucun problème.

Dans la version jointe, je n'ai fait qu'une modification : L'ajout d'un Calendrier embarqué.

J'ajoute que ce calendrier embarqué ne pose à priori lui aussi aucun problème : je l'utilise quotidiennement dans mon perso.xlam et il est intégré en tant que tel dans mon ribbon...

Je pouvais donc m'attendre à l'intégrer sans difficulté particulière dans mon appli.

Après intégration l'appli fonctionne toujours correctement... dans que je n'utilise pas le calendrier : Dès que j'utilise le calendrier (Focus sur le champ date) quand je quitte (Confirm ou Annule) La validation ou l'annulation se fait bien, mais par la suite le UserForm reste inerte.

Plus exactement : Quand je quitte (Confirm ou Annule) La validation ou l'annulation se fait bien, mais je ne peux que Quitter le UserForm alors que si je cherche à enchaîner une autre opération (Ajout/Modif) là ça disfonctionne...

Fermeture requise via le Gestionnaire de tache !

J'en déduit que c'est le OppositeStatus qui perd les pédales mais je ne comprend pas en quoi le fait d'être passé par le Calendrier le cour-circuite.

Je ne demande pas nécessairement la correction, mais un embryon d'explication serait apprécié...

A+

Bonjour,

sans avoir beaucoup investigué, ne serait-ce pas ton contrôle des caractères numériques sur la textbox date qui est en conflit avec ton calendrier ?

edit: après avoir mis cette partie du code en commentaire, je tombe sur d'autres problèmes. Je dois avouer avoir du mal à m'y retrouver et à cerner les actions pour reproduire le problème que tu mentionnes, d'autant que le calendrier ne fonctionne pas chez moi (dû à ma version UK ?)

Bonjour,

dans votre sub Opposite :

Sub OppositeStatus()
   ' Inverse la valeur booléenne des boutons d'action
   ' Modifie la propriété Caption du UserForm
   With Me
      .cboRech.Enabled = Not .cboRech.Enabled
      .frmQuidam.Enabled = Not .frmQuidam.Enabled
      .frmAction.Visible = Not .frmAction.Visible
      .cmdCancel.Visible = Not .cmdCancel.Visible
      .cmdConfirm.Visible = Not .cmdConfirm.Visible
      .cmdExit.Visible = Not .cmdExit.Visible
      .frmNavigation.Visible = Not .frmNavigation.Visible
       If .cboRech.Enabled = True Then usfStatus = Status.Consultation
       usfTitle ' Titre du UserForm
   End With
End Sub

suivant le déroulement du code vous avez des valeurs "non définies" qui du coup se retrouve à VRAI !

Hors VRAI n'est pas l'opposé d'indéfini... non ?

Il faudrait peut - être ajouter un test du style :

If Not .cboRech.Enabled Is Nothing Then .cboRech.Enabled = Not .cboRech.Enabled

de façon à bien s'assurer qu'on demande bien l'inverse de ce qui est utilisé, et de ne pas se retrouver dans une configuration avec des variables à VRAI alors qu'elles ne devraient pas.

C'est une idée... Car en pas à pas j'en ai vu un "n'appartient pas à l'indice" qui s'est retrouvé à VRAI....

@ bientôt

LouReeD

Bonjour à tous ...

Je ne demande pas nécessairement la correction, mais un embryon d'explication serait apprécié...

J'avais mis ce sujet en surveillé !

Je mets un peu de poil à gratter ... c'est pas ce genre d'application qui va ma réconcilier avec les userform ! C'est vraiment complexe, et la programmation doit être chronophage.

Je remplace plutôt les userform par des onglets dédiés à la saisie avec un code générique : https://www.excel-pratique.com/fr/telechargements/utilitaires/excel-formulaire-no438.

Et pour les dates, un seul et unique module ... https://www.excel-pratique.com/fr/telechargements/calendriers/saisie-date-excel-no458

Bon, je fais un peu ma pub, mais j'avoue mon incompétence à résoudre le sujet posé par notre compère au galop, hein !

Bonjour Galopin01, le Forum

Dans ton Private Sub tb3_Enter()

Après Calendrier.Show ajoute la ligne

Unload Calendrier

Sinon conflit d'USF.

Bonne continuation.

Bonjour,

suite dernier test, j'ai pu ajouté 3 personnes "à la suite", mais j'avais la feuille BD d'affichée.

Ensuite je suis aller sur l'autre feuille, avec le USF qui s'ouvre automatiquement, j'ai cliqué sur saisie et là ça plante...

@ bientôt

LouReeD

Edit : c'était pour ajouter que j'étais en mode pas à pas et avec le fichier "en ligne" et pas en local...

Après un deuxième essai en local sans pas à pas ça plante suite au premier ajout !

Je m'en vais refaire un test en pas à pas en ligne...

Bonjour,

Après utilisation du calendrier, votre procédure "Opposite" a visiblement un délai d'application.

1 -Si vous insérez, une simple instruction : Msgbox " Nouveau", à la fin de votre procédure CmdNew par exemple, tout se déroule correctement.

2- Si vous n'utilisez pas la valeur antérieure du contrôle , mais que vous l'affectez directement (ex : Me.cboRech.Enabled = True), tout se déroule correctement.

Ma conclusion est qu'avec l'utilisation du calendrier, les nouvelles valeurs des contrôles à partir des anciennes sont temporairement stockées en mémoires et seulement appliquées lorsque certains liens sont libérés.

Voilà, pas à pas avec fichier en ligne j'ai pu enchainer les saisies :

sans titre

@ bientôt

LouReeD

pour rejoindre thev, le pas à pas permet de résoudre ce problème, mais alors pourquoi en local pas à pas ça ne marche pas ou plutôt ça n'a pas marché ?

@ bientôt

LouReeD

le pas à pas permet de résoudre ce problème,

Exact ou l'insertion d'une MsgBox. Il y a bien un problème de délai d'application.

mais alors pourquoi en local pas à pas ça ne marche pas ou plutôt ça n'a pas marché ?

Avez vous fais des tests ?

Car j'ai ré essayé et ça à tout de même planté...

@ bientôt

LouReeD

Car j'ai ré essayé et ça à tout de même planté...

s'il y a plantage, c'est a priori dû à une non réactivation de la frame "frmQuidam"

Bon ça en a visiblement émoustillé quelques-uns : J'avais laissé un peu de coté car je ne peux travailler sérieusement que la nuit.

Pour répondre un peu en bloc, je ne pense pas que le calendrier en lui-même pose problème.

En effet sur une procédure unique du type ajout ou modification, il récupère bien la date qui se trouve dans la base de donnée et il enregistre bien une nouvelle saisie. Si on quitte aussitot après, il n'y a pas de problème.

Le problème c'est si on veut enchainer aussitôt par une nouvelle saisie...

J'ai revérifié le Unload Calendrier il est bien présent. (au bon endroit dans le module de classe)

Bon je retiens l'idée de mettre une tempo : si un Msgox convient je vais travailler avec un DoEvents. J'ai déjà essayé mais il faut encore que je creuse un peu...

Ce qui m'embête le plus c'est que je n'arrive pas à conceptualiser en quoi le fait de passer par un UserForm "extérieur" dans le cours du traitement arrive à inhiber la routine de sortie... pourtant la frmQuidam reprend bien le Focus je me balade sans problème entre les autres Textbox après avoir quitté le calendrier... Donc la routine qui inverse les status ne devrait y voir que du feu...

Bon je mais me remettre au pas à pas !

Merci à tous.

A+

J'ai arrêté d'user le soleil !

Je remplace plutôt les userform par des onglets dédiés à la saisie avec un code générique : https://www.excel-pratique.com/fr/telechargements/utilitaires/excel-formulaire-no438.

Et pour les dates, un seul et unique module ... https://www.excel-pratique.com/fr/telechargements/calendriers/saisie-date-excel-no458

et cela fonctionne !

Entre celui-ci et celui qui est lent (avant l'intervention de BOB71AU) vous êtes servis aujourd'hui au niveau des USF !

@ bientôt

LouReeD

je retiens l'idée de mettre une tempo : si un Msgox convient je vais travailler avec un DoEvents

J'avais testé le Doevents. Je ne pense pas que ce soit un problème de tempo mais plutôt un problème de liens non libérés. Il semble qu'une nouvelle utilisation d'un UserForm modal (comme une MsgBox) règle le problème comme l'assignation directe des valeurs au contrôle.

Pfff... Mais c'est qu'il me saperait le moral ?

Comme si ça suffisait pas d'être prisonnier...

Bonjour Galopin01, le Forum,

En retour le fichier modifié.

En te souhaitant Kivabien.

En mode modification si changement d'année seule, le rappel du jour est nécessaire.

Bons tests, bonne continuation.

On rencontre le même type de problème sur Modification > Annulation > Modification...

Il y a certainement quelque chose qui m'échappe ... mais voici une proposition sans doute à compléter qui fonctionne ...

Rechercher des sujets similaires à "debogage expert"