MsgBox d'alerte avant ajout, svp

pompaero

XLDnaute Impliqué
Bonjour à tous

Je viens vers vous pour un coup de pouce sur des MsgBox avant enregistrement ou modification.
Je viens de créer un début de fichier avec une BDD concernant des personnels sur plusieurs sites, jusque la je pense y avoir arrivé.
J'aimerai sur Usf-Ajout et UsF_Modif avoir un MsgBox afin d'éviter les doublons sur les Nom, Prénom, Site et Fonction car je n'arrive à le faire.
Egalement sur Usf-Ajout un MsgBox pour obliger le renseignement de tous les objets (Textbox, Combobox), chose que j'ai commencé à faire mais ne fonctionne pas bien.

Merci à vous
Cdlt.
 

Pièces jointes

  • Mise en place fichier casque.xlsm
    80.8 KB · Affichages: 99

Dranreb

XLDnaute Barbatruc
Bonjour.
La touche Echap peut malheureusement avoir pour effet de modifier le contrôle actif, et dans ce cas il ne faut rien exécuter d'autre que ce qui résulte de ce changement (voir dans son module de classe les commentaires de la propriété ChangéÀLEchap en lecture seule de l'objet ComboBoxLiées). Mais le bouton CBnFermer avait en effet déjà sa propriété Cancel à True, bien qu'il ne pouvait pas encore faire autre chose que quitter l'UFm. Je vais le renommer CBnEchap et y mettre plutôt "Quitter" quand le contexte sera tel qu'il ne lui restera plus qu'à devoir faire cela.
Ah zut ! Ce n'était pas voulu que tout s'efface après création d'un casque seul. Mais ça vient seulement de ce que les ComboBox sont alors toujours encore vides à ce moment là, et donc la recherche après réactualisation suite à l'ajout ne peut aboutir au casque qu'on vient de créer. Mais je vais laisser comme ça si ça t'arrange plutôt. Mais je trouve que d'une façon générale il n'y a pas de raison d'effacer exprès les ComboBox après une mise à jour. Ça fait un contrôle visuel de bonne exécution à postériori. La touche Echap le fera.
Oui, il est possible de corriger des frappes en majuscules. Les évènements KeyPress sont faits pour ça, et il en existe un global pour l'objet ComboBoxLiées. Il suffit de corriger le KeyAscii passé en paramètre. J'écris la CL_KeyPress…
Oui, supprime tout le reste qui ne sert plus à rien.
 

Pièces jointes

  • CbxLiéesPompaeroCasques.xlsm
    242 KB · Affichages: 75
Dernière édition:

pompaero

XLDnaute Impliqué
Bonsoir
Le bouton CBnFermer est plaisant car il indique ce qu'il peu faire, ça à l'air de fonctionner.
Pour l'effacement de tout après création d'un casque, on peu laisser les infos chargées puisque comme tu dis, la touche Echap le fera.
L'écriture en Majuscule fonctionne juste sur la partie "Personne", je suppose que c'est normal que la partie "Casque" est mis en attente.
Si on crée une personne avec un nouveau site la mise en majuscule fonctionne bien sur les 3 première Cbx "Site, Nom, Prénom" et ai bien dans Cbx "Fonction" la liste" complète des choix. Mais, si je crée une personne avec un site déjà existant il n'y a plus la liste complète dans Cbx "Fonction".
Egalement, pour sortir de la Cbx "Fonction" avec touche Entrée pour aller dans la partie Casque, ne marche pas mais enregistre les données de la personne.
Dernier point pour ce soir, la création d'un casque seul est impossible car le Btn Valider reste sur Annuler.
Je poursuis les tests.
Cdlt
 

Dranreb

XLDnaute Barbatruc
Bonjour
Les infos ne restent pas chargées comme tu dis. Il est nécessaire de faire CL.Actualiser après toute modification dans la base portant sur les colonnes gérées par CL, l'objet ComboBoxLiées, et ça efface tout. Tout ce qu'on peut faire juste après c'est, si c'était un nouveau casque, remettre dans CBxIdCasq la valeur de ProchIdCsq avant de recalculer celle ci.
Si tu veux des corrections de frappe sur d'autres contrôles que les ComboBox gérées par CL, met du code dans des Private Sub TBx…_Keypress de chacun d'eux.
Le plus simple pour avoir toujours la liste complète des fonctions serait de sacrifier la possibilité de rechercher parmi un groupe de personnes ayant la même fonction, en traitant la CBxFonctionPers de façon indépendante, hors CL, de la même façon que la CBxRedacteurCasq. Fais le faire toi même si ça convient, ça te forcera à plonger un peu plus sérieusement dans le code, parce que ça implique d'ajouter partout où il le faut des instructions par rapport à VLgn(1, 4) pour cette ComboBox.
C'est la touche Tab qui sert à passer d'un contrôle à l'autre. La touche Entrée sert à activer le CommandButton qui a sa propriété Default à True.
C'était une simple erreur de nom de contrôle dans les dernières instructions de la Sub HabiliterContrôles. Corrige la.
 
