userform recherche multiple

devilmort

XLDnaute Nouveau
Bonjour a tous

J'ai un petit souci.

J'ai un fichier xls avec un userform j'aimerais créé un bouton suivant et précédent lorsque je fais une recherche et que celle-ci trouve plusieurs ligne possible

Pour exemple faite la recherche 12340200 en AISM il y a deux résulta lorsque je fait la recherche il me donne la première ligne trouver hors j aimerai défiler les différent résultat avec le bouton suivant pour trouver la bonne ligne et faire les modification éventuel

Voir pièce jointe
merci de prendre le temps de me lire et éventuellement m'aider.

Bonne réception.
Respectueusement.
 

Pièces jointes

  • Parc PEGP - Copie.xlsm
    357.5 KB · Affichages: 66

Dranreb

XLDnaute Barbatruc
En laissant affiché l'enregistrement après ajout, ça leur laisserait une dernière chance de voir qu'ils ont oublié ou mal renseigné quelque chose, avec possibilité de le modifier.
Le bouton Effacer, il faut le laisser de toute façon. Et même mettre sa propriété Cancel à True, et ajouter une 1ère instruction:
VB:
If CLsP.ChangéÀLEchap Then Exit Sub

Pour archiver un version modifiée de la fiche vous pouvez simplement faire devant DéchargerAutresContrôles ou alors seulement en reprendre l'instruction TV(1, 7) = TBxObservation.Text (changer quelque chose d'autre me paraîtrait bizarre).
 

devilmort

XLDnaute Nouveau
- Oui je pense que le bouton effacer je vais le laisser il peut s’avérer utile

- en ce qui concerne le bouton base parc que dois je faire pour le retirer et ainsi garder la fonction des combobox liée pour un ajout en parc

- En ce qui concerne ( If CLsP.ChangéÀLEchap Then Exit Sub ) cela vas changer quoi

- et que doit on modifier pour la prise en compte d'une modification lorsque j'archive une donnée
 

Dranreb

XLDnaute Barbatruc
Supprimez carrément la déclaration de CLsB et toutes les instructions qui s'y rapportent. Moi je changerais aussi tous les "CLsP" en "CL": il n'y aura plus de raison de garder le nom qui permettait de distinguer les deux variables ComboBoxLiées.
Cherchez ChangéÀLEchap dans l'aide de CBxL: il y a une longue explication là dessus. Vous verrez que c'est une sécurité pour la procédure _Click d'un CommandButton ayant sa propriété Cancel à True.
Pour archiver un version modifiée de la fiche vous pouvez simplement faire devant DéchargerAutresContrôles ou alors seulement en reprendre l'instruction TV(1, 7) = TBxObservation.Text (changer quelque chose d'autre me paraîtrait bizarre).
 

devilmort

XLDnaute Nouveau
J'ai pas du tout comprendre

Pour supprimer c'est OK

Pour archiver j'ai pas compris
(En général oui c'est l'observation qui change avant mise en archive mais il peut arriver que l'on modifie d'autre chose sauf EMAT8, ASM et AISM qui eux ne change pas )

Pour le bouton base parc je l'ai supprimer en enlevant les CLsB et modifier les CLsP comme vous me l'avait dit mais ma liaison EMAT8 et ASM ne fonctionne plus

Esque c'est normal que ma mise en forme conditionnel ne fonctionne pas lorsque l'on utilise un userform
 

Pièces jointes

  • CBxLiéesDevilmortmodif.xlsm
    72.3 KB · Affichages: 27

Dranreb

XLDnaute Barbatruc
Avant d'affecter TV à la plage voulue de WshArchive, ajoutez simplement une instruction DéchargerAutresContrôles. Comme celle qu'il y a en premier dans la Sub CBnValider_Click
C'est normal qu'il n'y ait plus aucune liaison entre EMAT8 et ASM puisqu'il n'y avait que le CLsB qui l'assumait, et que vous ne m'avez jamais expliqué comment elle devait fonctionner sans lui. (à quel moment surtout: par exemple au chargement d'une fiche existante, on prend celui qui est noté dans type de véhicule ou celui de la feuille Base, s'il existe ?)
Il y aurait un sérieux nettoyage à faire dans les mises en formes conditionnelles, et peut être les appliquer aux colonnes entières. Il y aurait une meilleure sécurité à leur sujet si les plage étaient mises sous forme de tableaux.
 
