Remplissage auto du formulaire suite sélection dans liste

Bonjour à tous,

Je fais appel à vous car malgrès mes recherches sur le site et de nombreux essais ratés sur mon ficher xls je commence a désespérer .

Le problème est pourtant simple.

J'ai un formulaire qui me permet d'alimenter un tableau regroupant différentes informations sur des actions à mettre en place, je souhaite modifier directement mes données dans mon formulaire après avoir sélectionné le numéro de l'action a modifier. (Combobox7)

Exemple si je sélectionne le N°1 dans mon formulaire(liste déroulante) je veux que mes textbox et mes combobox se remplissent automatiquement avec les données correspondantes pour que je puisse les modifier.

Je vous met le ficher en espérant que vous pourrez m'aider.

Merci

Julie

28test-vba.xlsm (52.66 Ko)

bonjour,

Le problème est pourtant simple.

Ménon, ménon !!

Gérer une base de donnée est tout sauf simple.

Comme ton UserForm est très symbolique. Je pense qu'il te faudra au moins attendre jusqu'à demain pour avoir un embryon de réponse !

A bientôt...

A+

J'ai déjà pas mal travaillé dessus, partant d'un niveau de connaissance zéro ça prend beaucoup de temps pour un petit détail mais cela va me faire gagner énormement de temps, je continue de chercher de mon coté en espérant que je vais trouver !

Si vous devez faire une recherche avec votre formulaire sur quel champ ferez vous la recherche ?

Le responsable ?

Non le N° en haut à droite du formulaire

Ok à demain !

Bonsoir,

Je te livre un premier jus...

Hum... j'ai du pas mal sabrer dans ton travail !

En premier lieu j'ai supprimer tous les tableaux prédéfinis.

J'ai supprimé aussi la plupart des formats parasites, je n'ai laissé que quelques formats conditionnels... Tu regarderas comme je les ai définis tu essaieras de faire de même si tu as besoin d'en rajouter... mais pour l'instant te précipite pas là-dessus.

J'ai supprimé ou redéfini la plupart des noms de manière à ce qu'ils soient dynamiques : si tu rajoutes une ligne dans une liste la définition de la liste est toujours valable. Tu as juste le droit de rajouter ou supprimer des items dans les listes sans laisser de blancs ni modifier les définition des noms...

Le UserForm s'affiche quand tu cliques colonne 1 ou sur le bouton :

Si tu cliques colonne 1 le UserForm s'ouvre sur l'enregistrement cliqué

Par contre si tu cliques sur le bouton pour ouvrir le UserForm il s'ouvre sur le premier enregistrement...

Normalement tu ne devrais jamais rajouter un enregistrement directement sur la feuille ni en modifier d'ailleurs.

Tu ne dois pas modifier la colonne 1 : Elle est gérée automatiquement par le système.

Quelques champs sont obligatoires Je t'expliquerai plus tard... S'ils ne sont pas remplis, la validation ne se fait pas. Il n'y a aucun message, simplement le contrôle reprend le focus.

Attention pour passer d'un champ à un autre du UserForm il faut soit utiliser la touche "Tab" sous cliquer avec la souris. Si tu tape sur "Entrée" le Userform tente une validation... Si ça ne te convient pas il suffit de mettre la propriété "Défaut" du bouton "Confirmer" sur "False". De la sorte la confirmation ne pourra se faire qu'avec la souris.

Pour le reste commence par Ajouter un enregistrement puis Supprime l'enregistrement ajouté. Enfin tu peux tester la modification.

Regarde, observe, comprend, lis le code : tu n'es pas obligé de tout comprendre bien que ce soit assez intuitif, tu devineras à peu près la plupart des fonctionnalités. De toute façon tu ne peux pratiquement rien modifier dans le code du formulaire :

Seules les macros ReadRecord et WriteRecord devront certainement être modifiées au fil de l'eau au fur et à mesure de l'évolution de tes besoins. Bien sur ces 2 macros sont étroitement liés au look du formuliare et aux champs que tu ajoutes ou supprimes dans la BD.

