XL 2016 [ RESOLU ]Problème avec formulaire recherche

Dranreb

XLDnaute Barbatruc
Bonjour.
Oui, c'est un problème que j'avais un peu pressenti. Et je ne sais pas encore trop comment y palier.
Saisissez d'abord le code postal puis cliquez dans la ville pour qu'elle passe de 'Assumé' à 'Imposé' et saisissez le reste après.
Mais j'ai conscience que ce n'est pas parfait.
Une autre chose: mettre dans la fenêtre de propriété du CBnChanger la Enabled à True et supprimer les instructions qui le changent, afin qu'on puisse bloquer la fiche même en création.
Mais dans ce cas, une fois bloquée, si on change la ville ou le CP la correspondance de l'autre n'est plus assumée. À moins d'implanter une procédure ChangeStop de l'objet CL qui le fasse quand même.
Voudriez vous homogénéiser peu à peu les trigrammes en tête des noms d'objets selon cette liste :
upload_2018-12-19_10-39-30.png
Par exemple au lieu de Txtfaitpar, TBxFaitPar.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
La procédure qui permettrait d'assumer la correspondance quand la fiche est bloquée :
VB:
Private Sub CL_ChangeStop(ByVal CBM As ComboBoxMmbr)
   Dim L As Long
   Select Case True
      Case CBM.CBx Is CBxCP
         L = CBM.SujetBdD(1)(CBM.CBx.ListIndex)(1)
         CBxVille.Text = CL.PlgTablo(L, CBM.Col + 1).Value
      Case CBM.CBx Is CBxVille
         L = CBM.SujetBdD(1)(CBM.CBx.ListIndex)(1)
         CBxCP.Text = CL.PlgTablo(L, CBM.Col - 1).Value
      End Select
   End Sub
CBM.SujetBdD(1)(CBM.CBx.ListIndex)(1) : première ligne dans la base correspondant au ListIndex de la ComboBox qui a changé. Parce que CBM.SujetBdD, c'est le Sujet ce cette ComboBox, dont l'élément 0 est à l'image de sa propriété List, …(1) c'est, cet élément 1 du Sujet, la liste des tables de numéros de lignes, …(CBM.CBx.ListIndex) c'est la table de numéros de ligne qui y correspond, et …(1) et bien c'est le 1er d'entre eux vu que n'importe lequel conviendrait. Compliqué hein ? Je ne m'attendais pas à ce que vous sachiez l'écrire !

Conseil: Ne bloquez la fiche qu'une fois que tous les vrais éléments d'identification garantissant son unicité ont été spécifiés, et en modification éviter autant que possible de changer ceux ci. Ce blocage neutralise la recherche et entraine donc un risque minime, voire presque seulement théorique, de créer des doublons. Mais bon… s'il y a eu une faute d'orthographe dans un nom par exemple, il y a peu de chances que sa correction aboutisse à un autre nom existant, surtout avec tout le reste pareil en plus…
 
Dernière édition:

DG-59

XLDnaute Nouveau
Re
j'avais un petit problème de bouton j'ai changer sa fonctionne Ajout et Recherche fonctionne
Cp et ville aussi
juste l'effacement qui beug mais bon
Chapeau pour le boulot sans vous je serai très loin de ce résultat
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Ce n'est pas un bogue, c'est tout à fait normal. Lorsqu'on change une ComboBox prise en charge par un ComboBoxLiées ça déclenche d'office une recherche, et si la combinaison de valeurs n'existe pas dans la base, ça nettoie tous les contrôles associés. À moins que l'objet soit stoppé. C'est le rôle du bouton "Bloquer", c'est pour qu'on puisse changer la valeur d'une ComboBox sans que ça ne déclenche de recherche. Ainsi on peut la changer sans que rien d'autre ne s'efface. La fiche garde le statut qu'elle avait avant de bloquer, Ajouter ou Modifier. Ne pas Libérer, en principe, jusqu'à cette validation.
Le seul truc c'est que si on change le CP ou la ville ça ne rectifie pas l'autre si la fiche est bloquée. C'est pourquoi je vous propose cette Sub CL_ChangeStop qui fait en sorte que ça se fasse quand même.
Mais j'ai l'impression qu'il peut y avoir plusieurs codes postaux pour Paris. Si c'est la cas il faudrait peut être la rectifier comme ceci :
VB:
Private Sub CL_ChangeStop(ByVal CBM As ComboBoxMmbr)
   Dim L As Long, CBMrCP As ComboBoxMmbr
   Select Case True
      Case CBM.CBx Is CBxCP
         If CBxCP.MatchFound Then
            L = CBM.SujetBdD(1)(CBxCP.ListIndex)(1)
            CBxVille.Text = CL.PlgTablo(L, CL.Item(CBxVille).Col).Value
         Else: CBxVille.Text = "": End If
      Case CBM.CBx Is CBxVille
         If CBxVille.MatchFound Then
            Set CBMrCP = CL.Item(CBxCP)
            If CBxCP.MatchFound Then
               L = CBMrCP.SujetBdD(1)(CBxCP.ListIndex)(1)
               If CBxVille.Text = CL.PlgTablo(L, CBM.Col) Then Exit Sub
               End If
            L = CBM.SujetBdD(1)(CBxVille.ListIndex)(1)
            CBxCP.Text = CL.PlgTablo(L, CBMrCP.Col).Value
         Else: CBxCP.Text = "": End If
      End Select
   End Sub