Dernière édition:

pompaero

XLDnaute Impliqué
Bonjour
j'ai donc tenté d'effectuer les quelques modif, j'avoue avec du mal.
Les codes sont prêts (écrit en vert) car pas sur de moi.
*Dans : Initialize, Garnirchamps, Produirechamps
Pour la CBxFonctionPers indépendante avec instruction à VLgn(1,4).
*Dans : HabilliterContrôle
pour l'erreur de nom de contrôle
*Dans : Les Private Sub TBx......_Change
pour la mise en majuscule
Pas plus, car l'enabled du CBnValider semble bloqué, et CBnEchap, pas sur qu'il fasse exactement les instructions que tu lui avait données, du coup.
Avant de dérégler et sur tout faire n'importe quoi, j'évite de toucher.
 

Pièces jointes

  • CbxLiéesPompaeroCasques.xlsm
    146.8 KB · Affichages: 57

Dranreb

XLDnaute Barbatruc
Pas ouvert le classeur.
Plus tard. J'ai continué un peu de mon coté sur les boutons Mémoriser, Interchanger, Supprimer.
Je regarderai quand j'aurai terminé.
Pour les corrections en majuscule, j'exige que tu fasse des _KeyPress et non pas des _Change
Non mais ! Tu va quand même pas te cantonner éternellement au tout petit nombre de choses que tu sais déjà faire !
Par exemple la 1ère c'est pour la CBx retirée de la charge de CL:
VB:
Private Sub CBxFonctionPers_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If CBxFonctionPers.SelStart = 0 Then KeyAscii.Value = AscW(UCase$(ChrW$(KeyAscii.Value)))
End Sub
 

Dranreb

XLDnaute Barbatruc
J'ai fini par l'ouvrir.
Mais j'ai ouvert le dernier et détecté une légère prise de confiance entre les deux :)
Diagnostic:
— Retiré CL.Add Me.CBxFonctionPers, "Fonction": Juste !
— Indépendante CBxFonctionPers, 4 '<-- Ajout code Fonction personne: juste ! As tu songé que d'autres ComboBox pourraient revenir petit à petit par cette porte ?…
— Me.CBxFonctionPers.Text = VLgn(1, 4) '<-- Ajout code Fonction personne: juste !
— VLgn(1, 4) = Me.CBxFonctionPers '<-- Ajout code Fonction personne: juste !
— Oubli de rappeler le casque juste créé. J'aurais attendu juste après CL.Actualiser mais avant CalcProchIdCsq ceci:
If NouveauCasque Then Me.CBxIdCasq.Text = ProchIdCsq. Mais de toute façon ça n'aurais pas été très sûr comme fonctionnement. J'ai réécrit tout ce qui touche à l'actualisation dans une procédure ActualiserTout qui intègre aussi le code de CalcProchIdCsq.
— Oubli d'une CBxFonctionPers_Change() pour informer HabiliterContrôles d'un changement de cette ComboBox.
— Pas mal les KeyPress, à un détail près: Toujours .SelStart >= 0 donc pas besoin de If pour mettre systématiquement en majuscule.
— And CBxFonctionPers <> TexteVide devient inutile si elle n'est plus prise en charge par CL parce que la Sub Indépendante prend soin de l'enlever du sujet brut. Mais tu aurais été fortiche d'arriver à voir ça ! TexteVide est une variable Public du module MSujetCBx dont la valeur conventionnelle sert à distinguer une ComboBox non renseignée d'une renseignée à un rien existant sur quoi on veut filtrer le reste.
— CBnEchap.Caption = "Annuler" '--> Mis CBnEchap eu lieu de CBnValider mais pas sur de moi!: Juste ! et il y a assez de choses justes pour que tu puisse devenir un peu plus sûr de toi !
— Quand même aussi oublié dans InfosAssociéesPareilles de détecter If VLgn(1, 4) <> Me.CBxFonctionPers.Text Then Exit Function

Je vais maintenant fusionner tout ça avec ce que j'ai fait de mon coté.
À+
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Voilà. Tu peux commencer à tester à fond pour débusquer quand même les bogue mieux tapis dans l'ombre.
Ajouté aussi la possibilité de sélectionner à partir de la liste.
 

Pièces jointes

  • CbxLiéesPompaeroCasques.xlsm
    146.4 KB · Affichages: 68
Dernière édition:

pompaero

XLDnaute Impliqué
Bonjour Dranreb
Le principe de sélection à partir d la liste est bien pensé, très pratique.
Sinon, le 1er Bugue est que j'ai voulu repartir avec la BDD de zéro, et la plus moyen d'ouvrir l'UF (n'appartient pas à la sélection).
Je poursuis les test.
Merci
 