Le reste c'est le moteur tu ne devrais pas avoir besoin d'y toucher... Même pas pour mettre de l'eau ou de l'essence !

Je n'accepte pas de : "Ça marche pas !" Si ça marche pas c'est que tu as fait une c... ! Tu fermes sans enregistrer et tu recommences.

Si l'erreur se reproduit, tu m'expliques avec autant de précision que possible ce que tu veux faire et qui ne marche pas...

Avec si possible un lmprimEcran des messages d'erreur et citation de la ligne qui se met en surbrillance dans le VBA quand tu cliques sur débogage...

Ne te précipites pas pour modifier tes tableaux, les mises en forme : Les débutants ont toujours tendance à commencer par la déco. Excel n'est pas un sapin de Noël et toutes mises en forme non indispensables peuvent multiplier par 10 le travail de programmation. Et dans ce cas moi je déclare forfait : C'est toi qui assumera les enjoliveurs et autres gadgets...

Et pour ce que tu ne comprends pas, tu as le droit de demander : Je ne suis pas avare d'explications !

C'est tout. Pour le moment !

[EDIT] Les N° de la première colonne sont des integer : c'est juste une mise en forme qui les fait apparaître sous la forme "A0000"

Ne pas modifier. Rappel : De toute façon tu n'as pas le droit de modifier cette numérotation gérée par le système. Ce N° iD est la clef de voute du système...

A+

77frm-vba-vg1.xlsm (77.14 Ko)

Ouah bravo merci !

Mais petit soucis :

Je ne peux rien faire sur le doc

J'ai mis le message afficher en PJ. Il me dit de mettre à jour les instruction declare...

capture

bonjour,

Encore un PC de gamer ?

Excel ne devrait pas être monté en 64 bits.

Seuls quelques pros ont besoin d'une version 64 bits pour des besoins très spécifiques et en général ils ne viennent pas ici car il n'ont pas besoin de nous !

Je te modifierai ça dans la journée...

A+

Ben non c'est mon PC sur mon lieu de travail....

Merci galopin

Pfff... Ben on va pas être dans le c... s'ils se mettent à monter Excel en 64 dans les établissement publics...

Dans le Module du usfCal essaie de remplacer toutes les Declare Private Function au début du module par :

Private Declare PtrSafe Function FindWindow Lib "user32" _
    Alias "FindWindowA" _
    (ByVal lpClassName$, ByVal lpWindowName$) As LongPtr

Private Declare PtrSafe Function ScreenToClient& Lib "user32" _
   (ByVal hwnd As LongPtr, lpPoint As POINTAPI)

Private Declare PtrSafe Function GetWindowRect& Lib "user32" _
   (ByVal hwnd As LongPtr, lpRect As RECT)

Private Declare PtrSafe Function CreateWindowEx Lib "user32" _
   Alias "CreateWindowExA" _
   (ByVal dwExStyle&, ByVal lpClassName$, ByVal lpWindowName$, _
   ByVal dwStyle&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, _
   ByVal hWndParent As LongPtr, ByVal hMenu As LongPtr, _
   ByVal hInstance As LongPtr, lpParam As Any) As LongPtr

Private Declare Function InitCommonControlsEx& Lib "comctl32" _
    (ByRef INITCOMMONCONTROLSEXData As InitCommonControlsExType)

Private Declare PtrSafe Function DestroyWindow& Lib "user32" (ByVal hwnd As LongPtr)

Private Declare PtrSafe Function SendMessage Lib "user32" _
   Alias "SendMessageA" (ByVal hwnd As LongPtr, _
   ByVal wMsg&, ByVal wParam As LongPtr, lParam As Any) As LongPtr

Private Declare PtrSafe Function SetWindowPos& Lib "user32" _
   (ByVal hwnd As LongPtr, ByVal hWndInsertAfter As LongPtr, _
   ByVal x&, ByVal y&, ByVal cx&, ByVal cy&, ByVal wFlags&)