[/code]À tester
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Si le mot "Bloquer" n'est pas clair vous pouvez en mettre un autre qui vous parle plus: "Figer", "Éditer", "Changer", "Rectifier", "Isoler", "Ouvrir", "Exposer", "Détacher", "Déconnecter", "Suspendre", "Stop"…
Ce n'est pas la fiche elle même qui est bloquée mais le processus de recherche.
On pourrait aussi mettre une CkxRecherche ou un TBnRecherche qui serait le plus souvent respectivement cochée ou enfoncé.
 

DG-59

XLDnaute Nouveau
Bonjour je ne vois pas ou mettre les codes, la j'ai essaie d'avances un peux dans la liste des animaux
sa fonctionne bien, quelque petit soucis quand je rentre un Cp la ville ( ex seul) ne s'affiche pas je doit me mettre sur le clavier est fait fleche Bas pour la sélectionné je me demande ou j'ai fait une connerie
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous parler de la Sub CL_ChangeStop ?
Elle peut se mettre où vous voulez, mais moi je la mettrais juste avant la CL_Change.
Remarque: avec ou sans cette procédure, on n'est pas obligé de bloquer, si on saisit ou choisit le code postal avant quoi que ce soit d'autre. Mais même alors il faudrait cliquer un coup dans la ville ramenée sinon elle s'effacera en saisissant une autre ComboBox.
Et vous n'avez pas suivi mes instruction, pour que la CBnChanger.Enabled soit toujours True
Vous avez apparemment introduit des doublons manuellement dans la base. Il s'en suit qu'on ne peut plus y accéder: il vous dit d'affiner mais toutes les ComboBox sont déjà renseignées sur fond vert un peu sombre signifiant "assumé".
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Partout, j'espère. Vous l'avez mis à True dans la fenêtre de propriétés, puis supprimé les instructions qui le changeaient ?
Montrez ce que vous avez fait. Vous avez aussi supprimé les doublons ?
Et quand vous saisissez le code postal d'abord, sans bloquer, vous cliquez bien dans la ville après pour qu'elle passe en fond vert fluo comme si vous l'aviez choisie, pour la stabiliser ?
 
Dernière édition:

DG-59

XLDnaute Nouveau
Bonjours est joyeux noël

heu bonne question je ne suis pas très fort dans les codes j'essaie de comprendre ce que vous m'avez donnée et ajouté certain element que l'on me demande après