Dranreb

XLDnaute Barbatruc
Bonjour.
C'est vrai que je n'ai jamais étudié un moyen de repartir d'une base vide.
Ça devrait pourtant être un peu moins difficile grâce au ListObject.
J'ai ajouté un calendrier pour les dates. Je joindrai ça à l'occasion…
J'ai aussi réecrit cette procédure parce que "de Épinal" ça faisait pas beau :
VB:
Function Descript(T()) As String
Dim Barre As String: Barre = " "
If Not IsEmpty(T(1, 2)) Then Descript = " " & T(1, 4) & " " & T(1, 3) & " " & T(1, 2) & " " _
  & IIf(InStr("AEÉIOU", Left$(T(1, 1), 1)), "d'", "de ") & T(1, 1): Barre = " — "
If Not IsEmpty(T(1, 5)) Then Descript = Descript & Barre & T(1, 9) & " """ & T(1, 5) & """ " _
  & IIf(InStr("AEÉIOU", Left$(T(1, 6), 1)), "d'", "de ") & T(1, 6)
End Function
 
Dernière édition:

pompaero

XLDnaute Impliqué
Bonjour Dranreb
Ca serai bien que l'on puisse repartir de zéro, au cas ou !!
Calendrier ! ah, bien vue. à l'occasion ok.
Merci pour le "d' " au lieu du "de" c'est vrai que ça fais mieux à la lecture, sur tout plus français.

De mon côté :
- la création d'une personne seule, d'un casque seul on l'aire de fonctionner --> ok
- la mémorisation (bien vue également) on l'aire de fonctionner et pratique --> ok
- la fonction Interchanger à l'aire de fonctionner --> ok
- par contre, si mes souvenirs sont bons, je crois que l'on ne peu pas modifier au niveau des personnes, "Le site, et Nom" ? comment pourrai faire ?
voila pour le moment, je poursuis les tests.
Cdlt
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je pense que ça ne vaut pas le coup de faire en sorte que la programmation supporte un tableau vide. Il est facile de mettre juste un nom "x" dans une ligne et "GIP.0000" comme casque dans une 2ième, et de les supprimer dès qu'il y aura au moins 2 autres lignes sérieuses. "GIP.0000" servira à calculer l'Id du 1er vrai casque, qui sera donc "GIP.0001"
Il y a une solution pour modifier les ComboBox gérées par un objet ComboBoxLiées : Exécuter sa méthode Stopper, prévoir la prise en charge de son évènement ChangeStop pour corriger dans VLgn. Méthode Réactiver pour lui faire reprendre son mode de fonctionnement normal. Mais c'est à tes risques et périls. Rien n'empêche plus alors de mettre une combinaison d'infos existant déjà ailleurs, qui sera en double et dont les deux exemplaires seront inaccessibles. Je pense qu'il vaut mieux créer une nouvelle personne pour celle qui a déménagé dans le nouveau site, interchanger son casque avec son homonyme logique du vieux site et enfin supprimer celui ci.
Ou alors copier exceptionnellement avec Excel, dans le tableau, le site pris d'une autre ligne et le coller dans celui de la personne. Ça arrive souvent que des gens changent de site ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.

Je me suis trompé sur un point dans mon précédent message: des doublons sur l'ensemble des ComboBox gérées par CL seraient quand même accessibles grâce à la possibilité d'en sélectionner un dans la liste. Faut-il ajouter un bouton pour bloquer CL ? Avec quoi dessus ? (remarque: dans certaines applications que j'ai réalisées c'est le bouton de validation qui a un rôle préalable supplémentaire "Ouvrir")

Il y a un bogue grave de la CBnSupprimer_Click qui risque de se manifester si une ligne est mémorisée. Il faut l'écrite comme ça pour éviter ce risque :
VB:
Private Sub CBnSupprimer_Click()
If MsgBox("Êtes vous sûr de vouloir supprimer : " & Descript(VLgn) & Chr$(160) & "?", _
  vbYesNo + vbExclamation + vbDefaultButton2, Me.Caption) = vbNo Then Exit Sub
CL.Lignes(LCou).Delete
If LMém = LCou Then
  LMém = 0: LabInfo.Caption = ""
ElseIf LMém > LCou Then
  LMém = LMém - 1
  End If
ActualiserTout
CL.Nettoyer
End Sub
Y aura-t-il des contrôles supplémentaires en bas pour afficher, ajouter ou modifier les infos de "Tableau suivi" et naviguer de l'une à l'autre, ou bien une ListBox ?
 

Statistiques des forums

Discussions
312 195
Messages
2 086 083
Membres
103 114
dernier inscrit
sylvainb6969