recherche et modification enregistrement

jean marc1234

XLDnaute Occasionnel
bonjour,
j'ai actuellement un classeur avec plusieurs page qui chacune contienne un tableau avec des entêtes identiques.
Un userform unique me permet d'entrer des enregistrements dans la feuille que je souhaite.
Je recherche un code qui me permettrais par le même userform avec un bouton "rechercher" et par le champ "nom"de retrouver un enregistrement et de pouvoir enregistrer la modification éventuelle.
J'espère que je suis clair dans ma demande.
Voila si quelqu’un pouvais m'aider.
Merci d'avance
 

Dranreb

XLDnaute Barbatruc
Vous savez qu'il y a une commande pour rechercher dans vba ?
C'est dans le menu Edition, icone jumelles. Ou bien Ctrl+F.
C'est le seul Redim de tout le module.

Une question: le 'Site apporteur' risque de changer sur une ligne existante, ou bien ça n'a vraiment aucun intérêt de pouvoir rechercher dessus ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pourquoi ne pas ajouter aussi cette ComboBox là à celle qui sont gérées par l'objet ComboBoxLiées qu'on a appelé CL dans notre UserForm ?
Est-ce parce que ça n'aurait pas la moindre utilité de pouvoir cerner un contact parmi ceux qui ont été apportés par quelqu'un ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Et ça ne vous est pas venu à l'idée de devoir le mettre avec les autres CL.Add, impérativement avant CL.Actualiser ? J'ai vraiment l'impression que vous n'avez rien étudié de l'aide de CBxL.
Et ne lancer qu'après avoir nettoyé la RowSource de la ComboBox, sinon même punition: Permission refusée.
Par ailleurs la Sub ÉclaterParAgences n'est toujours pas bonne: Le tableau TAg, qui est bien construit, lui, n'est toujours encore versé à la fin, pour chaque feuille d'agence, que dans une seule ligne, celle qui suit la plage de la ligne des entêtes du tableau. Le Resize(UBound(TAg, 1)) ou Resize(Ubound(TLAg)) n'a toujours pas été ajouté pour l'étendre au nombre de lignes à verser.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Une fois cet exercice minimum résolu de votre part, je tiens à votre disposition une version permettant de définir la politique de gestion des données. Elle devrait permettre, avec les bonnes options (qui ne sont pas forcément celle cochées dans l'image) de ne pas garder simultanément les données sous deux formes différentes à la fois (la seule synthèse permettant la mise à jour, et l'autre, éclatée par agences, dont vous ne m'avez jamais expliqué le but) au risque de prendre trop de place, et ne plus savoir laquelle est à jour (mais il y aura une assistance pour le savoir un peu mieux).
upload_2017-10-16_20-37-28.png
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Montrez moi ce que vous avez essayé.
Ce n'était pas une instruction à ajouter mais juste un expression .Resize(…) à insérer entre une expression Range et sa propriété Value tout à la fin. (Parce que l'expression Range ne désignait qu'une ligne au lieu de toutes celles à garnir)

Dans la prochaine version je ferais autrement de toute façon, pour ne pas reproduire des contacts fictifs ayant pour seul rôle de témoigner de l'existence de l'agence.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Dans ÉclaterParAgences c'est bon. Par contre dans la Sub Synthèse il y a un .Resize(UBound(Tag)).Value = Tag qui n'a rien à faire là.
Dans l'UFmSaisie c'est tout bon mais il y a toujours dans la fenêtre de propriété un CBxSiteApport.RowSource = "=siteapporteur" qui l'empêche de fonctionner.

Essayez en corrigeant ces deux points, puis regardez la nouvelle version.
 

Pièces jointes

  • CBxLiéesJean marc1234.xlsm
    305.4 KB · Affichages: 49
Dernière édition:

Dranreb

XLDnaute Barbatruc
Cela vient de ce qu'on n'essaye plus nulle part de modifier les listes des ComboBox qui ont un RowSource. Tandis que l'objet ComboBoxLiées les change tout le temps, notamment d'abord d'après ce qui existe dans la base et ensuite en fonction des choix effectués dans les autres ComboBox.
À mon avis ça ne fonctionnera que si ça voudra bien, parce que vous avez supprimé dans la Sub Synthèse une instruction Set RngAg = LOtAg.HeaderRowRange.Offset(1) qui devrait normalement être exécutée quand le tableau d'agence est vide et que sa propriété DataBodyRange n'est donc pas définie.
Un truc que j'ai oublié de vous dire, et je m'y suis fait piégé moi même il y a quelque jour: il ne faut plus s'occuper de CBxSiteApport dans les Sub GarnirAutresContrôles et CBnValider_Click. Dans la première la ComboBox est déjà renseignée, et dans la seconde CL s'en occupe, en création, grâce à sa méthode ValeursVers.
 

Dranreb

XLDnaute Barbatruc
Dans la Sub Synthèse de Applicatif1, sont tous deux définis RngAg As Range et LOtAg As ListObject
La condition qui établit que le tableau d'agence est vide c'est LOtAg.ListRows.Count = 0
Indication: c'est l'instruction que vous avez supprimée au lieu de seulement supprimer sa fin qui n'avait rien à y faire.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Oh, là ! C'est la nouvelle version, là !
Les exercices de correction dont on parlait ne concernaient que l'ancien.
Dans la nouvelle version, aucune erreur de syntaxe n'est signalée lors d'un essai de compilation du projet. Mais tout a changé dans la programmation.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Qu'est-ce qui vous donne à penser que vous vous êtes planté quelque part ?
Quel problème vous pose le CBxSiteApport ?
Notez qu'il y en a bien un tout petit: Deux instructions contrecarrent les actions de CL, l'objet ComboBoxLiées. Relisez le dernier paragraphe de mon message #54.
Enlevez donc la 1ère instruction des Sub GarnirAutresContrôles et CBnValider_Click.
 

Discussions similaires

Réponses
33
Affichages
3 K

Statistiques des forums

Discussions
311 711
Messages
2 081 799
Membres
101 818
dernier inscrit
tiftouf5757