la chose qui es un peux dérangeant ces le fait que " quand on remplis , arrivé ex adresse on ce met sur code postal l'adresse ce supprime "
apres ces le top tout fonctionne super bien :)
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonjour, joyeux Noêl à vous aussi.
Je sais, c'est pour cela qu'il faut pouvoir bloquer aussi en création, pour que les autre contrôles déjà remplis ne s'effacent pas.
Ce n'est que pour changer une ComboBox qu'il est nécessaire de bloquer, pour les TextBox ce n'est pas nécessaire. Fiez vous à leur couleur de fond.
Bleu lég. azur très clair: CBx non renseignée.
Émeraude lég. vert: CBx non renseignée mais assumée (seul choix possible dans les existants). Elle s'effacera si vous tapez d'autres info. d'identification, à moins de cliquer d'abord dedans pour qu'elle devienne officiellement renseignée.
Chartreuse lég. vert: CBx renseignée et correspondante.
Rouge lég. orange: CBx renseignée et non correspondante.
Cyan lég. azur: TBx ou autre contrôles associés, ou CBx ne participant pas à l'identification ni à la recherche de fiche, ou quand la recherche est bloquée même si elle y participe sinon.
J'interviendrai probablement plus tard, quand tout ça sera un peu stabilisé et que vous aurez homogénéisé les débuts de noms de contrôles (généralement la 1ère et dernière majuscule de son nom de type et sa dernière lettre, voir liste poste #21, suivi d'un mnémonique commençant par une majuscule)
On verra si on peut détecter facilement les conditions où le blocage doit être automatique quand on arrive dans la CBxCP ou la CBxVille. À première vue ce n'est qu'après un effacement qu'il ne doit pas se faire, afin de pouvoir toujours limiter d'entrée la recherche aux animaux d'une ville. D'ailleurs si cette possibilité ne présentait aucun intérêt, il suffirait de ne plus confier à CL mais à CA ces deux CBx, et les gérer à part, voire à l'aide d'un deuxième objet ComboBoxLiée, je ne sais pas…
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour vous aider à comprendre le codage de l'UserForm je joins ce classeur.
Attention, il est conçu pour s'installer automatiquement comme complément. Vous n'en avez pas besoin sous cette forme à moins que vous ne le souhaitiez, parce que ses modules de service sont déjà installés directement dans le classeur d'application.
Je le joins uniquement pour que vous puissiez étudier sa feuille d'aide.
Je n'ai pas encore créé l'équivalent pour les contrôles associés, qui est plus simple mais en reprend quelques principes.
 

Fichiers joints

DG-59

XLDnaute Nouveau
Bonjour et Meilleur voeux

j'ai modifier avec toute les infos que vous m'avez apportez tout fonctionne très bien
J'attend le retour de l'asso pour mettre en résolu si il ne me demande pas autre chose

encore merci pour le tps que vous m'avez déjà accordé
 

DG-59

XLDnaute Nouveau
une dernière petite question peux t'on ce servir fichier d'excel comme il es la mais lier excel et google sheet pour la feuille contact ?
 

DG-59

XLDnaute Nouveau
Bonjour est Merci a tous pour l'aide je ne trouve plus l'endroits pour mettre en résolus
 
Dernière édition:

DG-59

XLDnaute Nouveau
Bonjour j'ai un nouveau petit souci

le fichier fonctionne super bien,
il nous manqué des informations quand une personne possède plusieurs animaux
donc j'essais de crée une ListBox1 dans mon userform mais je n'arrive pas a l'alimenté

j'ai essayer de lié la ListBox1 à la TxtAdresse mais sans sucée

le contact xx a 2 animaux sa me le marque bien dans la partie LabInfo est dans le Nom de l'animal qui me permet de choisir lequel je souhaite modifier

mais j'aimerai que les nom s'affiche dans la liste box quand la personne est sélectionné

Penser vous que sa sois réalisable

Merci d'avance
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Je ne vois pas où est le problème ni pourquoi vous avez besoin d'une ListBox pour ça:
Tapez Nom/Prénom existant en premier, puis choisissez le nom de l'animal, c'est tout. Seul les noms d'animaux hébergés par cette personne seront proposés dans la ComboBox.
Si vous voulez pouvoir chercher une adresse, mettez une ComboBox pour l'adresse et faites la gérer aussi par CL.
Cela dit il est possible de renseigner une ListBox contenant l'ensemble des lignes trouvées.
Il est aussi possible de retrouver la liste des numéros de lignes attachée à une ComboBox gérée par CL
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Exemple de code :
VB:
Private Sub CL_Résultat(Lignes() As Long)
   Dim TBas(), LBas As Long, TLBx(), LLBx As Long
   Dim TLgn() As Long ' Attention: il pourrait devenir intéressant de la déclarer globale.
   If CBnChanger.Caption = "Libérer" Then Exit Sub
   TLgn = Lignes
   If UBound(TLgn) > 1 Then
      ReDim TLBx(1 To UBound(TLgn), 1 To 1)
      TBas = CL.PlgTablo
      For LLBx = 1 To UBound(TLgn)
         LBas = TLgn(LLBx)
         TLBx(LLBx, 1) = TBas(LBas, 5)
         Next LLBx
      ListBox1.List = TLBx
   Else
      ListBox1.Clear
      LCou = Lignes(1): btnAjout.Caption = "Modifier": btnAjout.Enabled = True
      CBnSupprimer.Enabled = True: CBnChanger.Enabled = True
      TVL = CL.Lignes(LCou).Range.Value
      CA.ValeursDepuis TVL: Affiché = True: End If
   End Sub
 

Discussions similaires


Haut Bas