Attention de ne pas modifier les Private Type qui sont juste en dessous...

Si ça marche, tant mieux, sinon je vais être obliger de remplacer ce Calendrier...

A+

Super ça fonctionne

Par contre maintenant, il y a une erreur de compilation: incompatibilité de type

Merci beaucoup pour ton aide !

capture

Essaie de replacer (quelques lignes plus haut) :

Dim CalRect As RECT, LeTop&, LeLeft&, hWnd&, Marge&, CvtPtPixel!, _

IniCtrl As InitCommonControlsExType, PtCal As POINTAPI

par :

    Dim CalRect As RECT, LeTop&, LeLeft&, hWnd as LongPtr, Marge&, CvtPtPixel!, _
        IniCtrl As InitCommonControlsExType, PtCal As POINTAPI

Fais de même quelques lignes plus haut tu as :

Private mWnd&

remplace le par :
Private mWnd as LongPtr

et si ça ne marche encore pas ben...

Sorry... là je ne vois pas...

Bon je vais essayer de te remplacer TOUSSA par un système compatible, mais il faudra attendre un peu : le 64 bits et moi...

A+

ça marche et après hop ça marche plus quelle galère.... Merci pour le temps que tu passes à m'aider !

il me dit "constante requise sur "UsfStatus = Status.Consultation"

Private Sub UserForm_Activate()
 InitVariable ' Initialisation des variables
 InitData     ' Initialisation adresse liste des données + RowSource
 'InitDicoCCN
 InitComboBox ' Initialisation ComboBox
      UsfStatus = Status.Consultation ' Consultation par défaut
      With Me      ' Initialisation de certains contrôles
      .cmdConfirm.Visible = False: .cmdCancel.Visible = False
      .cboRech.Enabled = True: frmFiche.Enabled = False
      TitleUsf     ' Titre du UserForm (Propriété Caption)
      End With
       ' Focus sur le 1er enregistrement ou l'enregistrement sélectionné dans la feuille
 With Me.cboRech.ListIndex = Me.Tag - 2: End With

Merci pour ce retour...

Ouf ! Je suis bien content...

[EDIT] Faut bien essuyer les plâtres... Je t'avais bien dis c'st tout sauf facile...

Je regarde.

A+

J'ai éditer le message ça à marcher une fois et hop marche plus...

[edit] merci pour ton aide , c'est un vrai casse tête !

En principe ça doit arriver rarement. (à l'occasion d'une tentative imprévue ou illégale)

Je n'arrive pas à détecter quant ça se produit. Observe et dis moi.

En principe quand ça se produit tu peux toujours fermer avec la croix de fermeture.

Ce qui réinitialisera le UserForm pour la prochaine fois. Mais si tu arrives à me préciser à quelle occasion ça se produit je corrigerai.

Pour l'instant je cherche...

A+

Bon j'ai tout revérifié ligne par ligne : il n'y a pas d'erreur.

Comme ce moteur est bien rodé sur plusieurs autres BD, cela signifie qu'on ne doit pas faire de recherche sur le N° iD qui fait partie de la gestion complexe du système, mais il faut introduire un champ supplémentaire "N° Dossier" ou tu pourras rentrer et modifier à ta guise. C'est donc sur ce champ que tu feras la recherche.

Je vais donc rajouter ce champ : Souhaites tu une incrémentation automatique des N° Dossier ou au contraire préfères-tu entrer tes N° toi-même (dans le cas des nouveaux enregistrements) ?

Réponse requise avant que je commence à bosser dessus :

Je ferais ça ce WE. Je pense que ce sera OK demain ou Dimanche soir.

A+

Pas pu me connecter ce week-end , désolée

Une incrimination auto plutôt

Merci

Bon ben... En fait je ne suis plus sur de rien !

Je viens de changer de calendrier et je retombe sur la même erreur : Je pense que je vais être obligé de repartir à zéro...

Je ne lâche pas le morceau mais ça va retarder d'autant.

A+

Rechercher des sujets similaires à "remplissage auto formulaire suite selection liste"