Dernière édition:

devilmort

XLDnaute Nouveau
Que ce soit une fiche existante ou l'onglet base la liaison EMAT8 et ASM seront toujours identique(car un EMAT8 donne la désignation ASM)
c'est surtout une aide a l'ajout d'un nouveau matériel afin que ASM soit toujours écrit de la même façon
pour les EMAT8 qui ne sont pas présent dans la base c'est moi qui les ajouterai directement dans celle-ci

dans mon fichier d'origine j'avais mis dans initialize

VB:
    Set f = Sheets("base")
    Set mondico = CreateObject("Scripting.Dictionary")
    For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)
        mondico(c.Value) = ""
    Next c
    Me.EMAT8.AddItem "*"
    For Each i In mondico.keys
        Me.EMAT8.AddItem i
    Next
    Me.EMAT8.ListIndex = 0

et sur mon textbox EMAT8

VB:
'Formule qui definit l'ASM automatiquement avec l'EMAT8
Private Sub EMAT8_Change()
    Set f = Sheets("base")
    Me.ASM.Clear
    For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)
        If c = Me.EMAT8 Or Me.EMAT8 = "*" Then
            Me.ASM.AddItem c.Offset(0, 1)
        End If
    Next c
    'Me.ASM.ListIndex = 0
End Sub

En ce qui concerne l'archive c'est bon cela fonctionne

pour les mise en forme conditionnel je vais tout supprimer et les refaire proprement.
 

Dranreb

XLDnaute Barbatruc
Cochez la référence Microsoft Scripting Runtime.
Ça permet d'utiliser directement des Dictionnary, c'est à dire des variables déclarées As Dictionary, ou mieux: As New Dictionary.
Mais c'est bête, le CLsB faisait déjà pratiquement cela, avec la possibilité en plus de choisir plutôt l'ASM. Le seul truc c'est qu'il ne pouvait pas être opérationnel en même temps que le CLsP parce qu'il gérait une même ComboBox que lui (CBxEMAT8 en l'occurrence) mais basée sur une table différente. Peut être aurait-il seulement fallu trouver un moyen d'automatiser de façon plus transparente le basculement. Pour la CBxASM, ça va, on pourrait faire :
VB:
Private Sub CBxASM_Enter()
CLsP.Stopper: CLsB.Réactiver
End Sub
Private Sub CBxASM_Exit(ByVal Cancel As MSForms.ReturnBoolean)
CLsB.Stopper: CLsP.Réactiver
End Sub
Mais pour la CBxEMAT8 on ne peut pas faire grand chose. La bouton Base/Parc avait le mérite de définir clairement si l'utilisateur voulait sélectionner un EMAT8 de la base en vue de l'ajouter au parc, ou seulement en reprendre un qui y figurait déjà.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pas motivé pour faire ça à votre idée imperturbable, comme tout au long de ce fil, et qui ne me paraît pas bonne…Vous ne tenez jamais aucun compte de ce que je vous dit ? Eh bien moi je vais finir par ne plus tenir compte de cette discussion ni de vous, débrouillez vous.
 

devilmort

XLDnaute Nouveau
désolé je doit m'adapter (je ne décide pas de tout)
je suis autodidacte, je m'adapte (je ne suis pas imperturbable puisque j'ai suivie vos conseil très utile d’ailleurs)
mes idée ne vous paraisse peut être pas bonne mais pourtant dans mon cas c'est utile, vous vous en rendez peut être pas compte car vous ne travailler pas avec mes données.
les données de l'onglet base vont provenir d'une extraction d'un logiciel interne que je vais coller dans cette onglet.
Il me manque juste cette fonction de liaison entre EMAT8 et ASM qui dans mon cas est très important.
Je vais d’ailleurs maintenant étudier votre fichier CBxl.xlam qui me parait très prometteur et approfondir mes connaissance car étant autodidacte je suis toujours content d'apprendre.
Je vous demande donc une dernière petite faveur pour cette fonction svp.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG